
Генерирует самоподставляющуюся HTML-страницу-триггер, которая использует отражённую HTML-инъекцию в WordPress login (CVE-2026-64638) для отображения пользовательского баннера, предназначенную для авторизованного тестирования безопасности.
Одностраничный генератор PoC без зависимостей для отражённой HTML-инъекции в WordPress CVE-2026-64638
на wp-login.php (расхождение между strip_tags() и парсером KSES).
Он создаёт страницу-триггер с автоматической отправкой формы: когда жертва открывает
файл, страница незаметно отправляет POST-запрос с полезной нагрузкой, и жертва попадает
прямо на целевую страницу входа с отрисованным баннером — без взаимодействия и без
JavaScript на стороне цели.
Только для авторизованного тестирования безопасности. Используйте только против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение.
| Версии | Статус |
|---|---|
| 6.4.0 – 7.0.2 | Уязвимы — срабатывает сразу |
| 5.8 – 6.3 | Условно — требуется плагин, передающий login_errors через wp_kses() с разрешённым style |
| 4.7 – 5.7 | Не эксплуатируется (имя пользователя не отражается) |
| 6.4.9 / 6.5.9 / 6.6.6 / 6.7.6+ / 6.8.7 / 6.9.6 / 7.0.3+ | Исправлено (esc_html) |
python3 banner_poc.py \
--out trigger.html \
--target http://192.0.2.10/wp-login.php \
--msg "Scheduled System Maintenance"
# подкаталог + скрытый путь входа + подзаголовок
python3 banner_poc.py \
--out trigger.html \
--target http://10.0.0.5:8080/blog/my-secret-login \
--msg "Please sign in again" --sub "Session expired"
Разместите trigger.html где угодно. Когда жертва открывает его, она перенаправляется на
целевую страницу входа с отрисованным баннером. Переход бесшумный: нет видимого
промежуточного контента, фон совпадает с экраном входа WordPress, переход занимает
~0,5 с.
| Флаг | Описание |
|---|---|
--out | Выходной HTML-файл (обязательно) |
--target | Полный URL страницы входа — включая подкаталоги / скрытые пути входа (обязательно) |
--msg | Текст баннера (по умолчанию: Scheduled System Maintenance) |
--sub | Необязательная строка подзаголовка |
wp-login.php отражает имя пользователя при неудачном входе в сообщение об ошибке.
Уязвимые версии очищают его с помощью PHP strip_tags(), который пропускает
всё, где за < следует пробел.< div style="..."> становится реальным элементом.< /strong> (слэш с пробелом перед ним) также переживает strip_tags() и
преобразуется в реальный закрывающий тег, позволяя полезной нагрузке закрыть
<strong> шаблона (HTML5 активный форматирующий элемент) в качестве первого токена и
сохранить полный контроль над DOM.div поглощает хвостовой текст шаблона
(«… is not registered on this site …»).class, которые переживают
safecss_filter_attr(). На 6.3+ / 6.4+ position:fixed отображает полноэкранное
наложение; на 5.8–6.2 эти свойства удаляются, и та же полезная нагрузка
автоматически деградирует до красного баннера в потоке документа.Чистый HTML/CSS — на цели не выполняется JavaScript. Правила WAF, нацеленные на
<script> или обработчики событий, не применяются.
Этот инструмент опубликован для оборонительных исследований и авторизованного тестирования на проникновение. Автор не несёт ответственности за неправомерное использование.