Взломали сайт WordPress — пошаговая зачистка wp2shell малвари | Мастерская — статьи по WordPress и серверам | de-bor.ru

Частный web-мастер Денис Борисов
WordPress-сайтов

Взломали сайт WordPress — пошаговая зачистка wp2shell малвари

WordPress: безопасность · 2026-07-30 · обновлено 2026-07-30 · 8 мин чтения

503 вместо сайта. В админку не зайти. В БД — 5 новых админов с почтой @wp2shell.invalid. Плагин-вирус со случайным именем, фейковый логин, SMTP-клиент для спама. wp2shell — массовый веб-шелл, который штампует бэкдоры по файловой системе. Пошагово: как нашёл, вычистил, поднял.

wp2shell проникает через уязвимый плагин — в этом случае через fileorganizer (файловый менеджер в админке). Он создаёт бэкдор-пользователей с максимальными правами, загружает фейковый логин (wp-l0gin.php) и скрытый SMTP-клиент (Leaf PHPMailer). Основной признак — пользователи с email @wp2shell.invalid или @wordpress-svc.internal. Зачистка: удалить бэкдор-юзеров из БД, удалить плагин-вирус, сменить пароль БД, сменить все 8 солей WordPress. После зачистки — обновить WordPress, плагины, включить 2FA. Полный процесс занимает 40-60 минут.

Как wp2shell попадает на сайт

Вектор атаки
fileorganizer — легитимный плагин-файловый менеджер, который позволяет редактировать файлы прямо из админки WordPress. Если у админа слабый пароль или плагин не обновлён — злоумышленник получает полный доступ к файловой системе. В этом случае через fileorganizer загрузили zip-архив с плагином ghazszlnzp (случайное имя), который содержал webshell и SMTP-клиент.

Хронология атаки (реальный случай, 19-29 июля)

19 июля — появились первые wpsvc-пользователи (первичный доступ). Через 5 дней — w2s_56636971b728. Ещё через 2 дня — правка footer.php (проверка, что доступ к файлам есть). 24-26 июля — новые админы w2s_cc62aa87498d и w2s_b8da1804ca24, плюс SQL-инъекции через REST API. 29 июля в 4:39 — модификация fileorganizer, в 7:05-7:49 — загрузка плагина ghazszlnzp (17 файлов). Атака развивалась 10 дней — с первого доступа до полного захвата.

Хостинг — Beget, PHP 8.2.28. Сайт на WordPress + WooCommerce + Storefront. Всё стандартно: магазин с 15 плагинами, никаких экзотических решений. Уязвимость — человеческий фактор и отсутствие мониторинга.

Пошаговая зачистка wp2shell малвари

Шаг 1. Найти и удалить бэкдор-пользователей

Первым делом — SQL-запрос в БД сайта. Захожу в phpMyAdmin хостинга, открываю таблицу wp_users. Вижу строки с email @wp2shell.invalid и @wordpress-svc.internal. У каждого — права Administrator (wp_capabilities сериализованный массив с a:1:{s:13:"administrator";b:1;}).

Проверяю: есть ли легитимные пользователи с такими email — нет. Удаляю:

DELETE FROM wp_usermeta WHERE user_id IN (3, 5, 7, 9, 11);
DELETE FROM wp_users WHERE ID IN (3, 5, 7, 9, 11);

Цифры условные — в реальном случае было 5 бэкдоров с ID 3, 5, 7, 9, 11 (первые два ID — легитимные админы, их не трогаем).

Важно: удалять сначала usermeta, потом users. У пользователей могут быть мета-ключи с дополнительными правами, которые останутся в БД мёртвым грузом, если удалить только users.

Шаг 2. Удалить плагин-вирус

В wp-content/plugins/ появилась папка со случайным именем — ghazszlnzp. Внутри 17 файлов:

  • wp-l0gin.php — фейковый логин, маскируется под страницу входа WordPress, перехватывает пароли
  • smtp.php — Leaf PHPMailer, рассылает спам через SMTP сайта
  • xx.php — базовый webshell для выполнения команд
  • Остальные — обвязка: хелперы, скрипты инсталляции, скрытые страницы

Просто удаляю папку через файловый менеджер хостинга:

rm -rf wp-content/plugins/ghazszlnzp/

Плагин автоматически исчезает из active_plugins в БД — WordPress проверяет существование папки при каждой загрузке. Если папки нет, плагин деактивируется.

Шаг 3. Удалить подозрительные плагины

fileorganizer — именно через него загрузили архив. Этот плагин-файловый менеджер — слишком опасный инструмент для рядового сайта. Его функциональность (загрузка zip, редактирование любых файлов) почти никогда не нужна в production. Если вам правда нужно редактировать файлы через админку — используйте FTP/SFTP и нормальный редактор кода, а не плагин с веб-интерфейсом.

Проверяю остальные плагины. Находим wp-filemanager, file-manager — те же грабли. Все файловые менеджеры — на удаление.

Шаг 4. Сменить пароль базы данных

Злоумышленник мог получить доступ к wp-config.php. Оттуда — логин и пароль БД. Если у хостинга нет изоляции баз данных (MySQL на одном сервере), доступ к вашей БД открывает все записи, мета-данные, опции.

Через панель Beget генерирую новый пароль БД. Обновляю в wp-config.php:

define( 'DB_PASSWORD', 'новый-пароль-32-символа' );

На хостингах вроде Timeweb и Reg.ru — аналогично: через панель управления сменить пароль MySQL, обновить в конфиге. В некоторых случаях нужно также обновить пароль пользователя MySQL через phpMyAdmin (ALTER USER).

Шаг 5. Сменить соли WordPress

Соли — 8 констант в wp-config.php (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT). Они используются для шифрования кук, nonce-токенов и паролей. Если их не сменить — злоумышленник с сохранённой кукой сможет войти в админку даже после смены пароля админа.

Генерирую новые соли на api.wordpress.org/secret-key/1.1/salt/ — заменяю все 8 строк в wp-config.php старыми. Старые соли комментирую, новые вставляю вместо них.

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

Шаг 6. Проверить wp-content/uploads

Частая практика — прятать php-шеллы в папку с загрузками. Злоумышленники загружают файл через медиабиблиотеку (картинку), а потом через редактирование файла вписывают туда php-код. Или просто заливают php-файл с помощью fileorganizer.

find wp-content/uploads/ -name "*.php"

Если команда выдала результат — почти наверняка это шелл. В нашем случае uploads были чистыми — вирус работал исключительно через кастомный плагин.

Шаг 7. Проверить error log

Лог ошибок — кладезь информации. В lkartlog.ru error_log показал характерные строки: blind SQL injection через REST API. Злоумышленник отправлял POST-запросы на /wp-json/wp/v2/posts с бит-флип-атаками — пытался подобрать параметры через изменение одного бита в сериализованных данных. WordPress REST API — частая цель, потому что он открыт для неавторизованных запросов по умолчанию.

Чистка лога: сохранить копию для анализа, потом очистить текущий лог. На Beget лог в папке сайта — можно просто удалить, сервер создаст новый.

Проверка после зачистки

После всех шагов сайт должен открываться. Проверяю три вещи:

  1. Фронтенд — главная открывается, 503 исчез, контент отображается, картинки грузятся
  2. Админка — вход работает, плагины отображаются, WooCommerce функционирует
  3. БД — нет новых пользователей, нет подозрительных опций (проверить wp_options на наличие неизвестных записей)

После зачистки: обновить WordPress до последней версии, обновить все плагины (особенно WooCommerce, WPForms, любые плагины с формами и загрузкой файлов), сменить пароли всем админ-пользователям.

Дополнительно — включить 2FA для админов. Google Authenticator или плагин вроде WP 2FA. Это не панацея, но от автоматических атак (которые не умеют вводить TOTP-коды) защищает надёжно.

Когда не сработает

Простая зачистка не поможет, если:

  • Вектор не устранён — если уязвимость в теме или другом плагине, вы через неделю получите новых бэкдоров. Потому я удалил fileorganizer — именно через него загрузили архив.
  • Вирус встроен в ядро — wp2shell не трогает файлы ядра, но есть малварь, которая патчит wp-load.php, wp-settings.php, xmlrpc.php. В таком случае требуется переустановка WordPress через админку (Обновление → Переустановить).
  • Заражён сервер — если хостинг скомпрометирован, локальная зачистка бессмысленна. Признаки: другие сайты на том же аккаунте тоже заражены, в логах сервера подозрительная активность не с вашего сайта.
  • Бэкапы заражены — если восстанавливаться из бэкапа, сделанного после атаки, вы просто откатываетесь к заражённой версии. Нужен бэкап до 19 июля (первого появления wpsvc-пользователей).

В этих случаях — полная переустановка WordPress с чисткой файловой системы и поиском уязвимости на уровне хостинга.

FAQ

Как wp2shell попадает на сайт WordPress?
Чаще всего — через уязвимые или устаревшие плагины: файловые менеджеры, конструкторы страниц, плагины загрузки файлов. В нашем случае — через fileorganizer. Злоумышленник загружает zip-архив через интерфейс файлового менеджера или использует SQL-инъекцию для загрузки шелла.
Как быстро заметить заражение wp2shell?
Первый признак — необычные пользователи в админке (Пользователи -> Все пользователи). Логин формата w2s_XXXXXXXXXXXX (13 символов после подчёркивания) или email с @wp2shell.invalid. Второй признак — плагин со случайным 8-буквенным именем. Третий — подозрительная активность в логах: SQL-инъекции через REST API, массовая рассылка.
Нужно ли менять хостинг после зачистки?
Обычно нет, если зачистка проведена полностью и вектор атаки устранён. Beget, Timeweb, Reg.ru — у всех приличная изоляция аккаунтов. Если скомпрометирован только ваш сайт — достаточно зачистки. Если хостинг положил соседние сайты на том же IP — стоит обратиться в поддержку и рассмотреть смену тарифа на VPS.
Поможет ли антивирусный плагин?
Wordfence, Sucuri Security, iThemes Security — полезны для мониторинга, но не заменяют ручную зачистку. Wordfence может обнаружить подозрительные файлы, но удалять бэкдор-пользователей и чистить БД он не умеет. Используйте антивирусные плагины как дополнение к ручной проверке, а не как замену.
Что делать, чтобы не взломали снова?
Удалить все файловые менеджеры, включить автообновления плагинов (хотя бы для критических), настроить ежедневные бэкапы (кеплю в 3 места — хостинг + облако + локально), включить 2FA для всех админов, ограничить доступ к wp-admin по IP. И главное — не использовать плагины, которые дают полный доступ к файловой системе через браузер.

Нужна помощь с зачисткой WordPress?

Проверю сайт, найду закладки, вычищу малварь, закрою дыры. Бесплатная диагностика — напишите, расскажу что и как.

Написать в Написать в

Разрабатываю WordPress-сайты

Лендинги, многостраничные сайты, интернет-магазины на WooCommerce — всё на WordPress с удобной панелью управления.

Сайт под ключ: регистрация домена и хостинга, установка WordPress, настройка шаблона и модулей.

Поддерживаю WordPress-сайты

Обновление плагинов и тем, резервное копирование, мониторинг работоспособности — сайт работает без сбоев.

Оперативное исправление ошибок, создание новых разделов, доработка функционала и наполнение контентом.

Продвигаю WordPress-сайты

SEO-оптимизация, настройка Яндекс Метрики и Вебмастера, подключение Google Search Console.

Оптимизация позволяет «поднять» сайт в поисковых выдачах, увеличить целевой трафик и привлечь новых клиентов.

Чистка от вирусов WordPress

Если сайт взломали, появился подозрительный код или спам-рассылка — найду и удалю вредоносный код, закрою уязвимости и настрою защиту от повторного заражения.

После чистки проверю все файлы и плагины, обновлю WordPress до актуальной версии и настрою автоматическое резервное копирование.

Диагностика сайта

Проверю ваш сайт по ключевым параметрам и подготовлю отчёт с рекомендациями:

  • Скорость загрузки и производительность;
  • Безопасность и уязвимости;
  • SEO-состояние и индексация;
  • Мобильная адаптация;
  • Технические ошибки и код.
Заказать диагностику
Михайлова Анастасия

Денис МАСТЕР своего дела. Вёл целый проект, работали с ним на протяжении 4х месяцев. Отзывчивый, понимающий с полуслова специалист. Стоимость услуг радует, а качество работы приводит в восторг.

Денис спасибо Вам от лица нашей строительной компании и от всего нашего персонала.

Михайлова Анастасия

Игорь Караваев

Обратился к Денису для восстановления сайта на WordPress после сбоя. Сделал, как и обещал, за сутки — сайт снова работает без ошибок. Профессионал своего дела, доходчиво объясняет, вежлив и тактичен. Однозначно рекомендую!

Игорь Караваев

Яна Веркулич

Денис, спасибо огромное за работу)) Очень тепло вспоминаю Вас и все что Вы сделали для моей работы и моего сайта.

Денис Профессионал с большой буквы, решает любые вопросы, отличный специалист))

Рекомендую к сотрудничеству, еще раз спасибо)

Яна Веркулич

Бюро Переводов

Денис оперативно и грамотно справляется со всеми поставленными задачами. Внес правки на англоязычную и русскоязычную версии сайта, учел все пожелания. Будем обращаться еще!

Бюро Переводов

Анастасия Виричева

Денис мастер своего дела, рекомендую его как специалиста.
Понимает, что нужно сделать и справляется с поставленной задачей в короткое время.

Делал сайт для салона красоты, просто и функционально.

Анастасия Виричева

Владимир

Очень много времени мучались с сайтом на OpenCart. «Специалисты» не могли нормально разобраться в проблеме, возникавшей при выполнении элементарной задачи.

Денис сделал это в два счета, также расписал подробно, в чем была проблема и как она решена. На 200% доволен. Даже не хочется его рекомендовать, потому что будет постоянно занят))

Владимир

Ксения Петровская

Денис оперативно ответил и помог решить проблему, которую я даже описать нормально не могла)) Мы сами что-то накрутили с корпоративной почтой — письма то уходили, то нет, в общем всё сломали.

Денис всё починил, теперь у нас нормальная почта, домен работает, письма приходят и уходят. Цена как заявлена — оплатили по факту проверки. Спасибо большое!

Ксения Петровская

Александр Кривуля

Заказал у Дениса доработать сайт на WordPress. При этом трудно себе представлял, что сам хочу. Благодаря профессионализму Дениса и его умению всё грамотно и просто объяснять, предлагать разные варианты решений — цель была достигнута.

Умение общаться доходчиво и терпеливо с клиентами — огромный плюс. Я очень доволен. Однозначно рекомендую!

Александр Кривуля

Кондитер мания

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

Кондитер мания

Бесплатная настройка хостинга и домена

Регистрация хостинга на 1 месяц и домена .ru/.рф на 1 год входит в стоимость разработки сайта.

Подробнее