有没有办法在我的机器上停用缓冲区溢出保护?

有没有办法在我的机器上停用缓冲区溢出保护?

我想在我的各种虚拟机上进行一些缓冲区溢出实验,包括(但不限于)Debian 6、Ubuntu 12.04、Fedora 16,但每次我尝试执行缓冲区溢出漏洞时都会收到以下消息:

stack smashing detected (core dumped)

经过研究后,我了解到这是一个名为缓冲区溢出保护在编译器中实现。海湾合作委员会例如使用GCC 堆栈粉碎保护器 (ProPolice),铿锵/LLVM用途两个缓冲区溢出检测器,SafeCode 和 AddressSanitizer

我的问题是:因为我真的想检查缓冲区溢出攻击在我的机器上有没有办法(也许是一个编译器标志?一个linux配置文件?)来停用缓冲区溢出保护?

答案1

海湾合作委员会

在 gcc ( man gcc) 上,检查由以下方式启用

  -fstack-protector
      Emit extra code to check for buffer overflows, such as stack smashing attacks.  >This is done by adding a guard variable to functions with
      vulnerable objects.  This includes functions that call alloca, and functions with >buffers larger than 8 bytes.  The guards are initialized when
      a function is entered and then checked when the function exits.  If a guard check >fails, an error message is printed and the program exits.

  -fstack-protector-all
      Like -fstack-protector except that all functions are protected.

您可以通过no-在选项名称前面添加来禁用两者

-fno-stack-protector -fno-stack-protector-all

LLVM/铿锵

关于 LLVM/Clang (http://clang.llvm.org/docs/UsersManual.html#commandline) 启用/禁用 AdressSanitizer:

-f[no-]address-sanitizer:打开AddressSanitizer,一个内存错误检测器。

和安全代码(http://safecode.cs.illinois.edu/docs/UsersGuide.html

-f[无-]内存安全

相关内容