我正在尝试使用 Ubuntu 16.04 在我的机器中重新创建缓冲区溢出攻击。但无论我尝试什么,我总是收到错误“段错误(核心转储)”

我已经使用以下方法禁用了内存随机化:

sysctl kernel.randomize_va_space=0

我在编译我的程序时也尝试过这些标志:
-fno-stack-protector
-z execstack
-D_FORTIFY_SOURCE=0

添加所有这些标志,我最终编译了以下内容:
gcc -z execstack -g -fno-stack-protector -mpreferred-stack-boundary=2 -D_FORTIFY_SOURCE=0 -o code code.c

但似乎没有任何效果。为了成功重新创建缓冲区溢出,是否需要禁用任何其他保护?

最佳答案

我认为你做了可能的事情,但不是严格要求的。在计算机安全类(class)中,我们刚刚使用以下标志编译了源代码:-O0 -mpreferred-stack-boundary=2 -g -m32 fno-stack-protector通过这种方式,您可以禁用代码优化,将堆栈指针对齐 4 个字节,禁用 Canary 并启用 gdb(最好开始使用调试器)。请记住,使用 m32 代码是为 32 位系统编译的。如果您从零开始学习缓冲区溢出,最好从这个开始(处理寄存器更容易)。

请记住,如果您试图利用缓冲区溢出进行漏洞利用并且遇到段错误,则您可能会覆盖保存的帧指针(但您应该知道,它是堆栈粉碎: http://insecure.org/stf/smashstack.html )。

关于c - Ubuntu 16.04 缓冲区溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39397232/

10-09 13:16