Nefhara/CVE-2025-4396

GitHub: Nefhara/CVE-2025-4396

针对 WordPress Relevanssi 插件时间盲注漏洞的验证与利用工具包,支持密码哈希提取和自动化破解。

Stars: 0 | Forks: 0

# CVE-2025-4396 - WordPress Relevanssi 基于时间盲注 SQL 注入工具包 ## 概述 本仓库包含针对 **CVE-2025-4396** 的实用研究和验证工具包,这是一个未经认证的 **基于时间盲注 SQL 注入 (Time-Based Blind SQL Injection)** 漏洞,影响 WordPress 的 **Relevanssi** 插件,通过 `cats` 参数触发。 该项目专为**授权紫队 (Purple Team)** 交战而构建,旨在: - 以受控方式验证可利用性, - 展示不同的攻击者技术级别, - 衡量 SOC 检测覆盖率, - 以真实方式提取 WordPress 密码哈希, - 并在哈希恢复后自动化离线破解工作流。 仓库包括: - 一个**标准提取脚本**, - 一个**更快的二分查找提取脚本**, - 以及一个辅助脚本,用于使用 Hashcat **准备并破解提取的 WordPress 6.8+ 哈希**。 ## 测试环境 - 服务器:Debian 11 - WordPress 6.9.1, - Relevanssi 插件 4.24.4 (下载自 https://wordpress.org/plugins/relevanssi/advanced/), - POC 使用自 Kali Linux OS。 ## CVE 描述 **CVE-2025-4396** 是一个影响 WordPress 中 **Relevanssi** 搜索功能的 SQL 注入漏洞。 在测试场景中,该问题可以通过搜索工作流访问,更具体地说是通过 `cats` 参数访问。易受攻击的代码路径允许攻击者控制的输入影响插件生成的 SQL 查询。 由于易受攻击的端点无需事先认证即可访问,因此该缺陷可被远程攻击者利用以执行**未经认证的 SQL 注入**。 实际影响包括: - 数据库查询操纵, - 基于时间盲注 SQL 注入 (Time-Based Blind SQL Injection), - 提取敏感数据(如密码哈希), - 以及根据环境不同,可能通过有效凭据恢复实现权限提升。 ## 漏洞原理 ### 根本原因 该漏洞的存在是因为来自搜索相关参数的用户可控输入在被合并到 SQL 查询之前未得到安全处理。 实际上,这意味着攻击者可以将 SQL 表达式注入后端查询逻辑,并强制数据库评估额外的条件。 ### 为什么是盲注 该漏洞以**盲注 (blind)** 模式被利用,这意味着应用程序**不**直接显示 SQL 错误或原始数据库结果。 攻击者不是从页面读取查询输出,而是向数据库询问一系列**真/假问题**并观察一个副作用: - 如果条件为**真**,数据库会休眠几秒钟, - 如果条件为**假**,响应会立即返回。 ### 为什么是基于时间的 利用依赖于 `SLEEP()` 等 SQL 函数,以在服务器响应时间中产生可测量的差异。 这允许攻击者无需直接查看数据即可推断出数据。 例如,攻击者可以提出如下问题: - “第一个字符等于 `$` 吗?” - “第二个字符的 ASCII 值是否大于 77?” - “前 N 个字符是否与此模式匹配?” 通过重复此过程,攻击者可以逐个字符地重建完整的哈希。 ## 漏洞利用原理 ### 标准提取逻辑 标准方法遍历已知的字符集并逐一测试每个候选字符。 对于目标哈希中的每个位置: 1. 构建针对单个字符的 SQL 条件。 2. 仅在猜测正确时触发服务器延迟。 3. 测量响应时间。 4. 重新发送相同的请求以减少网络抖动引起的误报。 5. 将确认的字符附加到提取的哈希中。 6. 移至下一个位置。 这种方法简单且可靠,但相对较慢,因为每个字符可能需要许多请求。 ### 二分查找提取逻辑 更快的方法对每个字符的 ASCII 值使用**二分查找**。 它不是问: - “字符等于 `a` 吗?” - “字符等于 `b` 吗?” - “字符等于 `c` 吗?” 而是问: - “ASCII 值大于 79 吗?” - “大于 55 吗?” - “大于 43 吗?” 这将在每次请求时将搜索空间减半,并显着减少 HTTP 请求数量。 ### 实际结果 该攻击允许操作员从 `wp_users` 中提取 `user_pass` 值,通常针对选定的 WordPress 用户 ID,例如: - `1` 代表默认管理员, - 或命令行传递的另一个 ID。 在最近的 WordPress 版本中,此值可能使用新的 **WordPress 6.8+ 密码管道**,该管道结合了: - 使用 **HMAC-SHA384** 的预哈希阶段, - Base64 编码, - 以及最终的 **bcrypt** 哈希。 ## 包含的脚本 ### CVE_2025_4396.py 这是**标准提取脚本**。 #### 目的: 它执行经典的基于时间盲注 SQL 注入,并在固定字符集上使用线性搜索**逐个字符**提取目标哈希。 #### 关键特性: - 简单易懂, - 在稳定环境中可靠, - 双重验证逻辑以减少误报, - 用作检测工程和 PoC 演示的基线。 #### 工作原理: 对于每个字符位置: - 遍历预定义的字符集, - 构建匹配单个字符的 SQL 条件, - 等待服务器响应, - 并通过第二个请求确认命中。 #### 需求: - `python3` - `requests` - `urllib3` #### 安装: ``` pip3 install requests urllib3 ``` ##### 用法: ``` python3 CVE_2025_4396.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v ``` ``` Arguments : -t, --target : vulnerable target URL including the injectable parameter -u, --userid : WordPress user ID to target -s, --sleep : sleep threshold in seconds -v, --verbose : enable debug logging ``` ### CVE_2025_4396_Stealth.py 这是二分查找版本。 #### 目的: 它执行与标准脚本相同的提取目标,但用对 ASCII 值的二分查找代替了线性的逐字符搜索。 #### 关键特性: - 明显更少的 HTTP 请求, - 更小的网络占用, - 仍包含双重检查步骤以防止误报。 #### 工作原理: 对于每个位置: - 定义一个可打印的 ASCII 范围。 - 测试中点。 - 询问目标字符是否大于该中点。 - 相应地缩小范围。 - 继续直到识别出确切的字符。 #### 需求: - `python3` - `requests` - `urllib3` #### 安装: ``` pip3 install requests urllib3 ``` #### 用法: ``` python3 CVE_2025_4396_Stealth.py -t "https://target.local/?s=test&cats=" -u 1 -s 3 -v ``` #### 何时使用: - 目标已确认存在漏洞, - 延迟足够稳定, - 并且目标是减少请求量。 ## 离线哈希破解工作流 从 WordPress 提取密码哈希后,下一步是离线破解它。 WordPress 6.8+ 哈希说明。在测试的工作流中,提取的值可能如下所示: ``` $wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu. ``` 对于 Hashcat,可用的 bcrypt 部分是: ``` $2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu. ``` 然而,此 bcrypt 不是直接应用于原始密码。WordPress 首先应用一个预处理阶段: - 对候选密码进行 PHP 风格的 trim, - 使用密钥 wp-sha384 进行 HMAC-SHA384, - 对结果摘要进行 Base64 编码, - 然后进行 bcrypt 验证。 #### 为什么需要预哈希步骤 这意味着如果你想复现确切的 WordPress 6.8+ 逻辑,就不能将普通字典直接发送给 Hashcat。 相反,每个候选密码必须首先转换为其兼容 WordPress 的预哈希表示。 仓库还包含一个“辅助”脚本,它: - 接受提取的哈希作为参数, - 在需要时去除 `$wp$` 前缀, - 预处理提供的字典, - 生成转换后的字典, - 可选择创建映射文件, - 自动启动 Hashcat, - 将恢复的预哈希解析回原始的明文密码。 #### 典型工作流 提取哈希: - 示例结果:`$wp$2y$10$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.` 准备破解环境: - `python3` - `hashcat` 并在 PATH 中可用 运行 `Auto_Crack.py`: ``` python3 Auto_Crack.py -H '\$wp\$2y\$10\$zPA8xGJMvr.kvAAIIYaCreIMnTDpgw/9o8K7.ONBm/KBbNIywQtu.' -w /usr/share/wordlists/rockyou.txt ``` ``` We need to escape "$" with "\" -> bash compatibility ``` ## SOC 检测指南 以下检测内容可供 SOC 团队用于识别利用尝试并衡量防御成熟度。 ### Sigma 检测 ``` title: Potential Time-Based Blind SQLi (CVE-2025-4396 Relevanssi) id: 5a8a1c93-5c74-4b5b-a620-8e1c3e41ab5d status: experimental description: Detects HTTP GET requests containing typical Time-Based Blind SQL injection payloads often used to exploit CVE-2025-4396 in the WordPress Relevanssi plugin (bypassing comma filters). author: n3fhara date: 2026-03-18 tags: - attack.initial_access - attack.t1190 - cve.2025-4396 logsource: category: webserver detection: selection_endpoint: cs-uri-query|contains: - 's=' - 'cats=' - 'tags=' selection_payload: cs-uri-query|contains: - 'SLEEP(' - 'WAITFOR' - 'SUBSTRING(' - 'ASCII(' - 'LENGTH(' selection_bypass_indicators: cs-uri-query|contains: - 'FROM' - 'FOR 1' - '*(' condition: selection_endpoint and selection_payload and selection_bypass_indicators falsepositives: - Highly unlikely. Legitimate search queries should not contain SQL functions. level: high ``` ### Suricata 检测 ``` alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"ET EXPLOIT WordPress Relevanssi SQLi Attempt (CVE-2025-4396)"; flow:established,to_server; content:"GET"; http_method; content:"cats="; http_uri; pcre:"/(cats|tags)=.*(SLEEP|WAITFOR)%28.*(%2A|\*).*SUBSTRING/i"; classtype:web-application-attack; sid:1000001; rev:1; metadata:created_at 2026_03_18, cve CVE_2025_4396;) ``` ### SPLUNK 检测 ``` index=web_logs sourcetype=access_combined | regex uri_query="(?i)cats=|tags=" | stats count as request_count, avg(response_time) as avg_time, max(response_time) as max_time, dc(uri_query) as unique_payloads by clientip | where request_count > 20 AND max_time > 2000 | sort - max_time ``` ### KQL 检测 ``` url.query : (*cats=* OR *tags=* OR *s=*) AND url.query : (*SLEEP* OR *WAITFOR* OR *SUBSTRING* OR *ASCII*) AND url.query : (*FROM* OR *FOR* OR *%2A*) ``` ### EQL 检测 ``` sequence by source.ip with maxspan=1m [network where url.path == "/" and url.query : "*cats=*" and event.duration > 2000000000] [network where url.path == "/" and url.query : "*cats=*" and event.duration > 2000000000] [network where url.path == "/" and url.query : "*cats=*" and event.duration > 2000000000] ``` ### 检测缺口与建议 上述基线检测对于非混淆的利用效果很好,但当操作员引入更先进的技术时,它们会变弱。 当攻击者开始使用以下手段时,SOC 的可见性会下降: - 替代 SQL 函数代替明显的函数, - URL 编码和基于注释的混淆, - 通过二分查找减少请求量, - 抖动和低速慢速计时, - 代理轮换, - 浏览器模拟。 #### SOC 的其他检测思路: - 检测异常的缓慢搜索流量, - 监控对 WordPress 搜索端点的请求,其中: - 响应时间反复升高, - 同一客户端执行许多搜索请求, - 或同一端点随时间推移显示出异常的延迟模式。 - 对包含编码运算符的搜索参数发出警报, - 即使不可见明显的 SQL 关键字,搜索参数若包含以下组合: - 编码的比较运算符, - 可疑的括号密度, - 重复的数字逻辑, - 或重度 URL 编码的查询字符串。 - 按端点关联,而不仅仅是按源 IP, - 如果攻击者轮换代理,IP 关联就会变弱。检测还应侧重于: - 重复访问同一端点, - 重复的延迟响应, - 或针对同一 WordPress 页面的重复格式错误的搜索查询。 - 使用长窗口行为检测: - 30 分钟, - 1 小时, - 或数小时窗口。 - 监控数据库端的慢查询 ## 仓库结构 ``` . ├── CVE_2025_4396.py ├── CVE_2025_4396_Stealth.py ├── Auto_Crack.py ├── README.md └── relevanssi.4.24.4.zip ``` # 法律声明 仅在你被明确授权测试的环境中使用。 作者和贡献者对误用不承担任何责任。
标签:0day, Bitdefender, CISA项目, CVE-2025-4396, Debian, Hashcat, Maven, PoC, Relevanssi插件, Web安全, WordPress漏洞, 二分查找, 多线程, 密码哈希提取, 数据展示, 数据库攻击, 无需认证, 时间盲注, 暴力破解, 概念验证, 漏洞验证, 盲注, 紫队, 红队, 自动化利用, 蓝队分析, 逆向工具