Ubuntu 16.04缓冲区溢出问题

4

我正在尝试在我的Ubuntu 16.04机器上重新创建一个缓冲区溢出攻击。但是无论我尝试什么,我总是收到错误信息“segmentation fault(core dumped)”。

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

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

但似乎什么都不起作用。我是否还需要禁用其他保护措施才能成功重现我的缓冲区溢出呢?


尝试用铝箔包裹主插头上的保险丝。 - Weather Vane
1个回答

6
我认为你尽了最大努力并做了一些并非必需的事情。在计算机安全课程中,我们只使用以下标志对源代码进行编译:-O0 -mpreferred-stack-boundary=2 -g -m32 fno-stack-protector。这样可以禁用代码优化,将堆栈指针对齐到4字节,禁用canaries并启用gdb(最好开始使用调试器)。请记住,使用m32编译的代码是为32位系统编译的。如果您想从零开始学习缓冲区溢出,最好从这里开始(更容易处理寄存器)。请注意,如果您尝试使用缓冲区溢出制作攻击程序,并且出现分段错误,则可能正在覆盖保存的帧指针(但您应该知道这一点,这就是堆栈破坏:http://insecure.org/stf/smashstack.html)。

谢谢你的回答!非常有帮助!我按照你的建议编译成了32位程序,现在它可以正常工作了。 - cipher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接