Эта инструкция предназначена для быстрого поиска, удаления вредоносного кода и защиты сайта на CMS Joomla при повторном заражении.
ШАГ 1: Изоляция и подготовка
1. Сделайте резервную копию (бэкап файлов и базы данных) через панель хостинга.
2. Смените пароли от панели хостинга, SSH/FTP и баз данных.
3. Подключитесь по SSH и перейдите в корень сайта: cd /путь/к/сайту/
ШАГ 2: Поиск и удаление вредоносных файлов
1. Поиск PHP-скриптов в медиа-папках (100% вирусы)
В этих папках Joomla не должно быть исполняемых файлов:
bashfind images/ -type f -name "*.php"find cache/ -type f -name "*.php"find tmp/ -type f -name "*.php"find logs/ -type f -name "*.php"
Если команда нашла файлы (например, images/stories/wp-log.php), удалите их командой:
bash
rm путь/к/найденному_файлу.php
2. Поиск по сигнатурам (внутри кода файлов)
Ищем скрытые обфусцированные загрузчики, функции сжатия и выполнения кода:
bash# Поиск функций сжатия (gzuncompress, часто идет с eval)grep -rnw . -e "gzuncompress" --include=\*.php
# Поиск опасных конструкций (eval, base64_decode, assert)grep -rnw . -e "eval(" -e "base64_decode(" -e "assert(" --include=\*.php
Внимательно проверьте строки. Если код выглядит как случайный набор букв и цифр, файл заражен. Удалите его или вырежьте вредоносный код через nano.
3. Поиск файлов по дате изменения
Если вы знаете примерную дату взлома, найдите все файлы PHP, измененные за последние 7 дней:
bashfind . -type f -name "*.php" -mtime -7
ШАГ 3: Защита и закрытие уязвимостей
1. Блокировка запуска PHP в папке картинок (Критически важно)
Даже если хакер снова загрузит вирус в images/, этот шаг запретит серверу его выполнять.
Выполните команду:
bash
nano images/.htaccess
Вставьте в файл этот код, нажмите Ctrl+O, затем Enter (для сохранения) и Ctrl+X (для выхода):
apache<Files *.php> Deny from all</Files>
2. Сброс прав на файлы и папки (Permissions)
Вирусы часто меняют права, чтобы закрепиться в системе. Верните безопасные стандарты:
bashfind . -type d -exec chmod 755 {} \;find . -type f -exec chmod 644 {} \;
3. Проверка скрытого файла .htaccess
Проверьте корневой файл на наличие посторонних редиректов или вредоносных вставок в начале/конце:
bashcat .htaccess
ШАГ 4: Действия в админ-панели Joomla
1. Обновите всё: Обновите Joomla до актуальной версии. Обновите абсолютно все плагины, компоненты и модули (особенно JCE Editor, VirtueMart, K2, SP pagebilder). Уязвимости в них — главная причина взломов.
2. Проверьте пользователей: Перейдите в Пользователи -> Менеджер пользователей. Удалите всех незнакомых администраторов. Смените пароли легитимным админам.
3. Очистите кэш и сессии: Перейдите в Система -> Очистить весь кэш.
Для автоматизации этого процесса мы создадим Bash-скрипт. Вы сможете загрузить его на сервер один раз, а затем запускать одной короткой командой (или настроить запуск по расписанию в Cron). Скрипт сам проверит все критические зоны Joomla, выведет отчет на экран и запишет результаты в лог-файл.
Шаг 1: Создание файла скрипта
Подключитесь по SSH, перейдите в корень сайта и создайте новый файл (например, с именем scan.sh):
bashnano myscan.sh
Шаг 2: Код скрипта
Скопируйте и вставьте в терминал следующий код. Он снабжен комментариями, безопасен и ничего самостоятельно не удаляет (только находит и предупреждает):
Показать код (нажмите здесь)
bash#!/bin/bash
# Цвета для удобства чтения отчетаRED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m' # Без цвета
LOG_FILE="joomla2_scan_report.log"echo "=== ОТЧЕТ СКАНИРОВАНИЯ ОТ $(date) ===" > $LOG_FILE
echo -e "${YELLOW}Начало автоматического сканирования Joomla...${NC}"echo "------------------------------------------------"
# 1. Проверка PHP-файлов в медиа-директорияхecho -e "${YELLOW}[1/4] Проверка запрещенных PHP-файлов в медиа-папках...${NC}"MEDIA_DIRS=("images" "cache" "tmp" "logs")FOUND_BAD_FILES=0
for dir in "${MEDIA_DIRS[@]}"; do if [ -d "$dir" ]; then FILES=$(find "$dir" -type f -name "*.php") if [ ! -z "$FILES" ]; then echo -e "${RED}ВНИМАНИЕ! Найдены PHP-файлы в папке /$dir:${NC}" echo "$FILES" echo "Найдены файлы в /$dir:" >> $LOG_FILE echo "$FILES" >> $LOG_FILE FOUND_BAD_FILES=1 fi fidone
if [ $FOUND_BAD_FILES -eq 0 ]; then echo -e "${GREEN}Папки images, cache, tmp, logs чисты от PHP-скриптов.${NC}"fi
echo "------------------------------------------------"
# 2. Поиск опасных сигнатур в кодеecho -e "${YELLOW}[2/4] Поиск подозрительного кода (eval, gzuncompress, base64)...${NC}"echo "Результаты поиска по сигнатурам:" >> $LOG_FILE
# Ищем конструкции, исключая сам файл скрипта scan.shSIGNATURES=$(grep -rnw . -e "gzuncompress" -e "eval(" -e "base64_decode(" -e "assert(" --include=\*.php | grep -v "scan.sh")
if [ ! -z "$SIGNATURES" ]; then echo -e "${RED}Обнаружены подозрительные функции в следующих файлах:${NC}" # Показываем первые 10 строк для примера, чтобы не спамить терминал echo "$SIGNATURES" | head -n 15 echo "...полный список сохранен в лог-файл." echo "$SIGNATURES" >> $LOG_FILEelse echo -e "${GREEN}Опасных текстовых сигнатур не обнаружено.${NC}"fi
echo "------------------------------------------------"
# 3. Поиск файлов, измененных за последние 3 дняecho -e "${YELLOW}[3/4] Поиск файлов PHP, измененных за последние 72 часа...${NC}"RECENT_FILES=$(find . -type f -name "*.php" -mtime -3 | grep -v "scan.sh" | grep -v "$LOG_FILE")
if [ ! -z "$RECENT_FILES" ]; then echo -e "${YELLOW}Файлы, измененные недавно:${NC}" echo "$RECENT_FILES" echo "Недавно измененные файлы:" >> $LOG_FILE echo "$RECENT_FILES" >> $LOG_FILEelse echo -e "${GREEN}За последние 3 дня PHP-файлы не модифицировались.${NC}"fi
echo "------------------------------------------------"
# 4. Проверка защиты в папке imagesecho -e "${YELLOW}[4/4] Проверка файла защиты images/.htaccess...${NC}"if [ -f "images/.htaccess" ]; then if grep -q "Deny from all" "images/.htaccess"; then echo -e "${GREEN}Защита папки images активна (.htaccess настроен верно).${NC}" else echo -e "${RED}ВНИМАНИЕ: images/.htaccess существует, но не блокирует PHP!${NC}" echo "Проблема с images/.htaccess" >> $LOG_FILE fielse echo -e "${RED}ВНИМАНИЕ: Защита отсутствует! Файл images/.htaccess не найден.${NC}" echo "Отсутствует images/.htaccess" >> $LOG_FILEfi
echo "------------------------------------------------"echo -e "${YELLOW}Сканирование завершено! Подробный отчет: $LOG_FILE${NC}"
Сохраните файл (в nano: нажмите Ctrl+O, затем Enter, для выхода Ctrl+X).
Шаг 3: Активация скрипта
Чтобы систему можно было запустить, дайте файлу права на исполнение:
bashchmod +x myscan.sh
Как пользоваться в "одну кнопку":
Теперь, когда вам нужно проверить сайт, просто введите в консоли короткую команду:
bash./myscan.sh
Скрипт мгновенно подсветит зеленым безопасные зоны и красным — места, где обнаружен вирус. Полный отчет со списком всех строк и файлов всегда будет доступен в текстовом файле joomla2_scan_report.log в корне сайта.



