重新使用一个开放的TCP / UDP端口来处理两个simultanious应用程序

在正确的方向寻找指针,已经看到了利用代码的许多例子,允许在任何“正在使用”的端口上进行shell连接,而该端口上的原始应用程序继续正常运行。

我对程序化/系统级的观点感兴趣,这是如何实现的。

我在绝望中问这里,因为我所提出的是tcpmux(它使用TCP#1,并将打破端口上的现有应用程序,因为每个客户端在指定的应用程序响应之前需要发送一个服务名称)。

我可以描述的最好的方式是在应用程序正在监听端口时敲入失败的端口。

我的google-foo在这个上看起来很虚弱。 另外,我只在Windows主机上看到过这个,想进一步研究,看看在Linux系统上是否可以这样做。

我可能会误解你在这里提出的问题,但通常这样做的方式是:

  1. 一个脆弱的应用程序正在监听一个端口
  2. 你的攻击进入应用程序,应用程序使用“accept()”来处理它。 这将返回accept()的套接字的文件描述符。
  3. 你的攻击在应用程序中执行一些shellcode,调用“dup()”,第一个参数是accept()调用返回的fd,并且重复描述符0,1和2(stdin,stdout和stderr)。
  4. 那么你的shellcode exec()是一个shell,它将有与该套接字关联的stdin,stdout和stderr。

这真的只是:

//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将继续像通常那样工作。