在网络攻防进入常态化的形势下,防火墙配置越发严格,在实战攻防演习及红队工作中经常遇到无法直通互联网的主机(通常是使用nginx反代的方式对外提供Web服务),我们一般称之为"不出网"。此种条件下建立内网隧道有诸多限制,本文提供一种新的思路解决这个问题。
常规出网隧道搭建
如果已控主机可以访问互联网(出网),建立隧道的选择就非常多,通常有以下几类:
· 使用frp/ligolo等基于golang的内网穿透工具。
· 使用MSF获取Session后建立端口转发/socks4a/socks5代理。
· 使用regeorg/Tunna/ABPTTS等基于webshell的内网代理。
其中基于frp/ligolo等内网穿透工具是出网环境最好的选择,因为此类工具中都集成TLS加密/TCP连接复用/socks5代理功能,有极高的传输效率及稳定性。
常规不出网隧道搭建
技术原理
如果已控主机无法访问互联网(不出网),那我们的选择就只剩下一种了:
使用regeorg/Tunna/ABPTTS等基于webshell的内网代理,regeorg/Tunna/ABPTTS的核心方法和原理是相同的,技术点有两个:
· webshell端使用socketchannel建立tcp连接,基于session来区分不同的tcp连接。
· client端建立tcp监听,将读取到的数据使用post方式提交到webshell。
regeorg/Tunna/ABPTTS优点:
· 使用方便:只需要将webshell上传到对应服务器可以解析的目录即可。
· 无需命令执行权限:所有的内网连接都是webshell建立及操作的,不需要执行任何二进制文件或上传webshell。
regeorg/Tunna/ABPTTS缺点:
· webshell特征明显:webshell中无可避免的需要调用socketchannel/fsockopen等函数,而这些函数在正常开发过程中很少使用,这为WAF等查杀提供了便利。好在webshell特征隐藏是很成熟的技术,这个缺点很容易解决。
· 无法反向端口映射:webshell本身无法进行监听端口的操作,所以此类工具只能进行正向的端口转发与socks代理,像cobaltstrike这种第一个beacon只支持反向连接的工具使用起来很不方便。
不出网隧道新思路
从上文中分析regeorg/Tunna/ABPTTS等工具缺点可以发现,现有工具的主要限制在于webshell。我们可以将建立tcp连接与监听端口的功能移植到可执行文件中,webshell只负责进行简单的流量转发,这样就可以很好的拓展功能。
正向Socks代理
· client运行在互联网的vps上,开启端口监听处理proxychains转发的tcp连接。
· clinet从tcp连接中读取数据,将数据存储在post请求中发送到webshell。
· webshell将http请求转发到本地的server服务器。
· server为运行在不出网主机中,取出http请求中的数据,根据socks协议规则解析目的地址及端口。
· server将于目的地址及端口建立tcp连接,发送数据。
大部分建立连接及处理数据的工作由不出网主机中运行的server端实现,webshell只进行http请求的转发操作。
反向端口映射
server端:
· beacon将http请求(假设数据为AAAAAA)发送到server。
· server将(AAAAAA)存储到缓存,并保持与beacon的http连接。
client端:
· 请求webshell。
· webshell转发请求到server。
· server将缓存的(AAAAA)填充到http应答中。
· webshell将server的应答转发给client。
· client从应答中获取数据(AAAAA)。
· client与cobaltstike的listener建立tcp连接。
· client发送(AAAAA)到cobaltstrike的listener。
· conbaltstrike发送应答数据(BBBBBB)。
· client将数据(BBBBB)封装到http请求中,通过webshell转发到server。
· server通过之前保持的http连接将(BBBBBB)发送到beacon。
可以看到我们可以通过新的方法直接使用reverse_https类型的beacon上线。上图中只是不出网的当前主机上线,如果我们需要内网其他主机上线也可以,原理图稍有变更。
只要将server的监听从127.0.0.1改为0.0.0.0即可,这样的话内网其他主机就可以通过不出网主机上线了。
新思路的技术实现
上文中所描述的技术已经有成熟的工具可以实现,地址如下:
https://github.com/FunnyWolf/pystinger
本文暂时没有评论,来添加一个吧(●'◡'●)