Удалить вредоносный код

Несколько дней назад я обнаружил много зараженных файлов с вредоносным кодом на моем сервере (несколько 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
  1. Я думал, что смогу объединить find и sed для поиска зараженных файлов и удаления вредоносного кода, или заменить всю первую строку на <?php,
  2. Вторая мысль - найти и сохранить зараженные имена файлов в list.txt, а затем, возможно, использовать какой-то цикл для удаления вредоносного кода?

Можете ли вы помочь?

1 ответ

  1. Когда я столкнулся с ситуацией, подобной вашей, на одном из моих клиентов, использующих хостинг, я использовал PHP Shell Detector и изменил его, чтобы удалить или изменить каждый файл в полуручном режиме. Было несколько "ложных обнаружений", но это помогло с большинством файлов.

О Престашоп

  1. Основная проблема, как я вижу, - у php-файлов есть права на запись (как на большинстве хостингов), но они им не нужны, например, Prestashop нужны эти разрешения только для некоторых файлов / папок http://doc.prestashop.com/display/PS16/Installing+PrestaShop

  2. Если у вас нет изменений ядра вне / переопределить папку, вы можете легко заменить все файлы php. То же самое для модулей.

  3. Я не помню ни одного случая, когда в PHP-файлах Prestahop было больше одного <?php ... ?> теги, так что вы можете удалить первую запись, если есть более одного. Обратите внимание - не первая строка, потому что в вашем примере нет разрыва строки между ?><?php,

  4. Еще одна идея: если больше почтового кода является "onliners", вы можете посчитать разрывы строк внутри <?php ?> и удалить зараженный блок.

  5. Также не забудьте проверить / заменить файлы.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
Другие вопросы по тегам