После взлома сайта злоумышленник как правило оставляет shell-скрипт, который позволяет удалённо выполнять различного рода команды.
Поиск Shell-скриптов на сервере можно осуществлять по различным параметрам - если взлом “свежий” это может быть дата изменения файла. Кроме того, как правило, в shell-скриптах присутствуют характерные команды. Для начала, следует выполнить поиск по каталогу с сайтом:
egrep -rlZ -e "gzinflate" /var/www
egrep -rlZ -e "eval\(str_replace" /var/www
grep -Rl "r57shell|c99madshell|eval\|base64_decode" /var/www
grep -RPn "(passthru|shell_exec|system|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile) *\(" /var/www
Ну и, конечно же, желательно найти “дырку”, через которую был осуществлён взлом - поиск в логах по имени вредоносных файлов.
# вместо shell.php подставляем имя файла с вредоносным
# кодом, который найден на предыдущем этапе
grep -rl 'shell.php' /var/log
#затем поиск в найденном файле
grep 'shell.php' ./mysite_custom.log
#и затем поиск по IP-шнику, с которого было обращение к вредному файлу
grep '127.0.0.1' ./mysite_custom.log
Конечно, это далеко не все способы, однако некоторые PHP-шеллы, а также “дырки”, через которые они были оставлены этот способ позволяет обнаружить.
Часто, PHP-шелл можно загрузить непосредственно на сервер (помимо проверки загружаемых файлов, для директорий загрузки имеет смысл выключать обработку файлов PHP, да и другие скрипты) - в .htaccess или в конфигурационном файле сервера (для Apache)
php_flag engine off
# или
RemoveType .pl .cgi .php .php3 .php4 .php5
И, конечно же, файл можно загрузить по FTP - используем рекомендации по хранению и созданию паролей