Удаление вируса на сайте с помощью bash

Приведу небольшой кейс по удалению вирусов на сайте. Для примера, берем заурядный сайт на joomla и начинаем шерстить его на предмет вирусов. Поскольку сайт на joomla 1.5 вероятность НЕ найти вирус на нем «крайне мала». И так по прошествию нескольких секунд поиска в основных уязвимых местах находим первого друга.

В папке ./images/stories/food/index.php находим картинку с расширением php, собственно можно даже не проверяя сказать что это вирус, заглянем внутрь и убедимся в этом.

 vim ./images/stories/food/index.php

Собственно что и требовалось доказать. Нам повезло и все тело файла является вирусом мало того он index.php и вероятность что остальные тела тоже будут с таким же именем весьма велики, как правило вирусы с изменяющимся названием файла пишутся куда менее читаемо, посему все что нам остается это убедиться что по всему сайту нет его копий.

 Find . -name 'index.php'

Явно их должно быть меньше, давайте откроем еще один файл и проверим его на изменения внутри самого вируса для правильной его идентификации. Для этого откроем два файла явно вирусных

 ./administrator/includes/pcl/index.php
 ./modules/mod_feed/tmpl/index.php

Теперь мы можем составить регулярное выражение на основе которого найдем все файлы с этим вирусом. Для простоты я заменил все морфирующие значения.* поскольку у нас и так достаточно много данных, и более строгой регулярки нам не потребуется.

 find . -name '*.php' -exec grep -Eo '\$.* = \".*\"\; if.isset.\$_REQUEST' {} \;

Как мы видим, все что попало в выборку, исключительно нужные нам конструкции. Все что осталось, получить список фалов содержащих данный код.

 find . -name '*.php' -exec grep -El '\$.* = \".*\"\; if.isset.\$_REQUEST' {} \;

Удаляем эти файлы.

 find . -name '*.php' -exec grep -El '\$.* = \".*\"\; if.isset.\$_REQUEST' {} \; | xargs rm -f

Все, удовлетворяющие условию файлы, удалены.


Оставить комментарий