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

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

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

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

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

Категории

Все категории
Loading categories
xss2shell-check — Недеструктивный детектор для CVE-2026-64638 (XSS2Shell) — примитив отражённой XSS до аутентификации в WordPress | Kitploit
Инструменты/GitHubGitHub/sanaullahamanullah/xss2shell-check
Оборонительные ИнструментыСканеры уязвимостейСканеры веб-уязвимостейАнализ уязвимостейСбор информацииВеб-безопасностьТестирование на Проникновение
GitHubsanaullahamanullah/xss2shell-check

Популярное

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

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

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

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

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

xss2shell-check

Недеструктивный детектор для CVE-2026-64638 (XSS2Shell) — примитив отражённой XSS до аутентификации в WordPress

Репозиторий
3 дней назадЕщё не проверено

xss2shell-check

Неразрушающий детектор без зависимостей для примитива отражения CVE-2026-64638 ("XSS2Shell") в WordPress wp-login.php.

Предыстория

CVE-2026-64638 — это пред-аутентификационная отражённая XSS-уязвимость в ядре WordPress, раскрытая PWN.AI 2026-08-07 (CVSS 8.9, CWE-79) и исправленная в версии 7.0.3 с бэкпортами во все поддерживаемые ветки (6.9.6, 6.8.7, 6.7.6, 6.6.6, 6.5.9, …).

Корневая причина — расхождение парсеров между PHP-функцией strip_tags() и санитайзером KSES в WordPress:

  • strip_tags() отказывается распознавать тег, если после < идёт пробел, поэтому имя пользователя вида < area id=x> сохраняется как обычный текст.
  • В KSES такого правила нет, и он заново разбирает текст в живой элемент <area id="x"> внутри сообщения об ошибке входа.

Это даёт управляемую атакующим DOM-инъекцию с выбираемыми атрибутами id/class/href — примитив, лежащий в основе опубликованной многоступенчатой цепочки (DOM clobbering → REST JSONP → кража паролей приложений → загрузка плагина → RCE против вошедшего в систему администратора-жертвы).

Что делает этот инструмент

Два неразрушающих зонда (неудачная попытка входа со случайным маркерным именем пользователя):

  1. RAW_HTML — <b>marker</b> появляется в ответе об ошибке без экранирования.
  2. AREA_BYPASS — < area id=marker> переживает strip_tags() и снова появляется как живой/нормализованный элемент (например, area id="marker") в ответе.

Никакая полезная нагрузка не выполняется; инструмент лишь определяет, отображается ли HTML атакующего как живой DOM. Дополнительные опции:

  • --version — определяет версию ядра по тегу <generator> в фиде.
  • --jsonp — проверяет доступность REST JSONP-обёртки (_jsonp/_envelope), используемой опубликованной цепочкой.

Использование

root@kitploit:~
python3 xss2shell_check.py https://example.com
python3 xss2shell_check.py --jsonp --verbose https://example.com
python3 xss2shell_check.py --version https://example.com
python3 xss2shell_check.py --json https://example.com

Python 3.6+, только стандартная библиотека. Без зависимостей.

Коды выхода

КодЗначение
0Уязвим (примитив отражения присутствует)
1Исправлен / не уязвим
2Ошибка (цель недоступна, WAF-челлендж, неожиданный ответ)

Матрица обнаружения

Примечания по обнаружению

  • Уязвимая сигнатура — это нормализованный элемент (<area id="…">). Оформление кавычек в атрибутах зависит от поколения KSES (старый кастомный парсер: <area id=x>; DOMDocument: <area id="x"> / <area id="x" />), поэтому сопоставляются все формы. Сырой проход < area …> без повторного разбора — это инертный текст в браузере, а не примитив; он сообщается как RAW_TEXT_ONLY и не вызывает ложного срабатывания.
  • Метка версии носит только справочный характер: исправляющие бэкпорты (6.9.6, 6.8.7, 6.7.6, 6.6.6, 6.5.9, 4.7.34, …) попадают внутрь серии 4.7.0–7.0.2 и учитываются для каждой ветки; проверка отражения остаётся определяющей.
  • Запросы: 1 GET (страница входа — также захватывает WAF/sticky-куки и фактический URL после редиректов) + 2 POST с уникальными случайными маркерами. POST-редиректы повторно отправляются как POST. Блокировки WAF проявляются как код выхода 2, а не как молчаливое «не уязвим».
  • Ложноотрицательный результат возможен, если кастомный фильтр login_errors или CDN/WAF переписывают ответы, либо сообщение об ошибке входа никогда не отражает имя пользователя.

Дисклеймер

Только авторизованное тестирование безопасности. Этот инструмент предназначен исключительно для тестирования систем, которыми вы владеете или на оценку которых имеете явное письменное разрешение. Неавторизованное тестирование незаконно в большинстве юрисдикций.

Источники

  • Criminal IP — Уязвимость WordPress CVE-2026-64638: от XSS на странице входа до выполнения кода на стороне сервера
  • CUHK ITS — Пред-аутентификационная XSS-уязвимость WordPress «XSS2Shell» (CVE-2026-64638)

Лицензия

MIT

Скачать инструмент
ФлагНазначение
--versionопределяет версию ядра (тег генератора фида, запасной вариант — мета-тег на главной странице)
--jsonpтакже проверяет доступность REST JSONP-обёртки (_jsonp/_envelope)
-v, --verboseвыводит фрагменты ответов зондов (доказательства для отчётов)
--jsonмашиночитаемый результат в формате JSON (CI / автоматизация)
Наблюдаемое поведениеВердиктКод выхода
<b>marker</b> выводится без экранированияRAW_HTML — уязвим0
< area id=marker> заново разбирается в живой <area id="marker"> (любые кавычки / void-форма)AREA_BYPASS — уязвим0
Имя пользователя экранировано в HTMLESCAPED — не уязвим1
Теги удалены, текст остаётсяSTRIPPED — не уязвим1
Сырой < area …> проходит насквозь, но заново не разбираетсяRAW_TEXT_ONLY — инертный текст, не уязвим1
Отражения нет вовсеNOT_REFLECTED — не уязвим1
Зонд заблокирован (HTTP ≥ 400 / страница-челлендж) или цель недоступнаERROR2