在正确的方向寻找指针,已经看到了利用代码的许多例子,允许在任何“正在使用”的端口上进行shell连接,而该端口上的原始应用程序继续正常运行。
我对程序化/系统级的观点感兴趣,这是如何实现的。
我在绝望中问这里,因为我所提出的是tcpmux(它使用TCP#1,并将打破端口上的现有应用程序,因为每个客户端在指定的应用程序响应之前需要发送一个服务名称)。
我可以描述的最好的方式是在应用程序正在监听端口时敲入失败的端口。
我的google-foo在这个上看起来很虚弱。 另外,我只在Windows主机上看到过这个,想进一步研究,看看在Linux系统上是否可以这样做。
我可能会误解你在这里提出的问题,但通常这样做的方式是:
这真的只是:
//figure out which fd to use (we'll call this "n") dup(n,0); dup(n,1); dup(n,2); execve("/bin/sh",0,0);
现在,您的exploit程序(在您的最后)有一个可以与之通话的networkingshell。 在一个多进程/multithreading应用程序中,目标应用程序应该继续在这种情况下运行 – 新的连接将由accept()处理,但是在目标进程中运行了一个shell。 一个例子就是对apache的一个攻击 – 你最初连接的子apache进程本质上将成为你的shell,但是父进程和其他subprocess将继续像通常那样工作。