HackTheBox Writeup - Sightless

發布日期:2024/9/14

摘要: 此篇文章為 Hack The Box 靶機 Sightless 的 Writeup 。雖然此機器難度判定為簡單,但是內容涵蓋了多種不同的滲透基礎技術,包含 vhost 列舉、CVE 漏洞利用、密碼破解與 SSH Tunnel 等。熟悉滲透的朋友,應該可以輕易拿到 user flag 。難點在最後提權到 root 的時候,需要稍微跳脫出滲透的思維。總之,Sightless 是個內容豐富的靶機,值得一玩。


主機偵查

端口掃描

先用 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

目錄