Ubuntu16.04 缓冲区溢出

Ubuntu 16.04 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

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

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

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