Ubuntu 16.04缓冲区溢出

时间:2016-09-08 17:46:59

标签: c ubuntu buffer-overflow

我正在尝试使用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

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

1 个答案:

答案 0 :(得分:2)

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

请记住,如果你试图利用缓冲区溢出并且你得到分段错误,你可能会覆盖保存的帧指针(但你应该知道它,它的堆栈粉碎:http://insecure.org/stf/smashstack.html)。< / p>