FYZI Shield / Статьи / Веб-шелл

Веб-шелл на сайте: что это и как найти

Веб-шелл — это небольшой скрипт, чаще всего на PHP, который злоумышленник загружает на сервер, чтобы управлять сайтом через браузер. Это «ключ от двери», через который вирус возвращается снова и снова, сколько бы вы ни чистили сайт.

Угрозы · Обновлено 6 октября 2026 · 4 мин чтения

Что умеет веб-шелл

Через веб-шелл можно делать на сервере почти всё, что может сам сайт:

Внешне сайт при этом может работать как обычно: шелл ничего не выводит на страницах и ждёт команды.

Как веб-шелл попадает на сайт

Из практики. На сайте спортивной федерации боты полтора месяца загружали шеллы через форму в плагине-конструкторе. Мы нашли 7 веб-шеллов, замаскированных под изображения в папке загрузок, и 102 администратора, созданных через них.

Как выглядит веб-шелл

Самые простые шеллы занимают одну строку:

<?php @eval($_POST['x']); ?>
<?php system($_GET['cmd']); ?>

Но чаще код запутан, чтобы его не нашли поиском:

<?php $a = 'as'.'se'.'rt'; $a(str_rot13(base64_decode($_COOKIE['d']))); ?>
<?php $f = "\x63\x72\x65\x61\x74\x65_function"; ... ?>

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

Где искать

  1. Папки загрузок: wp-content/uploads в WordPress, /upload/ в Битриксе, image/ в OpenCart. PHP-файлов там быть не должно вообще.
  2. Файлы с двойным расширением: photo.php.jpg, image.jpg.php, .phtml, .php5, .phar.
  3. Файлы с правдоподобными именами: wp-cache.php, class-wp-*.php не на своём месте, about.php, index-old.php, .config.php.
  4. Вставки в существующие файлы: одна строка в начале index.php, functions.php или файла плагина.
  5. Скрытые файлы и папки, начинающиеся с точки.

Полезные команды для поиска по SSH:

# PHP-файлы в папке загрузок
find . -path "*upload*" -type f \( -name "*.php*" -o -name "*.phtml" -o -name "*.phar" \)

# Файлы с подозрительными функциями
grep -rlE "(eval|assert|system|shell_exec|passthru)\s*\(\s*\\\$_(POST|GET|REQUEST|COOKIE)" --include=*.php .

# PHP-код внутри «картинок»
grep -rl "<?php" --include=*.jpg --include=*.png --include=*.gif --include=*.ico .

Подробнее о разборе найденного кода — в статье «eval(base64_decode) в коде сайта».

Как удалить веб-шелл правильно

  1. Сделайте копию найденных файлов для анализа и копию всего сайта.
  2. Удалите шеллы. Если шелл вставлен в легальный файл, замените файл оригинальной версией из дистрибутива.
  3. Посмотрите, что шелл успел сделать: новые файлы с той же датой, новые пользователи, изменения в базе, задания cron.
  4. Найдите в журнале доступа обращения к шеллу — по ним видно IP злоумышленника и, главное, как шелл был загружен.
  5. Закройте уязвимость и смените все пароли: админки, хостинга, FTP, базы данных.

Как защититься

Самая эффективная мера — запретить выполнение PHP в папках загрузок. Даже если файл загрузят, сервер не будет его выполнять. Готовые правила для Apache и nginx — в чек-листе защиты WordPress.

Вторая мера — контроль новых файлов. FYZI Shield каждый день сравнивает файлы сайта с предыдущим состоянием и сообщает в Telegram о любом новом PHP-файле, а подозрительные сразу отправляет в карантин.

Частые вопросы

Антивирус хостинга не нашёл веб-шелл. Значит, его нет?

Не обязательно. Антивирусы хорошо находят известные шеллы, но новые или специально запутанные варианты часто пропускают. Ручной поиск по признакам и контроль новых файлов надёжнее.

Я удалил шелл, но через день он появился снова. Почему?

Скорее всего, на сайте остался второй шелл, задание cron или вредоносный код в базе, который восстанавливает файл. Либо уязвимость, через которую его загрузили, не закрыта.

Можете найти и удалить шеллы за нас?

Да, это часть срочной чистки — от 4 990 ₽. Находим все шеллы и бэкдоры, точку входа и закрываем её.

Читайте также

Сайт взломан? Пишите