sh:
#!/bin/sh
#
# scanbackdoors.sh
#
# Этот скрипт рекурсивно проходит по заданной директории и ищет подозрительный PHP‑код,
# характерный для бекдоров, в том числе вызовы:
# - eval(base64decode(...))
# - md5($COOKIE[...])
# - base64decode($REQUEST[...])
# - copy($FILES...)
# - $USER->Authorize(<целое число>);
#
# Результаты сканирования записываются в лог‑файл, имя которого содержит текущую дату и время.
#
# Использование:
# ./scanbackdoors.sh /path/to/website
#
# Обратите внимание: данный скрипт предназначен для использования в оболочке sh.
if [ -z "$1" ]; then
echo "Usage: $0 /path/to/website"
exit 1
fi
SEARCHDIR="$1"
# Формирование имени лог‑файла с текущей датой и временем.
TIMESTAMP=`date +%Y%m%d%H%M%S`
SCRIPTDIR=`dirname "$0"`
LOGFILE="${SCRIPTDIR}/scanlog${TIMESTAMP}.log"
# Записываем стартовую информацию в лог‑файл
{
echo "------------------------------------------------------------"
echo "Начало сканирования: `date`"
echo "Директория для сканирования: $SEARCHDIR"
echo "------------------------------------------------------------"
} | tee "$LOGFILE"
# Определяем список шаблонов для поиска в виде многострочной строки.
PATTERNS="eval(base64decode
md5(\$COOKIE
base64decode(\$REQUEST
copy(\$FILES
\$USER->Authorize([0-9]\+)"
# Сохраняем значение IFS и переводим его в символ перевода строки
OLDIFS=$IFS
IFS='
'
# Перебираем каждый шаблон
for pattern in $PATTERNS; do
{
echo "Ищем строки, содержащие: $pattern"
echo "------------------------------------------------------------"
} | tee -a "$LOGFILE"
grep -RHin --include="*.php" --color=auto "$pattern" "$SEARCHDIR" 2>/dev/null | tee -a "$LOGFILE"
echo "------------------------------------------------------------" | tee -a "$LOGFILE"
done
# Восстанавливаем первоначальное значение IFS
IFS=$OLDIFS
{
echo "Сканирование завершено: `date`"
echo "Лог‑файл: $LOGFILE"
} | tee -a "$LOGFILE"
Как использовать:
1. Сохраните скрипт в файл, например, scan_backdoors.sh.
2. Сделайте файл исполняемым:
chmod +x scan_backdoors.sh3. Запустите сканирование, указав путь к директории сайта:
./scan_backdoors.sh /var/www/html
При необходимости паттерны можно корректировать или дополнять для более точного поиска потенциально вредоносных строк. Обнаруженные совпадения требуют ручного анализа для определения их легитимности.
После выполнения скрипта в том же каталоге, где находится скрипт, появится лог‑файл с именем, содержащим дату и время сканирования. В логе фиксируются все найденные строки, содержащие подозрительные конструкции, что позволит провести их дальнейший анализ.
Если файлов на сайте много - имеет смысл запустить скрипт в фоне:
./scan_backdoors.sh /path/to/website > /path/to/output.log 2>&1 &
Если вы хотите, чтобы скрипт продолжал работать даже после закрытия терминала, используйте команду nohup:
nohup ./scan_backdoors.sh /path/to/website > /path/to/output.log 2>&1 &
Вывод будет сохранен в файл nohup.out, если вы не указали другой файл для перенаправления.
