前言
完成內網信息收集工作后,滲透測試人員需要判斷流量是否出的去、進的來,隱藏通信隧道技術通常用在訪問受限的網絡環境中追蹤數據流向和在非受信任的網絡中實現安全的信息傳輸。
隱藏通信隧道基礎知識
隱藏通信隧道概述
一般的網絡通信,先在兩台機器之間建立TCP連接,然后進行正常的數據通信。但是在實際的網絡中,通常會通過各種邊界設備、軟/硬件防火牆甚至入侵檢測系統來檢查對外連接的情況,如果發生異常,就會對通信進行阻斷。
隧道,就是一種繞過端口屏蔽的通信方式。防火牆兩端的數據包通過防火牆所允許的數據包類型或端口進行封裝,然后穿過防火牆,與對方進行通信。當被封裝的數據包到達目的地時,將數據包還原,並將還原后的數據包發送到相應的服務器上。常見的隧道列舉如下:
- 網絡層:IPv6隧道、ICMP隧道、GRE隧道
- 傳輸層:TCP隧道、UDP隧道、常規端口轉發
- 應用層:SSH隧道、HTTP隧道、HTTS隧道、DNS隧道
判斷內網的連通性
判斷內網的連通性是指判斷機器能否上外網等。要綜合判斷各種協議(TCP、HTTP、DNS、ICMP等)及其端口的通信情況,常見的允許流量流出的端口有80、8080、443、53、110、123等。
幾個判斷內網連通性的方法:
-
ICMP協議
- 執行命令"ping<IP地址或域名>"
-
TCP協議
- 使用netcat工具,執行命令"nc<IP地址 端口號>"
-
HTTP協議
- 使用curl工具,執行命令"curl<IP地址:端口號>"
-
DNS協議
- nslookup -h 查看命令幫助 Windows操作系統
- dig -h 查看命令幫助 Linux操作系統
網絡層隧道協議
在網絡層中,兩個常用的隧道協議是IPv6和ICMP,以下將分別介紹。
IPv6
IPv6隧道
"IPv6"是"Internet Protrol Version 6"的縮寫,也被稱為是下一代互聯網協議,它是由IETF(The Internet Engineering Task Force,國際互聯網工程任務組)設計用來代替現行的IPv4協議的一種新的IP協議,IPv4協議已經使用了20多年,目前面臨着地址匱乏等一系列問題,而IPv6則能從根本上解決這些問題,現在,由於IPv4資源幾乎耗盡,IPv6開始進入過渡階段。
IPv6隧道技術
- IPv6隧道技術指的是通過IPv4隧道傳送IPv6數據報文的技術,為了在IPv4的海洋中傳輸IPv6信息,可以將IPv4作為隧道載體,將IPv6報文整體封裝在IPv4數據報文中,使IPv6能夠穿越IPv4的海洋,到達另一個IPv6小島。
- 攻擊者有時會通過惡意軟件來配置允許進行IPv6通信的設備,以避開防火牆和入侵檢測系統。
- 支持IPv6的隧道工具有socat、6tunnel、nt6tunnel等。
防御IPv6隧道攻擊的辦法
針對IPv6隧道攻擊,最好的防御辦法是:了解IPv6的具體漏洞,結合其他協議,通過防火牆和深度防御系統過濾IPv6通信,提高主機和應用程序的安全性。
ICMP隧道
ICMP隧道介紹
- ICMP隧道簡單、實用,是一個比較特殊的協議。在一般的通信協議里,如果兩台設備要進行通信,肯定需要開放端口,而在ICMP協議下就不需要。最常見的ICMP消息為ping命令的回復,攻擊者可以利用命令得到比回復更多的ICMP請求。
- 常用的ICMP隧道工具有icmpsh、PingTunel、icmptunel、powershell icmp等。
防御ICMP隧道攻擊的辦法
許多管理員會阻止ICMP通信進入站點。但是在出站方向,ICMP通信是被允許的,而且目前大多數的網站通信和邊界設備不會過濾ICMP流量。使用ICMP協議會產生大量的ICMP數據包。我們可以通過Wireshark進行ICMP數據分析,以檢測惡意的ICMP流量。
傳輸層隧道技術
傳輸層技術包括TCP隧道、UDP隧道和常規的端口轉發等...
lcx端口轉發
lcx是一個基於socket套接字實現的端口轉發工具,有Windows和Linux兩個版本,Windows版本為lcx.exe,Linux版本為portmap。一個正常的socket隧道必須具備兩端:一端為服務端,監聽一個端口,等待客戶端的連接;另一端為客戶端,通過傳入服務端的IP地址和端口,才能主動與服務器連接。
netcat(nc)
- netcat主要的功能是從網絡的一端讀取數據,輸入到網絡的另一端(可以使用TCP和UDP協議)。
- Shell分為兩種,正向Shell和反向Shell,如果客戶端連接服務器,客戶端想要獲取服務器的Shell,就稱為正向Shell;如果客戶端連接服務器,服務器想要獲取客戶端的Shell,就稱為反向Shell。
PowerCat
- PowerCat可以說是nc的PowerShell版本。PowerCat可以通過執行命令回到本地運行,也可以使用遠程權限運行。
- PowerCat的參考文檔:https://github.com/besimorhino/powercat
應用層隧道技術
在內網中建立一個穩定的、可靠對的數據通道,對滲透測試工作具有重要的意義,應用層的隧道通信技術主要利用軟件提供的端口來發送數據,常用的隧道協議有SSH、HTTP/HTTPS和DNS。
SSH協議
SSH協議介紹
在內網中,幾乎所有的Linux/Unix服務器和網絡設備都支持SSH協議,在一般情況下,SSH協議是被允許通過防火牆和邊界設備的,所以經常被攻擊者利用;同時,SSH協議的傳輸過程是加密的,所以我們很難區分合法的SSH會話和攻擊者利用其它網絡建立的隧道。攻擊者使用SSH端口隧道突破防火牆的限制后,能夠建立一些之前無法建立的TCP連接。
防御SSH隧道的思路
SSH隧道之所以能被攻擊者利用,主要是因為系統訪問控制措施不夠,在系統中配置的SSH遠程管理白名單,在ACL中限制只有特定的IP地址才能建立SSH,以及設置系統完全使用帶外管理等方法,都可以避免這一問題。
HTTP/HTTPS協議
- HTTP Service代理用於將所有的流量轉發到內網。
- 常見的代理工具有reGeorg、meterpreter、tunna等...
DNS協議
- DNS協議是一種請求/應答協議,也是一種可用於應用層的隧道技術,雖然激增的DNS流量可能會被發現,但是基於傳統的socket隧道已經瀕臨淘汰及TCP、UDP通信大量被防御系統連接攔截的狀況,DNS、ICMP、HTTP/HTTPS等難以被禁用的協議已成為攻擊者控制隧道的主流渠道。
- 一方面,在網絡世界中,DNS是一個必不可少的服務;另一方面,DNS報文本身具有穿透防火牆的能力。由於防火牆和入侵檢測系統設備大多不會過濾DNS流量,也為DNS成為隱蔽通道創造了有利條件。
- 幾款DNS工具
- dnscat2,下載地址:https://github.com/iagox86/dnscat2
- iodine,下載地址:https://github.com/Al1ex/iodine
Socks網絡代理
常見的網絡場景有如下三類:
- 服務器在內網中,可以任意訪問外部網絡
- 服務器在內網中,可以訪問外部網絡,但服務器安裝了防火牆來拒絕敏感端口的連接
- 服務器在內網中,對外只開放了部分端口,且服務器不能訪問外部網絡。
Socks網絡代理
socks是一種代理服務,可以簡單的將一端的系統連接到另一端。socket支持多種協議,包括HTTP、FTP等。socks分為socks4和socks5兩種類型:socks4只支持TCP協議;socks5不僅支持TCP/UDP協議,還支持各種身份驗證機制等,其標准端口為1080,socks能夠與目標內網計算機進行通信,避免多次使用端口轉發。
常用的socks代理工具
EarthWorm
EarthWorm(EW)是一套便攜式的網絡工具,具有socks服務架設和端口轉發兩大核心功能,可以在復雜的網絡環境中實現網絡穿透,EarthWorm下載地址:https://github.com/rootkiter/EarthWorm
reGeorg
reGeorg是reDuh的升級版,主要功能是把內網服務器的端口通過HTTP/HTTPS隧道轉發到本機,形成一個回路。
sSocks
sSocks是一個socks代理工具套裝,可用來開啟socks代理服務。sSocks支持socks5驗證,支持IPv6和UDP,並提供反向socks代理服務。
SocksCap64
SocksCap64是一款在Windows環境中相當好用的全局代理軟件,官方網站:http://www.sockscap64.com/
Proxifier
Proxifier是一款非常好用的全局代理軟件,Proxifier提供了跨平台的端口轉發和代理功能,適用於Windows、Linux、和MacOS平台,Proxifier官方網站:https://www.proxifier.com/
ProxyChains
ProxyChains是一款可以在Linux下實現全局代理的軟件,性能穩定、可靠,可以使任何程序通過代理上網,允許TCP和DNS流量通過代理隧道,ProxyChains官方網站:http://proxychains.sourceforge.net/
壓縮數據
滲透測試中,下載數據是一項非常重要的工作。
RAR
RAR格式介紹
RAR是一種專利文件格式,用於數據的壓縮和打包,開發者為尤金·羅謝爾,"RAR"的全稱是"Roshal ARchive",意為"羅謝爾的歸檔",其首個公開版本為RAR 1.3發布與1993年。
使用命令
- Rar.exe a -k -r -s -m3 E:\webs\1.rar E:\webs 把E:\webs下的所有內容打包為1.rar,放到E:\webs目錄下
- Rar.exe s E:\webs\1.rar 解壓文件
- 以ZIP格式壓縮/解壓命令是一樣的,只需要將文件后綴名修改為".zip"即可。
7-Zip
7-Zip介紹
7-Zip是一款免費且開源的壓縮軟件,與其他軟件相比,7-Zip有更高的壓縮比;與WinRAR相比,7-Zip對系統資源的消耗較少,無需安裝,功能與同類型的收費軟件相近。
使用命令
- 7z.exe a -r -p12345 E:\webs\1.7z E:\webs\ 把E:\webs下的所有內容打包為1.7z,放到E:\webs\目錄下,壓縮密碼為12345
- 7z.exe x -p12345 E:\webs\1.7z -oE:\x 把打包的1.7z文件解壓到E:\x目錄下
上傳和下載
-
對於不能上傳shell,但是可以執行命令的Windows服務器(而且唯一的入口就是命令行環境),可以在shell命令環境中對目標服務器進行上傳和下載操作。
-
上傳和下載方法
- 使用FTP協議上傳
- 使用VBS上傳
- 利用Debug上傳
- 利用Nishang上傳
- 利用bitsadmin下載
- 使用PowerShell下載
