Как проверить сайт на уязвимости самостоятельно
После переноса сайта копия базы иногда остаётся в папке, доступной посетителям. Проверить собственный сайт на уязвимости и случайно открытые файлы можно бесплатно, начав со сведений из CMS и панели хостинга.
Разберём по шагам, как подготовить сайт к проверке, запустить бесплатные сканеры и оценить находки на примере WordPress.
1. Подготовка копии сайта
Активный сканер подставляет значения в параметры и отправляет дополнительные запросы. Даже обход ссылок затрагивает данные, если к открытию страницы разработчик привязал удаление записи или отправку письма. На рабочем сайте начните с пассивного анализа трафика при обычном просмотре страниц.
Сканируйте только свои сайты или ресурсы, на проверку которых у вас есть письменное согласие владельца. Попытку получить данные чужого сайта без разрешения могут расценить как неправомерный доступ к компьютерной информации (ст. 272 УК РФ).
На общем IP могут работать чужие сайты, поэтому в цели включайте только свои адреса. Платёжные шлюзы и внешние рассылки исключите, заодно сверившись с правилами хостинга.
Резервную копию с файлами, базой и конфигурацией сначала восстановите отдельно от рабочего сайта. Восстановление удалось, если база импортировалась, админка пускает, а страницы открываются. Архив храните вне веб-каталога, иначе вы сами устроите ту утечку, которую собирались искать.
На копии оставьте прежние версии компонентов, а данные клиентов, пароли и ключи замените. Реальные платежи, почту, вебхуки и задания с внешними действиями отключите. После переноса WordPress смените адрес сайта и проследите, куда ведут ссылки и редиректы, чтобы браузер оставался на копии.
В командах указан http://127.0.0.1:8081, поскольку порт 8080 по умолчанию занимает ZAP. Подставьте адрес своей копии, закрытой от внешнего доступа. Сканеры запускайте по одному, наблюдая за нагрузкой и журналами. При новых ошибках 5xx, ответах 429 или росте задержек остановитесь и выясните причину.
2. Компоненты и доступные снаружи файлы
В WordPress списки обновлений, плагинов и тем дополняет раздел «Инструменты → Здоровье сайта → Информация» с версиями CMS и PHP. Отключённые расширения тоже внесите в список. После деактивации файлы остаются на сервере, а возможность атаки зависит от конкретной ошибки в плагине.
По названию и версии найдите компонент в бюллетенях разработчика либо базах Wordfence и Patchstack. В описании уязвимости с номером CVE указаны затронутые версии, необходимость входа и права для атаки. Читайте бюллетени, даже если админка не предлагает обновлений.
Версии и сроки поддержки ОС, PHP, веб-сервера, базы и список публичных портов уточните у хостера. Поставщики Linux переносят исправления в прежние версии пакетов. Сопоставьте полный номер установленного пакета с бюллетенем поставщика по конкретной CVE.
Откройте в браузере без входа панели управления, phpMyAdmin и диагностические страницы и посмотрите, какие служебные сведения и функции управления видны посторонним. В файловом менеджере хостинга просмотрите архивы и старые копии в папке сайта.
Веб-сервер исполняет wp-config.php, а резервный wp-config.php.bak выдаст текстом вместе с секретами. Закройте доступ правилами сервера либо перенесите файл из веб-каталога. Строки robots.txt адресованы поисковым роботам, а файл по прямой ссылке скачает любой посетитель.
Публичный HTTPS-домен введите в SSL Labs, и сервис проверит сертификат, цепочку доверия и протоколы. Если HTTPS обслуживает CDN, оценка относится к публичной точке подключения, а соединение CDN с исходным сервером проверьте отдельно.
3. Пассивный просмотр и запуск сканеров
ZAP анализирует трафик браузера. Установщик настольной версии и требования к Java описаны в инструкции ZAP. Начните с ручного просмотра в Safe Mode.
- Выберите Safe Mode на верхней панели. Режим блокирует активное сканирование и автоматический обход.
- В Quick Start → Manual Explore укажите адрес сайта и нажмите Launch Browser.
- Пройдите главную, записи, поиск и страницу входа. В History должны появляться запросы сайта.
- После пассивного анализа откройте Alerts и сохраните для находки URL, запрос и фрагмент ответа.
Если страницы открываются, а History пуста, браузер, скорее всего, отправляет локальные запросы мимо прокси. Загляните в список исключений прокси в настройках браузера. Safe Mode ограничивает инструменты ZAP, а кнопка «Удалить» в браузере по-прежнему удаляет по-настоящему.
Nikto перебирает известные пути и признаки ошибок настройки. Для запуска понадобятся Perl и архив репозитория sullo/nikto с GitHub. Из папки program команда отправит запросы к копии и сохранит HTML-отчёт.
perl nikto.pl -h http://127.0.0.1:8081 -Tuning 123b -Pause 1 -maxtime 10m -output nikto-before.html -Format htm
-Tuning 123b оставляет поиск файлов, ошибок настройки, раскрытия информации и определение ПО. -Pause 1 задаёт секундную паузу между тестами, -maxtime 10m ограничивает время на хост. При остановке по лимиту отчёт охватывает только выполненные тесты.
Nuclei берёт из шаблонов запросы и признаки для поиска в ответах. Скачайте готовую программу своей ОС из projectdiscovery/nuclei на GitHub, распакуйте и добавьте папку в PATH. После обновления шаблонов выполните два выбранных теста.
nuclei -update-templates
nuclei -u http://127.0.0.1:8081 -t http/technologies/wordpress-detect.yaml -t http/exposures/configs/git-config.yaml -rl 2 -c 1 -bs 1 -ni -dr -o nuclei-before.txt
wordpress-detect распознаёт WordPress, git-config ищет доступный /.git/config с настройками репозитория. Лимит составляет два запроса в секунду, параллелизм ограничен одним шаблоном и целью. Флаги -ni и -dr отключают внешние проверки Interactsh и редиректы. При перенаправлении сначала выясните конечный адрес, затем укажите разрешённый URL вручную.
Для компонента с известной CVE выбирайте отдельный шаблон и читайте запросы внутри. Фильтр -severity high,critical отбирает шаблоны по оценке уязвимости, а что именно шаблон отправит на сайт, определяет содержимое файла. Непонятные запросы сначала разберите, затем запускайте. Без выбора шаблонов Nuclei выполняет широкий набор тестов.
4. Разбор результатов на WordPress
На локальной копии WordPress создайте страницы и тестового пользователя. В корневую папку положите backup.zip с безвредным текстом для учебной утечки. Настоящую базу и действующие пароли в упражнение не берите.
После просмотра страниц через ZAP и запуска команд сравните отчёты с ручным запросом /backup.zip без авторизации. Сканер ищет известные пути и признаки, поэтому архив под другим именем вроде site-old.zip в отчёт не попадёт.
| Наблюдение | Как трактовать |
|---|---|
| WordPress найден, уровень info | Сканер распознал технологию. Версию уточните в CMS и сверьте с бюллетенями. |
| Отсутствует Content-Security-Policy | Отсутствие дополнительной защиты CSP не доказывает XSS. |
| Открывается wp-login.php | Штатная страница входа. Проверьте, включены ли двухфакторная защита и ограничение попыток. |
| Без входа скачивается backup.zip | Учебный файл безвреден. Доступ к настоящему архиву с базой или секретами закройте сразу. |
Длинный список «найденных» файлов в отчёте Nikto нередко объясняется банально. Некоторые сайты отвечают 200 OK со страницей ошибки на несуществующие адреса, и сканер принимает такой ответ за найденный файл. Откройте заведомо несуществующий адрес и сравните страницы. Предупреждение об отсутствии CSP сверьте с HTML, ведь политику задают и через meta.
На копии магазина заведите двух покупателей с вымышленными заказами и войдите под разными учётными записями в двух профилях браузера. Ссылка на закрытый заказ одного покупателя должна оставаться недоступной другому. Тем же способом проверьте приватные документы, а публичные записи блога для теста прав не годятся, такие записи видят все.
Ошибки, через которые посторонние читают чужие данные, обходят вход или выполняют код, устраняйте срочно. Раскрытые ключи отзовите, пароли смените. Если веб-фильтр WAF блокировал запросы сканера, отметьте тест как неполный. После исправления повторите исходный запрос и убедитесь, что вход и формы работают на копии, и только потом переносите изменения на рабочий сайт.
Вопросы и ответы
Как проверить сайт на взлом?
Ищите незнакомых администраторов, подменённые файлы и подозрительные записи в журналах. При установленном WP-CLI команда wp core verify-checksums из папки сайта сверит ядро с WordPress.org. Плагины, загрузки и базу осмотрите вручную. До очистки сохраните копию сайта и журналы.
Заменяет ли бесплатный аудит сайта пентест?
Нет. Помимо сканирования, при пентесте специалист изучает права пользователей, бизнес-логику, API и цепочки действий.
Где хранить отчёты сканеров?
Подойдёт закрытая папка вне сайта. В подробные отчёты и сессии попадают запросы с cookie, ключами и данными форм. Перед передачей материалов удалите секреты и лишние персональные сведения.
После каких изменений повторять диагностику?
После установки расширений, изменения доступа, переноса хостинга и исправления найденных проблем. Между аудитами следите за бюллетенями компонентов.