На главную сайта / Охота на невидимку: как мы нашли и вырезали скрытый SEO-спам (казино-дорвей) с сайта на WordPress

Охота на невидимку: как мы нашли и вырезали скрытый SEO-спам (казино-дорвей) с сайта на WordPress

Вчера, 22:48
Обычный вечерний аудит логов веб-сервера неожиданно перерос в полноценное расследование. Всё началось со странных строчек в access_log одного из сайтов ([ваш сайт]):

text
"66.249.65.105 ... GET /?o=36973124435 HTTP/1.1" 200
"66.249.65.105 ... GET /?x=47275860160 HTTP/1.1" 200
Используйте код с осторожностью.

IP-адрес принадлежит официальному Googlebot, а вот мусорные GET-параметры (?o=..., ?x=...), отдающие код 200 — классический почерк так называемого японского или гэмблинг-дорвея. Хакеры взламывают сайт, подсовывают поисковикам тысячи фейковых ссылок на казино и продвигают их за счет репутации вашего домена.
Когда открыли страницу сайта и заглянули в её текстовое содержимое, подозрения подтвердились на 100%: в самом низу висела целая пачка ссылок на букмекерские конторы и онлайн-казино (1хБет, 1Win, mostbet, pinko). При этом глазами обычный посетитель их не видел.
Делюсь пошаговой инструкцией, как мы вычисляли, где прячется эта зараза, и как её обезвредили.



Шаг 1. Поиск по файлам (Первая осечка)
Логично было предположить, что вирусный код вшит в footer.php темы или в ядро WordPress. Прогнали поиск по всем файлам сайта по ключевым словам казино:

bash
grep -rnE "1Win|mostbet|cruks|pinko" /home/[ваш сайт]/public_html/
Используйте код с осторожностью.

Результат: Пусто (кроме легитимного черного списка спамеров внутри плагина статистики).
Проверили файлы на популярные функции обфускации (eval, base64_decode, gzinflate, str_rot13) в папках тем и wp-includes — там тоже оказались только стандартные библиотеки самого WordPress. Стало ясно: в открытом виде в файлах сайта этих ссылок нет.



Шаг 2. Притворяемся Googlebot через curl
Многие современные вирусы работают по принципу клоакинга: обычным людям и админам они отдают чистую страницу, а спам-ссылки показывают только тогда, когда на сайт заходит поисковый робот.
Мы сделали запрос к главной странице через консоль, подменив User-Agent на робота Google:

bash
curl -s -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://google.com)" https://[ваш сайт] | grep -C 5 -iE "1Win|mostbet|cruks|1хБет"
Используйте код с осторожностью.

И вот тут карта вскрылась. В ответ посыпался чистый HTML-код, вшитый сразу после основного контента страницы:

html
<div style="position: absolute; left: -9966px;">
<p><a href="...">1хБет</a></p>
</div>
<p><a style="position: absolute; top: -9999px; left: -9999px;" href="...">1Win</a></p>
Используйте код с осторожностью.



Злоумышленники использовали классический трюк со смещением координат (left: -9966px), чтобы вынести ссылки далеко за пределы экрана монитора, но оставить их видимыми для поисковых роботов.



Шаг 3. Развязка — база данных и админка
Раз HTML-обертка выводилась прямо внутри тела статьи, а в PHP-файлах её не было, значит, код сидел напрямую в базе данных WordPress (таблица wp_posts).
  1. Зашли в админку WordPress -> раздел Страницы -> открыли главную страницу.
  2. Переключили редактор в режим «Текст» (HTML).
  3. В самом низу, сразу после основного текста, обнаружился тот самый хвост из десятков скрытых блоков .
  4. Вырезали всю эту грязь, обновили страницу и снова прогнали проверку через curl с подстановкой Googlebot — в ответ пришла идеальная тишина.



Выводы и профилактика
Вернуться на сайт