5

作为课程作业的一部分,我需要编写一个利用代码来导致缓冲区溢出并执行堆栈上存在的代码。

我已经通过以下命令关闭了堆栈随机化: sysctl -w kernel.randomize_va_space=0 但是,我无法找到关闭堆栈执行保护的方法。我不确定 ubuntu 中是否有一些堆栈 exec 保护......所以我的第一个问题是 ubuntu 8.10 中是否有类似 red hat 的 exec-shield 的东西,如果有,我们如何将其关闭。

我一直试图导致缓冲区溢出并从堆栈执行指令,但是每当我尝试这样做时,它都会给我一个段错误。

我有 ubuntu 8.10 64 位,但是,即时调试程序是在 i386 机器上编译的,堆栈保护关闭。

4

2 回答 2

5

您可能希望-z execstack在 GCC 编译中使用标志进行编译,以及-fno-stack-protector(禁用 GCC 的 SSP/Propolice 堆栈保护),即:

gcc -fno-stack-protector -z execstack -o vuln vuln.c

在此之后,一切都可能变成杰克。请注意,这sysctl -w kernel.randomize_va_space=0只是地址空间随机化,而不是堆栈保护本身;这可能会被强制使用各种技术。

于 2010-02-04T02:00:31.257 回答
0

这些程序通常可以在没有可执行堆栈的情况下被利用。如果受害者是在没有可执行堆栈的情况下编译的,则将面向返回的编程视为一种利用技术。

http://en.wikipedia.org/wiki/Return-oriented_programming

于 2013-04-16T19:58:39.683 回答