我一直在 FreeBSD 系统上试验缓冲区溢出。作为第一个实验,我试图让被利用的程序启动另一个进程(在这种情况下是 /bin/hostname)。一切正常,程序打印了主机名,然后终止。之后我试图让程序产生一个shell(即执行/bin/sh)。我假设这可以通过简单地交换代表要调用的程序的字符串来完成。当我尝试这个时,被利用的程序简单地退出,根据 gdb 它确实成功地产生了一个新进程(/bin/sh)。但是,没有生成任何外壳。然后我尝试了我的第一个漏洞利用并将 /bin/sh 文件移动到 /bin/hostname,仍然没有改变任何东西。我现在的问题是,从任何其他命令执行 /bin/sh 似乎有什么不同?
作为参考,对于 shell 生成尝试,我使用了以下 shellcode:
char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x50"
"\x54\x53\xb0\x3b\x50\xcd\x80";