Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Nginx-chain-Rift-Poolslip — 结合 PoolSlip 堆越界读取泄漏(CVE-2026-9256)与 rift 溢出(CVE-2026-42945)的 ASLR 无关 nginx RCE 链 PoC,可在原版 nginx 上到达 system()。 | Kitploit
工具/GitHubGitHub/y198nt/nginx-chain-rift-poolslip
内存取证漏洞分析漏洞利用逆向工程Web应用程序漏洞利用渗透测试学习与教育Payload 开发二进制利用实验室与实践
GitHuby198nt/nginx-chain-rift-poolslip

Nginx-chain-Rift-Poolslip

1464个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

结合 PoolSlip 堆越界读取泄漏(CVE-2026-9256)与 rift 溢出(CVE-2026-42945)的 ASLR 无关 nginx RCE 链 PoC,可在原版 nginx 上到达 system()。

查看仓库

nginx PoolSlip × Rift — 与 ASLR 无关的 RCE 利用链

首个公开的利用链,将两个近期披露的 nginx rewrite 引擎漏洞串联为针对 官方原版 nginx:1.30.0 Docker 镜像 (Debian 13,glibc 2.41)的单个 与 ASLR 无关的远程 system() —— 无硬编码地址,无需重启 nginx,每个新 worker 约 90% 成功率。

  • CVE-2026-9256 "PoolSlip" —— $args 堆越界读取 → 泄露实时的 libc + 堆 地址。
  • CVE-2026-42945 "rift" —— is_args 堆溢出(仅限 URL 安全字节)→ 对 limit_conn 清理指针进行 2 字节部分覆写 → ngx_destroy_pool 遍历该指针 → system(cmd)。

两者都是 同一个 is_args 两遍处理不匹配问题指向两个不同的利用点。完整技术分析:Writeup


披露与安全

  • 两个 CVE 均 已修复,且 正在被积极利用。请升级到 nginx 1.30.2(稳定版)或 1.31.1(主线版) —— 注意 1.30.1 修复了 rift,但 仍然 受 PoolSlip 影响,因此只有 1.30.2 能同时关闭两者。NGINX Plus:R36 P5 / R32 P7 / R37.0.1.1。
  • 本文仅出于 教育和授权测试目的 发布。它针对的是 捆绑的本地 Docker 实验环境 —— 切勿 将其指向你不拥有或未获得书面许可测试的基础设施。
CVE代号受影响版本修复版本(nginx OSS)
CVE-2026-42945rift0.6.27 – 1.30.01.30.1 / 1.31.0
CVE-2026-9256PoolSlip0.1.17 – 1.30.1 + 1.31.01.30.2 / 1.31.1

仓库内容

文件用途
nginx.conf一个可信的 API 网关配置(即 目标 —— 包含 limit_conn、v1→v2 迁移 rewrite、上传代理、降级搜索页面)。无分配器调优。
run.sh搭建本地实验环境:原版 nginx:1.30.0 提供 nginx.conf 服务,外加一个慢速上游,监听主机 :19322。
exp_official.py完整利用链:PoolSlip 泄露 → 推导 libc/堆 → 喷射 → 布局整理 → rift 部分覆写 → system()。

环境要求

  • Docker、Python 3(用于运行 exp_official.py)、curl、Linux x86-64。
  • 实验环境 完全自包含 / 离线 —— run.sh 使用 perl(原版 nginx 镜像中已包含)实现慢速上游,因此无需额外软件包、无需 slow_backend 文件、无需联网。nginx 二进制文件本身保持原版。
  • 可选: 若要跟随 WRITEUP.md 中的 gdb 调试会话,可 docker exec 进入容器并 apt-get install gdb file binutils,然后加载 gef。

运行方式

git clone https://github.com/y198nt/Nginx-chain-Rift-Poolslip
cd Nginx-chain-Rift-Poolslip

bash run.sh                                          # stock nginx:1.30.0 on http://127.0.0.1:19322
python3 exp_official.py --cmd 'id > /tmp/rce_proof'  # leak → overwrite → system()
docker exec nginx-rift-official cat /tmp/rce_proof   # → uid=101(nginx) ...

exp_official.py 是 一次性 的(每个新 worker 约 90% 成功率):它只泄露一次、只触发一次。如果 证明文件为空,说明布局整理偏差了一个槽位 —— 重新运行即可。

docker rm -f nginx-rift-official      # tear the lab down

工作原理(简述)

  1. 泄露(PoolSlip)。 rewrite ^/search/((.*))$ /lookup?$1$2 使复制过程将 r->args.len 设置得 超出 缓冲区;降级的 /search 页面将 $args 反射到相邻堆内存中。 经过短暂预热后,一个 libpcre-cluster 指针(位于 libc 下方固定偏移 0xb0ad08)和一个堆 指针会稳定在固定偏移处 → 得到 libc_base 和 heap_base,无任何硬编码。
  2. 写入(rift)。 rift 溢出只能输出 URL 安全字节,因此在 ASLR 下完整 48 位地址只有约 0.9% 的概率可写。 相反,我们只覆写一个 已经有效 的 limit_conn 清理指针的 低 2 字节 —— ASLR 随机的高字节原封不动地保留 → 与 ASLR 无关。
  3. 触发。 该指针被重定向到喷射的 ngx_pool_cleanup_t{handler=&system, data=cmd, next=0};关闭受害者连接会触发 ngx_destroy_pool 的清理遍历 → system(cmd)。

完整推导、gdb 调试会话以及死胡同/转向过程见 Writeup。

缓解措施与检测

  • 打补丁(升级到 1.30.2 / 1.31.1)—— 唯一真正的修复方法。
  • 该写入仅通过满足以下条件的 rewrite 触发:其替换内容包含 ? 且 引用了 PCRE 捕获组($1/$2),或类似 ^/x/((.*))$ → /y?$1$2 的嵌套捕获模式。请审计配置中 此类写法,并在打补丁前重写有问题的 rewrite/set。
  • 反射 $args(或任何回显的请求派生变量)是将越界读取转化为信息泄露的关键 —— 不要逐字反射请求参数。
  • WAF / 日志信号:URI 路径中出现 %2B/+ 洪水(GET /search/+++…)、降级页面回显长 $args 导致的 503,以及 worker SIGSEGV/重启风暴。

致谢与参考

  • 原始组件 PoC:DepthFirstDisclosures/Nginx-Rift(rift)。
  • 厂商公告 —— CVE-2026-42945(rift)和 CVE-2026-9256(PoolSlip),F5/nginx。
  • 利用链串联、与 ASLR 无关的技术,以及 Debian glibc-2.41 移植:本仓库。
下载工具