Содержание статьи
Для тестов возьмем готовую машину для wp2shell из репозитория FullHunt. Это самый полный репозиторий, посвященный рассматриваемым уязвимостям. Там же лежит максимально полный эксплоит с реализацией разных способов атаки, включая создание пользователя через бэкдор‑скрипт.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Простой запуск лабы:
git clone https://github.com/fullhunt/wp2shell-scan.git
cd wp2shell-scan
cd testbed
docker compose up --build
Затем открываем в браузере http:// и устанавливаем WordPress. Используем любые данные, главное, чтобы установка была завершена.
После установки у тебя запустятся два контейнера, между которыми есть общий раздел. Это нужно, чтобы пользователь базы данных мог писать напрямую в WordPress. Но этого недостаточно. База данных работает от имени собственного пользователя, у которого нет прав на запись в /, а для тестов она нужна. Выполним
docker exec testbed-wordpress-1 chmod 777 /var/www/html/
Если имя контейнера отличается от testbed-wordpress-1, не забываем подставить свое.
CVE-2026-63030
CVE-2026-63030 — это возможность вмешаться в маршрутизацию на эндпоинте REST API, который пакетно обрабатывает запросы:
/wp-json/batch/v1
/?rest_route=/batch/v1
Атакующий выстраивает запрос так, чтобы запутать процессы валидации и фактического выполнения. Под капотом есть три массива:
$requests— исходный список запросов. Содержит объекты типаWP_REST_RequestилиWP_Error, если объект некорректный. На его основе формируются следующие массивы;$validation— результаты валидации каждого отдельного запроса из пакета. Каждый элемент — это либоtrue, либоWP_Error;$matches— готовый список методов для выполнения. Хранит путь API, название функции‑колбэка и аргументы для выполнения.
Предполагается, что $validation и $matches синхронизированы между собой. Движок WP сравнивает элементы по индексу. Если в $validation значение true, то выполняется соответствующий колбэк из $matches.
$validation -> $matches
true -> callback1
WP_Error -> callback2
true -> callback3
Если нет, то WP возвращает ошибку и ничего страшного не происходит. Но в реальности хакер может добиться смещения индексов, отправив неправильный URL, и итоговые массивы будут выглядеть так:
$validation -> $matches
WP_Error -> callback1
true -> callback3
WP_Error ->
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
