«12 сайтов — один пароль. Нуль усилий со стороны хакера — нуль шансов со стороны владельца»
История, которая может случиться с кем угодно
Недавно чистил массовое заражение двенадцати WordPress-сайтов, которые жили на одном хостинге. Кто-то добавил страницы, которых никогда не было. Где-то появились файлы с непонятными названиями. Google начал показывать в поиске под этими доменами контент об онлайн-казино и криптовалютных схемах. Сами сайты едва дышали, работали через раз, а хостер был на шаг от того, чтобы заблокировать их полностью.
Работа была интенсивная, результат — чистые сайты и куча выводов, которыми стоит поделиться.
Анатомия взлома: что мы нашли на сервере
Когда я получил доступ к серверу, картина была… показательной. Все двенадцать сайтов жили на одном виртуальном хостинге (shared hosting), под одним системным аккаунтом. Один пароль — и атакующий получил доступ ко всему. Как единый ключ от двенадцатиквартирного дома.
Что было дальше? Наливайте чай, садитесь удобнее — потому что список того, что мы там нашли, впечатляет.
Doorway-страницы — 182 штуки
По всему WordPress — в wp-admin, wp-includes, wp-content — появились папки с числовыми названиями, внутри которых лежали index.php файлы. Это так называемые doorway pages — страницы-привидения, которые существуют только для поисковых роботов. Google индексирует их, видит «трастовый» домен и начинает показывать спам в поисковой выдаче. Владелец сайта может месяцами не знать, что его домен работает на чужое казино, черт его возьми!
Вебшеллы — 9+ копий
Вебшелл — это, по сути, черный ход на ваш сервер. Маленький PHP-скрипт, через который хакер может удаленно выполнять любые команды: читать файлы, загружать новые, удалять, изменять — все, что угодно. И таких «черных ходов» мы нашли девять штук.
Файлы с названиями вроде clasa99.php, astar.php, proccess_config.php — разбросаны по разным директориям. Некоторые маскировались под CSS-файлы (editorm.css.php в /wp-includes/blocks/avatar/). Один имел AES-шифрование — это уже не любительщина, а инструмент из арсенала для перепродажи доступа на хакерских форумах.
Фейковые плагины
В директории плагинов появились каталоги, имитирующие легитимные расширения. Внутри — PHP-файлы размером по 50–60 КБ, начиненные обфусцированным кодом — то есть намеренно запутанным так, чтобы ни человек, ни антивирус не смогли быстро понять, что он делает. WordPress их видит как «плагины», админ может даже не заметить лишний пункт в списке. Как дополнительный постоялец в квартире, которого никто не приглашал, но он тихо живет и ест из вашего холодильника.
Инъекции в темы
В шести темах был модифицирован functions.php. Добавлен код на индонезийском языке (комментарии «Memanggil file backlink»), который через хук wp_footer подгружал файл backlink.php — инъекцию внешних ссылок в подвал сайта. Каждое посещение страницы генерировало невидимые для пользователя SEO-ссылки на сайты заказчика атаки.
Скрытый администратор
В mu-plugins лежал файл jetpack-performance.php — название, которое не вызывает никаких подозрений. Но внутри — фильтр, который скрывал конкретного пользователя из админ-панели. Хакер создал себе администраторский аккаунт, а затем сделал его невидимым. Даже если вы зайдете в «Пользователи» — вы его не увидите. Он просто не существует в вашем интерфейсе. Но он есть. Сидит себе тихо в вашей квартире, ест ваш борщ, спит на вашей кровати — и вы даже не подозреваете, что он там. Наглость? Нет. Это бизнес-модель.
Зараженные root-файлы
В каждом index.php корневой директории был внедрен код, загружающий payload с внешнего сервера. Это позволяло хакеру менять поведение сайтов без повторного взлома — сегодня редирект на казино, завтра криптомайнер, послезавтра фишинг-страница. Пульт дистанционного управления вашим сайтом — только в чужих руках.
Хакерские аккаунты
На большинстве сайтов были созданы хакерские администраторские аккаунты. А на одном сайте мы обнаружили 232 спам-аккаунта. Двести тридцать два. На одном сайте. Вам там не тесно, ребята? 😄
Кто за этим стоит и зачем
Судя по комментариям в коде на индонезийском языке — следы ведут в Юго-Восточную Азию. Но не стоит представлять себе кинематографичного хакера в капюшоне, который ночью пьет кофе и зловещо улыбается в монитор. Это конвейер. Бизнес. Очень прибыльный бизнес.
Взлом массовый и автоматизированный. Боты сканируют миллионы серверов, пробуют типичные пароли или используют базы утечек. Один украденный пароль — и автоматический скрипт за минуты заражает все сайты на аккаунте.
А дальше — монетизация. Многослойная, как луковица.
Doorway-страницы продаются заказчикам спама пачками: «1000 doorways на трастовых доменах — $300». Бэкдоры перепродаются отдельно — доступ к взломанному серверу на хакерском форуме стоит от $5 до $50 за штуку. Backlink-инъекции — это отдельная услуга для «черного SEO». А если все остальное не удастся — всегда можно развернуть криптомайнер или использовать сервер для DDoS-атак.
Один взломанный аккаунт с двенадцатью сайтами — это не «инцидент». Это актив, который приносит доход нескольким разным покупателям одновременно.
Почему это случилось: никаких гениев, только халатность
Здесь нет никаких SQL-инъекций или сложных zero-day эксплойтов. Все гораздо проще. И именно это делает эту историю такой болезненной.
Все признаки указывают на компрометацию FTP/SSH-пароля. Идентичный паттерн заражения на всех двенадцати сайтах — один автоматический проход по файловой системе. Модифицированные core-файлы WordPress — через уязвимость плагина это невозможно, нужен прямой доступ к файлам. Файлы созданы от имени системного пользователя хостинга.
Как произошла утечка? Есть несколько типичных сценариев.
Слабый или повторно используемый пароль. Если вы используете один пароль для FTP и для регистрации на каком-то форуме — рано или поздно он попадет в базу утечек.
FTP-клиент как самое слабое звено. FileZilla и подобные клиенты хранят пароли в открытом виде в XML-файлах на вашем компьютере. Один троян-стилер — и все ваши аккаунты скомпрометированы.
Фишинг. Поддельная страница входа в панель хостинга — выглядит один в один, но отправляет ваши данные совсем не туда, куда вы думаете.
А дальше — виртуальный хостинг сделал свое дело. Двенадцать сайтов под одним системным аккаунтом. Один пароль = полный доступ ко всему. Как один ключ от всего дома — и от квартир, и от подвала, и от чердака.
И еще один момент, который не могу не упомянуть: на сервере работал PHP 7.3–7.4. PHP 7.3 не обновляется с декабря 2021 года, PHP 7.4 — с ноября 2022. То есть годами без каких-либо патчей безопасности. В 2026 году стандарт — PHP 8.3+. Три-четыре года без патчей — это подарок для любого бота, сканирующего серверы.
Как я лечил эти сайты
Процесс очистки занял несколько часов интенсивной работы. Несколько очень интенсивных часов. Если коротко — вот что пришлось сделать:
- Нашел и удалил все вредоносные файлы — вебшеллы, фейковые плагины, doorway-страницы, бэкдоры в mu-plugins, зараженные
index.phpи backlink-инъекции в темах - Удалил хакерские аккаунты из баз данных всех сайтов
- Понизил роль подозрительных «системных» аккаунтов до подписчика
- Перегенерировал секретные ключи WordPress (salt keys) — это сбрасывает все активные сессии, включая хакерские
- Заблокировал выполнение PHP в директории
uploads - Отключил редактирование файлов через админку
- Восстановил поврежденные файлы тем
Это была техническая часть. Но без изменения подхода к безопасности — все это придется повторять снова и снова.
Пять уроков, которые стоили бессонной ночи
Я подготовил детальный технический чеклист безопасности WordPress на 2026 год — он доступен на моем образовательном портале: Чеклист безопасности WordPress (2026). Там есть все — от конфигурации wp-config.php до настройки серверных заголовков безопасности и WAF.
Но если выделить самое важное из этой истории — вот пять выводов.
Один пароль — одна точка отказа. Если на вашем хостинге живет десять сайтов под одним аккаунтом — компрометация одного пароля означает компрометацию всего. Используйте SSH-ключи вместо паролей. Если пароли — только уникальные, только сложные, только через менеджер паролей. И никогда — никогда — не сохраняйте их в FileZilla или других FTP-клиентах.
PHP должен быть актуальным. Как я уже упомянул выше — устаревшая версия PHP без патчей безопасности это приглашение для ботов. Обновляйте до актуальной версии, не откладывайте.
Виртуальный хостинг — это коммунальная квартира. Ваши сайты живут рядом со сотнями других, и один скомпрометированный сосед может стать проблемой для всех. Для серьезных проектов стоит рассмотреть выделенный сервер (VPS) или хостинг с изоляцией сайтов друг от друга.
Мониторинг — это не роскошь. Владелец этих сайтов узнал о взломе случайно — когда Google уже индексировал спам под его доменами. Если бы был установлен Wordfence или любой другой мониторинг целостности файлов — взлом выявили бы за час, а не за месяцы.
Бэкапы — это не «когда-нибудь сделаю». Если бы существовали чистые бэкапы — восстановление заняло бы минуты, а не часы ручной работы по поиску и удалению каждого вредоносного файла отдельно.
Итоги
Каждый взлом — это не техническая проблема. Это проблема приоритетов.
Когда бизнес решает «сэкономить» на безопасности, отложить обновления на потом, использовать один пароль для всего — он не экономит. Он берет кредит. Кредит с очень высокой процентной ставкой, который придется платить не деньгами, а репутацией, позициями в Google, данными клиентов и бессонными ночами.
Двенадцать сайтов. Одна ночь. Один пароль.
Не будьте этим кейсом.
Если ваш WordPress-сайт ведет себя странно, Google показывает под вашим доменом чужой контент, или вы просто хотите убедиться, что все в порядке — напишите мне. Я проведу аудит безопасности, найду уязвимости и закрою их до того, как ими воспользуется кто-то другой. Лучше потратить час на проверку сейчас, чем потом несколько бессонных ночей на лечение.