作为课程作业的一部分,我需要编写漏洞利用代码以导致缓冲区溢出并执行堆栈中存在的代码。
我已通过以下命令关闭堆栈随机化: sysctl -w kernel.randomize_va_space = 0 但是,我无法找到关闭堆栈执行保护的方法。我不确定ubuntu中是否有一些堆栈exec保护...所以我的第一个问题是在ubuntu 8.10中是否有像red hat的exec-shield这样的东西,如果有,我们怎么能把它关掉。
我一直试图导致缓冲区溢出并从堆栈执行指令,但每当我尝试这样做时,它就会给我一个seg错误。
我的ubuntu 8.10 64位,但是程序即时调试是在关闭堆栈保护的i386机器上编译的。
答案 0 :(得分:5)
您可能希望在GCC编译中使用-z execstack
标志进行编译,以及-fno-stack-protector
(禁用GCC的SSP / Propolice堆栈保护),即:
gcc -fno-stack-protector -z execstack -o vuln vuln.c
此后一切都应该变成杰克。请注意,sysctl -w kernel.randomize_va_space=0
只是地址空间随机化,而不是堆栈保护本身;这可能是强行使用各种技术。
答案 1 :(得分:0)
这些程序通常可以在没有可执行堆栈的情况下被利用。如果在没有可执行堆栈的情况下编译受害者,请将面向返回的编程视为一种利用技术。