Ubuntu 16.04 缓冲区溢出

cip*_*her 4 c ubuntu buffer-overflow

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

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

sysctl kernel.randomize_va_space=0
Run Code Online (Sandbox Code Playgroud)

我在编译我的程序时也尝试过这些标志:

-fno-stack-protector 
-z execstack
-D_FORTIFY_SOURCE=0
Run Code Online (Sandbox Code Playgroud)

添加所有这些标志,我最终编译了以下内容:

gcc -z execstack -g -fno-stack-protector -mpreferred-stack-boundary=2 -D_FORTIFY_SOURCE=0 -o code code.c
Run Code Online (Sandbox Code Playgroud)

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

fus*_*led 6

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

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