
Сканер безопасности WordPress в режиме только для чтения для серверов HestiaCP. Обнаруживает индикаторы компрометации wp2shell (CVE-2026-63030 / CVE-2026-60137) на всех размещённых сайтах — почтовые отчёты для каждого пользователя, diff основных файлов с чистой WordPress, анализ PHP/JS/htaccess/изображений и опциональная оценка ИИ через Claude API.
Сканер безопасности WordPress в режиме «только чтение» для серверов HestiaCP.
Обнаруживает индикаторы компрометации wp2shell на всех размещённых сайтах — с почтовыми отчётами по каждому клиенту, сравнением файлов ядра, обнаружением веб-шеллов по SHA256, оценкой риска и необязательной ИИ-оценкой.
⚠️ Безопасные версии: WordPress 6.8.6 / 6.9.5 / 7.0.2 или новее.
Эти скрипты никогда ничего не изменяют — режим «только чтение» на всём протяжении работы.
wp2shell — это цепочка удалённого выполнения кода (RCE) до аутентификации в ядре WordPress, раскрытая 17 июля 2026 года. Одного анонимного HTTP-запроса к стандартной установке достаточно, чтобы создать поддельного администратора и выполнить произвольный код на сервере.
Цепочка объединяет:
author__not_in класса WP_Query/wp-json/batch/v1На скомпрометированных сайтах появляется поддельный администратор с префиксом логина wp2_ и адресом @wp2shell.invalid.
Подробнее: https://wp2shell.com
| Файл | Назначение |
|---|---|
wp2shell-scan.sh | Быстрый сканер IoC по всему серверу — цветной вывод в терминал, оценка риска для каждого сайта, автоматическое сохранение отчёта в /root/ |
wp2shell-report-per-user.sh | Полный сканер — почтовые отчёты по каждому пользователю HestiaCP, сравнение файлов ядра, обнаружение веб-шеллов по SHA256, ИИ-оценка, оценка риска |
known_shells.sha256 | База хешей известных веб-шеллов (SHA256) — загружается автоматически при запуске |
| Проверка | Критичность |
|---|---|
| Версия WordPress по сравнению с безопасными версиями | HIGH / OK |
Учётные записи с префиксом wp2_ или email @wp2shell.invalid | CRITICAL |
| Администраторы, созданные после раскрытия (15/07/2026) | MEDIUM |
| Пропуски в последовательности user-ID (следы удалённого поддельного администратора) | MEDIUM |
Осиротевшие строки wp_usermeta | MEDIUM |
Отравленные строки oembed_cache / customize_changeset | CRITICAL |
Подменённые параметры WP (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| Проверка | Критичность |
|---|---|
wp core verify-checksums по сравнению с wp.org | HIGH |
Построчное diff -U5 со скачанным чистым ядром | CRITICAL / HIGH / OK |
| Лишние файлы, отсутствующие в чистом ядре (показываются содержимое и метаданные) | CRITICAL / HIGH |
| Проверка | Критичность |
|---|---|
PHP-файлы в uploads/ | CRITICAL |
Дополнительные PHP-расширения (.php7 .phtml .phar .php5) | HIGH |
| Совпадение SHA256 с базой известных веб-шеллов (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP-файлы, изменённые после SINCE_DATE, И совпадающие с подозрительными паттернами — с отображением совпавшей строки прямо в выводе | CRITICAL / HIGH |
| PHP-файлы с подозрительными паттернами, но НЕ изменённые недавно | LOW |
JS/HTML, изменённые после SINCE_DATE И совпадающие с паттернами обфускации | MEDIUM |
| Внешние C2/URL эксфильтрации данных (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Опасные директивы .htaccess (AddType, auto_prepend_file, внешний RewriteRule) | HIGH |
.htaccess, изменённый после SINCE_DATE | MEDIUM |
Полиглот-изображения с PHP-нагрузкой (<?php в .jpg/.png…) | CRITICAL |
Открытые backup/config файлы (wp-config.php.bak, *.sql…) | MEDIUM |
| Проверка | Критичность |
|---|---|
Записи в пользовательском crontab с curl/wget/php/base64 | HIGH |
| Системные cron-файлы, ссылающиеся на путь к сайту | MEDIUM |
Каждый сайт получает оценку риска от 0 до 100 с разбивкой по каждому фактору, повлиявшему на результат:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Баллы | Метка |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wprootsendmail (для почтовых отчётов)python3 (для обработки JSON при ИИ-оценке)curl, sha256sum, file, strings, unzipcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
Примечание: полный сканер при запуске задаёт интерактивные вопросы (ИИ-оценка, сохранение отчёта, порог по дате). Если сначала скачать скрипт, а затем запускать, все подсказки будут работать корректно.
sudo bash wp2shell-scan.sh
Находит все установки WordPress в /home/*/web/*/public_html/, выполняет все проверки, выводит цветной результат в терминал и сохраняет полный отчёт в /root/wp2shell-report-YYYYMMDD-HHMMSS.txt.
При запуске можно указать собственную пороговую дату (по умолчанию: 2026-07-15).
sudo bash wp2shell-report-per-user.sh
При запуске задаются три вопроса:
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
Всегда начинайте с DRY_RUN=1 (значение по умолчанию) — письма показываются на экране в режиме предпросмотра, ничего не отправляется. Переключайтесь на DRY_RUN=0 только после того, как убедитесь, что вывод выглядит корректно.
| Переменная | По умолчанию | Описание |
|---|---|---|
WEB_ROOT | /home | Корневой каталог веб-сайтов HestiaCP |
SINCE_DATE | 2026-07-15 | Порог «недавно изменённых» |
WP | wp | Путь к WP-CLI |
| Переменная | По умолчанию | Описание |
|---|---|---|
DRY_RUN | 1 | 1 = только предпросмотр, 0 = отправлять письма |
SEND_ONLY_IF_ISSUES | 0 | 1 = не отправлять письмо, если сайт чист |
SINCE_DATE | 2026-07-15 | Порог «недавно изменённых» |
MAIL_FROM | security@<hostname> | Отправитель (envelope sender) |
CORE_CACHE | /root/wp2shell-cores | Каталог кэша чистых версий ядра |
ANTHROPIC_API_KEY | (пусто) | Ключ Claude API для ИИ-оценки |