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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-32023 — CVE-2025-32023 / PlaidCTF 2025“Zerodeo”的PoC与漏洞利用 | Kitploit
工具/GitHubGitHub/leesh3288/cve-2025-32023
内存取证漏洞分析漏洞利用逆向工程CTFPayload 开发二进制利用
GitHubleesh3288/cve-2025-32023

CVE-2025-32023

CVE-2025-32023 / PlaidCTF 2025“Zerodeo”的PoC与漏洞利用

查看仓库
2164011年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-32023

概念验证与利用 for CVE-2025-32023 (GHSA-rp2m-q4j6-gr43) / PlaidCTF 2025 "Zerodeo"

复现 / 补丁

测试于 redis:7.4.2-alpine3.21@sha256:02419de7eddf55aa5bcf49efb74e88fa8d931b4d77c07eff8a6b2144472b6952

影响 Redis 版本 >= 2.8。已在 8.0.3、7.4.5、7.2.10、6.2.19 中修复,详见 redis/redis@5018874。

漏洞

Redis 中的 HyperLogLog 只是另一种具有自定义编码的字符串。迭代稀疏 HLL 编码时,需要对每个稀疏表示的运行长度进行求和,这可能导致在操作畸形 HLL 时,int i 中计数的总长度溢出为负值。这使得攻击者能够覆盖 HLL 结构上的负偏移,从而导致根据 HLL 结构来源(例如,hllMerge() 使用栈分配的结构,hllSparseToDense() 使用堆分配的结构)在栈或堆上越界写入。

见下面的补丁片段:

root@kitploit:~
 int hllMerge(uint8_t *max, robj *hll) {
     struct hllhdr *hdr = hll->ptr;
     int i;

     if (hdr->encoding == HLL_DENSE) {
         hllMergeDense(max, hdr->registers);
      } else {
         uint8_t *p = hll->ptr, *end = p + sdslen(hll->ptr);
         long runlen, regval;
+        int valid = 1;
 
         p += HLL_HDR_SIZE;
         i = 0;
         while(p < end) {
             if (HLL_SPARSE_IS_ZERO(p)) {
                 runlen = HLL_SPARSE_ZERO_LEN(p);
+                if ((runlen + i) > HLL_REGISTERS) { /* Overflow. */
+                    valid = 0;
+                    break;
+                }
                 i += runlen;
                 p++;
             } else if (HLL_SPARSE_IS_XZERO(p)) {
                 runlen = HLL_SPARSE_XZERO_LEN(p);
+                if ((runlen + i) > HLL_REGISTERS) { /* Overflow. */
+                    valid = 0;
+                    break;
+                }
                 i += runlen;
                 p += 2;
             } else {
                 runlen = HLL_SPARSE_VAL_LEN(p);
                 regval = HLL_SPARSE_VAL_VALUE(p);
-                if ((runlen + i) > HLL_REGISTERS) break; /* Overflow. */
+                if ((runlen + i) > HLL_REGISTERS) { /* Overflow. */
+                    valid = 0;
+                    break;
+                }
                 while(runlen--) {
                     if (regval > max[i]) max[i] = regval;
                     i++;
                }
                 p++;
             }
         }
-        if (i != HLL_REGISTERS) return C_ERR;
+        if (!valid || i != HLL_REGISTERS) return C_ERR;
     }
     return C_OK;
 }

利用

利用是标准的 Redis 可利用漏洞:

  1. 破坏 jemalloc 堆上的一个 sds 对象,使其长度变大
  2. 喷洒 embstr 对象,使其损坏为伪造的模块对象
  3. 使用损坏的 sds 对象转储堆,以找到目标 embstr 对象并泄漏地址
  4. 在目标 embstr 对象上创建一个伪造的模块对象
  5. 删除伪造的模块对象,触发析构函数并获得 RCE
下载工具