Лечение сайта от внедрений php-кода

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 20:37, 12 января 2017 (править)
Dmih (Обсуждение | вклад)
(Альтернатива всему вышеприведенному)
← К предыдущему изменению
Версия 18:43, 8 декабря 2017 (править) (отменить)
Rekby (Обсуждение | вклад)
(экранирование скобок, кавычки)
К следующему изменению →
Строка 38: Строка 38:
grep -Hn "eval.*base64" -r . --include="*.php" grep -Hn "eval.*base64" -r . --include="*.php"
grep -lHnz -E 'base64_decode.*eval\s*\(' -r . --include="*.php" grep -lHnz -E 'base64_decode.*eval\s*\(' -r . --include="*.php"
- grep -Hn "shell_exec\s*(" -r . --include="*.php"+ grep -Hn 'shell_exec\s*\(" -r . --include="*.php"
- grep -Hn "exec\s*(" -r . --include="*.php"+ grep -Hn 'exec\s*\(' -r . --include="*.php"
- grep -Hn "eval\s*(" -r . --include="*.php"+ grep -Hn 'eval\s*\(' -r . --include="*.php"
- grep -Hn "assert\s*(" -r . --include="*.php"+ grep -Hn 'assert\s*\(' -r . --include="*.php"
- grep -Hn "create_function\s*(" -r . --include="*.php"+ grep -Hn 'create_function\s*\(' -r . --include="*.php"
- grep -Hn "gzuncompress\s*(" -r . --include="*.php"+ grep -Hn 'gzuncompress\s*\(' -r . --include="*.php"
- grep -Hn "gzinflate\s*(" -r . --include="*.php"+ grep -Hn 'gzinflate\s*\(' -r . --include="*.php"
- grep -Hn "str_rot13\s*(" -r . --include="*.php"+ grep -Hn 'str_rot13\s*\(' -r . --include="*.php"
- grep -Hn "preg_replace\s*(" -r . --include="*.php"+ grep -Hn 'preg_replace\s*\(' -r . --include="*.php"
- grep -Hn "file_get_contents\s*(" -r . --include="*.php"+ grep -Hn 'file_get_contents\s*\(' -r . --include="*.php"
- grep -Hn "curl_exec\s*(" -r . --include="*.php" + grep -Hn 'curl_exec\s*\(' -r . --include="*.php"
- grep -Hn "move_uploaded_file\s*(" -r . --include="*.php"+ grep -Hn 'move_uploaded_file\s*\(' -r . --include="*.php"
===Файлы с подозрительно длинными строками=== ===Файлы с подозрительно длинными строками===

Версия 18:43, 8 декабря 2017

Данная статья предназначена для технических специалистов.

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

В связи с тем, что на сервере могут обновиться версии программ, измениться конфигурация приложений, документация в статье может не соответствовать действительности, поэтому вы должны быть готовы разобраться с возможными проблемами самостоятельно или с помощью специалистов из платной поддержки http://1gbsup.ru/paidsu/, обычная поддержка хостинга не оказывает консультации по установке и отладке скриптов и лечению сайтов.

Примерный список действий, которые необходимо выполнить. Предполагается что у вас есть доступ к сайту по ssh. В каждом пункте дано краткое описание того что нужно сделать и примеры команд.

Для вычищения кода сайта необходимо найти и вручную проверить подозрительные файлы. Потом поискать на сайте все файлы, которые могут быть похожи на найденные. Когда файлы найдены нужно посмотреть время их изменения, посмотреть логи веб-сервера за указанное время, поискать подозрительную активность. Если что-то нашлось - посмотреть все запросы с этого же ip адреса, возможно выявятся какие-то новые, ранее не найденные дырки. Через такой анализ логов можно понять как сайт был заражен и лечить его местно.

После проведения ручной чистки нужно удалить с сайта всё что не требуется для его работы - старые копии сайта, содержимое кэша (он создастся заново), файлы из временных папок.

Если сайт на каком-то популярном движке - ПОСЛЕ вычищения всего вредоносного кода нужно обновить его до последней версии.

Содержание

Проверить .htaccess

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

Найти последние измененные файлы

Посмотреть какие файлы менялись за последнее время (3 дня, неделю, месяц)

find . -type f -mtime -3
find . -type f -mtime -7
find . -type f -mtime -30
find . -type f -mtime -30 -name="*.php"

Файлы, которые были созданы в последний месяц

find . -type f -ctime -30

Можно посмотреть файлы, которые менялись больше недели назад и меньше месяца назад

find . -type f -mtime +7 -mtime -30

Файлы, содержащие подозрительные команды

grep -Hn "eval.*base64" -r . --include="*.php" 
grep -lHnz -E 'base64_decode.*eval\s*\(' -r . --include="*.php"
grep -Hn 'shell_exec\s*\(" -r . --include="*.php"
grep -Hn 'exec\s*\(' -r . --include="*.php"
grep -Hn 'eval\s*\(' -r . --include="*.php"
grep -Hn 'assert\s*\(' -r . --include="*.php"
grep -Hn 'create_function\s*\(' -r . --include="*.php"
grep -Hn 'gzuncompress\s*\(' -r . --include="*.php"
grep -Hn 'gzinflate\s*\(' -r . --include="*.php"
grep -Hn 'str_rot13\s*\(' -r . --include="*.php"
grep -Hn 'preg_replace\s*\(' -r . --include="*.php"
grep -Hn 'file_get_contents\s*\(' -r . --include="*.php"
grep -Hn 'curl_exec\s*\(' -r . --include="*.php" 
grep -Hn 'move_uploaded_file\s*\(' -r . --include="*.php"

Файлы с подозрительно длинными строками

grep -Hn -E '[^\ ]{200,}' -r . --include="*.php"

Файлы с расширением НЕ php, содержащие php код

grep -lHnz -E '<\?(php)?[[:space:]].*\?>' -r . --exclude="*.php"

Файлы, которые лежат там, где лежать не должны

Например для joomla при взломе php код часто попадает в папку с картинками

find http/images/ -type f -name "*.php"

Посмотреть точное время изменения файла для поиска по логам

ls --full-time 123.php

Поиск base64 и обфускации кода, в которые очень часто шифруется всякая дрянь

Одна команда найдет практически все факты заражения - но и много нормальных здоровых файлов, поэтому её следует использовать с осторожностью и повышенной внимательностью

egrep -r '[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+[a-zA-Z]+[0-9]+' .
Личные инструменты