主機偵查
端口掃描
先用 nmap 掃瞄端口資訊,開啟了 port 21 、port 22 和 port 80。
nmap 10.10.11.32 -A -sC -sV

port 80 的 virtual host 是 sightless.htb ,將其加入 /etc/host 中,才可正常瀏覽網頁。
feroxbuster -u http://sightless.htb/ -t 10 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x "txt,html,php" -v -k -n -e -r -o tcp_80_http_feroxbuster_dirbuster.txt


網站偵查
本網頁服務是 php + nginx ,作業系統為 ubuntu。

利用 feroxbuster 進行目錄列舉。

子網域列舉
利用 gobuster 列舉 virtual host 發現 sqlpad.sightless.htb。
gobuster vhost -k --domain sightless.htb --apend-domain -u http://10.10.11.32 -w /usr/share/seclists/Discovery/DNS/n0kovo_subdomains.txt -o tcp80_vhost.txt

將其加入 /etc/hosts


初始存取
上網 google 一下 sqlpad 近期有沒有 RCE 漏洞?

發現 CVE-2022-0944 的 PoC 程式碼。

成功建立 reverse shell ,但是在容器中。

建立持久性
透過 metasploit 建立持久性。

提升權限
docker 逃脫
上傳提權腳本 linpeas 並執行。

發現容器中有三個使用者登入預設拿到 /bin/bash 。

其中,node 是服務帳號,/etc/shadow 中 hash 為空。

密碼破解
其餘兩個使用這分別是 root 和 michael ,用 John the Ripper 爆破他們的密碼。
unshadow passwd shadow > unshadow
john --wordlist=/usr/share/wordlists/rockyou.txt unshadow

爆破得來的密碼 SSH 登入 root 失敗。

然而,SSH 登入 michael 卻成功。

內網偵查
透過 scp 上傳提權腳本 linpeas 。

執行提權腳本。

linpeas 幫我們列舉 nginx 的設定檔,其中,我們發現除了 sqlpad 外,還有 admin 和 web1 這兩個 virtual host。

nginx 將 admin.sightless.htb 導向到 127.0.0.1:8080 ,限制外部存取。用 SSH tunnel 將 8080 port 的流量導出來。
ssh -L 8080:127.0.0.1 michael@sightless.htb

現在可以在 kali 透過 127.0.0.1:8080 存取。上網搜尋了 froxlor 的 RCE 漏洞,近期只有 CVE-2023-0315, 但是成功利用它需要有一組有效的帳密。上一步從 sqlpad 容器中破解的 root 和 michael 帳密無法登入 froxlor。

Chrome Devtools Protocol
接下來,嘗試了很多方法都沒辦法順利提權或找到 froxlor 帳密。只好去翻翻官方論壇尋求已經拿到 root 的大佬開示。討論區如預期一般一片哀鴻遍野,很多人跟我一樣,一直卡在這邊。在一大串哀號中很幸運地找到了一束光,這位甘道夫的提示獲得 froxlor 帳密和 Chrome Devtools Service 有關,果然是活了上千年的大法師,一語點破夢中人。

驀然回首,再次執行 linpeas ,找找看 chrome devtools service 的痕跡。在進程列舉中,看到有一個使用者 John 利用 crontab 自動化執行了一對和 chrome 有關的進程,看起來是利用 chromedrviver 自動化地對 froxlor 做 healthcheck ,每 60 秒做一次。

由於之前有透過 Selenium 寫過一些自動化的動態爬蟲,相關的技術可用於搶票機器人和自動化填期末課程意見調查表等,知道透過 chromedriver 驅動動態爬蟲會開啟一個 port ,但是沒有深入研究過 Chrome Devtools Protocol 。

先看看有哪些 ephemeral port 被開啟,極有可能是 Chrome Devtools Service 。我們一樣可以透過 SSH tunnel 將這些流量導出來。

成功導出後 Chrome Service Protocol 流量後,參考 Google 官方文件對遠端除錯功能的描述,在瀏覽器開啟 chrome://inspect/#devices ,設定好除錯目標。

成功攔截到一個要偵錯的目標正在存取 http://admin.sightless.htb:8080 。

點擊「inspect fallback」,進入 Devtools 視窗。

可以看到 healthcheck 程式不段地用管理員帳密登入 froxlor 。



可以在登入的封包中看到 admin 帳密在 form data 。

利用帳密 admin:ForlorfroxAdmin 登入 froxlor 。


提權到 root
瀏覽網頁,編輯設定 PHP-FPM 的設定。

看到 restart command 可以編輯,預設是透過 service 指令重啟 php-fpm ,這個操作需要 root 權限,且可編輯。

將 restart command 更改成將 root 的 ssh 私鑰複製到 /tmp 資料夾。
cp /root/.ssh/id_rsa /tmp

將 Enable php-fpm 關掉,重新開啟一次。

此時,我們還無法讀取 /tmp/id_rsa ,需要透過一樣的方法更改檔案權限,再重啟一次 php-fpm 。
chmod 777 /tmp/id_rsa

透過 scp 將 root 的 SSH 私鑰複製到 kali ,透過這個私鑰 SSH 登入 root@sightless.htb ,就可以拿到 root shell。
cp id_rsa ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh root@sightless.htb
