我试图执行带有注入堆栈的shell代码的程序(程序来自securityTube.net教程,Megaprimer缓冲区溢出)非常好的网站(http://www.securitytube.net/)
我们的shellcode.c是:
#include <stdio.h>
char shellcode[]="\xb0\x01\x31\xdb\xcd\x80";
main()
{
int *p;
p=(int *)&p+2;
(*p)=(int)shellcode;
}
我使用fno-stack-protector
和-z execstack
编译来禁用堆栈保护,即使使用这些参数我也会出现分段错误,
我们的shellcode只是用于exit()函数的系统调用,使用gdb我注意到在shellcode中命令int $x80
时引发了分段错误。
也许还有另一个安全参数阻止了我们的shellcode
任何建议请
答案 0 :(得分:0)
也许你可以尝试这个例子:http://shell-storm.org/shellcode/files/shellcode-827.php
因为你的shellcode有一些问题。
它没有将$ edx清除为null。
您可以使用gdb进行检查。
在$ 80之前设置breadpoint。
或使用strace跟踪系统调用参数。
以下是我使用strace运行代码的结果。
execve("/bin//sh", ["/bin//sh"], [/* 3 vars */]) = -1 EFAULT (Bad address)