Meterpreter可靠的网络通信
一、简介
在最近对Meterpreter的众多更新中,可靠的网络通信是最受欢迎的变化之一。长时间以来,Meterpreter与Metasploit之间的通信相对容易中断。一旦中断,会话就正式失效,唯一的恢复方法是重新执行原始的利用路径,重新建立一个全新的会话。
对于HTTP/S传输,曾经存在一些容错功能。由于HTTP/S的无状态特性,每个命令请求/响应都会通过一个新的连接进行传输,因此即使发生网络中断或其他意外问题,HTTP/S传输也会继续尝试与Metasploit通信。而基于TCP的传输则没有类似的功能,一旦发生网络问题,就不会有任何尝试重新连接的机制。
重新设计的传输实现现在为基于TCP的通信提供了容错支持。任何没有被Metasploit正常终止的会话都会在后台继续运行,Meterpreter会尝试重新建立与Metasploit的通信。
通过使用各种超时值(可以在会话中添加传输时指定,也可以实时控制当前传输的行为),可以对该功能的行为进行一定程度的控制。有关这些超时值的详细信息,请参阅超时文档。
在后台,Meterpreter现在在运行时会在内存中维护一个循环链表,包含所有传输。当某个传输失败时,Meterpreter会关闭并清理当前传输机制的资源,然后切换到链表中的下一个传输。接下来,Meterpreter会使用此传输配置尝试重新连接Metasploit。它会继续尝试,直到以下情况发生:
- 达到会话的总超时值,此时会话会终止。
- 达到传输的重试总次数,此时Meterpreter会切换到下一个传输。
- 连接尝试成功,重新与Metasploit建立通信。
如果Meterpreter只配置了一个传输,它会不断地在该传输上重试,直到会话超时,或者成功建立会话。
二、关于容错传输的重要说明
现在,TCP和HTTP/S的有效负载都包含了容错功能,因此需要注意的是,通过exit -y
退出Metasploit时,不再像以前那样终止TCP会话。如果Metasploit使用exit -y
关闭,而没有终止现有会话,则TCP和HTTP/S的Meterpreter会话会继续在后台运行,尝试通过指定的传输重新连接Metasploit。如果你打算退出Metasploit并终止所有会话,请确保先运行sessions -K
命令。
简而言之,在不运行sessions -K
命令时,受害者机器会持续发送请求连接会话。