Удалить вредоносный код
Несколько дней назад я обнаружил много зараженных файлов с вредоносным кодом на моем сервере (несколько wordpress, prestashop и некоторые php-приложения). Я могу использовать простые команды, но отсутствие знаний SSH мешает найти собственное решение...
Для поиска заражений я использую команду find следующим образом:
find . -name "*.php" -type f -perm 600 -print0 | xargs -0 grep -iHlnrE 'filesman|eval.*base64_decode|PCT4BA6ODSE|globals|b374k' 2> /dev/null
Большинство зараженных файлов модифицируются в 1-й строке (но не все они идентичны). Например, сократить строку:
<?php $jefknybs = 'e]53Ld]53]Kc]55Ld]55#*<%bG9}:}.}-}!#*<%nfd> (...) $jefknybs=$ypoqiutce-1; ?><?php
- Я думал, что смогу объединить find и sed для поиска зараженных файлов и удаления вредоносного кода, или заменить всю первую строку на
<?php
, - Вторая мысль - найти и сохранить зараженные имена файлов в
list.txt
, а затем, возможно, использовать какой-то цикл для удаления вредоносного кода?
Можете ли вы помочь?
1 ответ
- Когда я столкнулся с ситуацией, подобной вашей, на одном из моих клиентов, использующих хостинг, я использовал PHP Shell Detector и изменил его, чтобы удалить или изменить каждый файл в полуручном режиме. Было несколько "ложных обнаружений", но это помогло с большинством файлов.
О Престашоп
Основная проблема, как я вижу, - у php-файлов есть права на запись (как на большинстве хостингов), но они им не нужны, например, Prestashop нужны эти разрешения только для некоторых файлов / папок http://doc.prestashop.com/display/PS16/Installing+PrestaShop
Если у вас нет изменений ядра вне / переопределить папку, вы можете легко заменить все файлы php. То же самое для модулей.
Я не помню ни одного случая, когда в PHP-файлах Prestahop было больше одного
<?php ... ?>
теги, так что вы можете удалить первую запись, если есть более одного. Обратите внимание - не первая строка, потому что в вашем примере нет разрыва строки между?><?php
,Еще одна идея: если больше почтового кода является "onliners", вы можете посчитать разрывы строк внутри
<?php ?>
и удалить зараженный блок.Также не забудьте проверить / заменить файлы.htaccess и.js и папки /download /upload, там были проблемы с некоторыми версиями Presta.
Надеюсь, поможет.
PS конечно делаю бекап первым.
UPD
чтобы удалить вредоносный код, вы можете использовать эту строку
find . -name '*.php' | while read line; do if [[ $(grep -o '<?php' $line | wc -l) > 1 ]]; then sed -i 's/<?php.*?>//' $line; fi; done
уточнения:
- найти все файлы с
php
расширение и цикл через них вwhile ... done
- проверьте, есть ли в файле более одного открытого тега php, затем файл заражен и мы удаляем первое вхождение кода php (из открытого в закрытый тег) с помощью sed