博客
关于我
攻防世界-pwn1-Writeup
阅读量:566 次
发布时间:2019-03-09

本文共 1386 字,大约阅读时间需要 4 分钟。

如何利用栈溢出绕过canary保护机制

在安全研究中,asbrute force攻击和各种防护机制打臂 REQUIRED firm的实战经验无疑是宝贵的。在本例中,我们将探讨如何利用栈溢出漏洞绕过保护机制canary,进而控制程序执行。

背景与问题分析

程序的设计目标是实现对栈数据的读写操作,但其存在栈溢出漏洞。为了应对这一安全威胁,开发者采用了canary保护机制。这一机制通过在栈中预留一个小区域(canary),检测任何试图覆盖该区域的行为,从而防止栈溢出攻击。然而,正如每一项安全措施都可能被攻破一样,这一机制也有其漏洞。

栈溢出与canary绕过

程序中栈溢出的溢出空间相当大,而canary保护仅为特定的大小,通常是最后的字节。这意味着攻击者可以精确地覆盖一个canary的最后一字节,从而绕过保护机制。在这个过程中,攻击者通常会先确定canary的值,以便为后续步骤做准备。

通过分析程序,我们发现了一个在菜单中选择的操作,该操作允许攻击者读取大量栈数据。具体来说,在case1中,程序通过read函数读取了大量的数据,导致栈溢出。这一操作被用来作为绕过机制的突破口。

利用ROP链获取控制

一旦绕过了canary保护,下一步是控制程序执行。为了实现这一点,攻击者需要利用返回操作指令(ROP,Return-Oriented Programming),将程序控制回到已知安全区域,例如 main 函数。通过构造ROP链,可以实现这个控制过程。

接下来,攻击者需要读取libc中的函数地址,通常是通过Already Known是一些gadgets,比如 onegadget。这些gadgets通常可以通过利用栈上的函数调用来触发,从而获得更高的权限。

###Exploiting the栈溢出漏洞

在Python脚本中,利用PwN库,可以构造一个rop链来执行相关操作。我将构造一个包含canary地址的链,使得程序跳转到已知的 Address,我们可以用这 链来达到我们的目的,然后发送这个链作为回复。

攻击策略

为了实现攻击,我们首先构造一个可以读取栈溢出区域的payload,读取canary值。然后,构造rop链,通过jump到ROP gadgets,触发onegadget,从而获得control。

在实验中,我们通过:

payload = b'a'*0x88 + p64(canary) + p64(0xdeadbeef) + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(start_addr) + p64(onegadget)

构造一个链,将程序控制到ROP环节,进而触发漏洞。

总结

利用栈溢出漏洞绕过canary保护,以及构造ROP链控制程序执行,是当今的常见漏洞利用方式。相对于直接的buffer overflow,这种方法更为灵活,允许攻击者做出更精确的控制。尽管开发者设有各种保护机制,攻击者回应的挑战始终在于如何突破这些防护,不被检测,并获得最终的finged control.

在实际应用中,值得注意的是,漏洞的类型和防护措施随购买发行型会发生变化。因此,持续学习和实践对应对这些问题至关重要。

通过以上步骤,可以成功绕过canary保护机制,控制程序执行,实现漏洞利用。

转载地址:http://smppz.baihongyu.com/

你可能感兴趣的文章
pyqt出现“Ui_Dialog has no attribute “show””
查看>>
PyQt:如何使用QAxWidget引用发送参数
查看>>
PyQt:我可以制作一个带有图标和文本的工具栏按钮吗?
查看>>
pyscopg2:是否可以在循环中动态添加 %s
查看>>
Pyserial 缓冲区的填充速度比我读的快
查看>>
PySpark - 在数据框中求和一列并将结果返回为 int
查看>>
pyspark On Yarn 的模块依赖问题
查看>>
PySpeech(Python)-转录MP3文件?
查看>>
Pyspider WebUI 未授权访问致远程代码执行漏洞复现
查看>>
pyspider爬虫学习-文档翻译-Architecture.md
查看>>
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path
查看>>
Pytesseract集字符白名单
查看>>
PyTorch DataLoader 报错 Segmentation fault (core dumped) 的原因及解决方案
查看>>
Pytest ------ 标记函数
查看>>
Pytest Fixture的妙用:深度解析范围和实际运用!
查看>>
Pytest monkeypatch不适用于导入的函数
查看>>
Pytest 命令行报错: Hint: make sure your test modules/packages have valid Python names.
查看>>
pytest 的 request fixture:实现个性化测试需求
查看>>
Pytest+Allure 接口自动化测试平台开发实战
查看>>
pytest+allure使用动态级别,参数化severity
查看>>