Каждый раз, когда я начинаю воркшоп для стажёров, вижу одну и ту же картину: человек прочитал десять статей про SQL-инъекции и XSS, но не может перехватить свой первый HTTP-запрос. Теория без контекста не работает. Вы не научитесь плавать, читая книги о гидродинамике - нужно залезть в воду. Эта статья построена по принципу «делай вместе со мной»: поднимем уязвимое приложение, настроим инструменты и найдём первую уязвимость руками, а не на словах.
Веб-пентест с нуля начинается не с изучения списка уязвимостей и не с покупки курса за сотню тысяч. Он начинается с рабочего окружения, в котором можно безопасно ломать - и понимать, что именно сломалось.
Что такое веб-пентест и зачем он нужен
Тестирование на проникновение (penetration testing) веб-приложений - контролируемая имитация атаки на сайт или веб-сервис, чтобы найти уязвимости раньше, чем это сделает кто-то с другими намерениями. По данным Verizon DBIR, атаки на веб-приложения стабильно входят в число ведущих векторов утечек данных.В терминологии MITRE ATT&CK то, чем мы будем заниматься, соответствует технике Exploit Public-Facing Application (T1190, Initial Access) - атакующий ищет и эксплуатирует уязвимости в публично доступных веб-приложениях. Этап разведки - Vulnerability Scanning (T1595.002, Reconnaissance) и Network Service Discovery (T1046, Discovery).
Разница между пентестером и злоумышленником - разрешение. Перед любым тестированием у вас должно быть письменное согласие владельца системы. Поэтому мы начинаем с локального окружения: ломать собственный Docker-контейнер можно без чьего-либо одобрения.
Настройка окружения для пентеста: что нужно установить
Вот где большинство новичков спотыкаются первый раз. Хочется сразу открыть терминал и начать «хакать», но без правильного окружения будете тратить время на борьбу с инструментами, а не с уязвимостями.Kali Linux или обычная система
Kali Linux - дистрибутив на базе Debian с предустановленными инструментами для пентеста: Nmap, Burp Suite Community, sqlmap, ffuf, Metasploit Framework и ещё сотни утилит. Если вы начинаете пентест сайта с нуля, Kali экономит часы на установку.Но Kali не обязателен. Всё то же самое можно поставить на Ubuntu, Fedora и даже macOS. Я рекомендую Kali новичкам по одной причине: не придётся гуглить «как установить sqlmap на Windows» вместо того, чтобы учиться им пользоваться.
Варианты запуска Kali:
- Виртуальная машина через VirtualBox или VMware - самый безопасный путь. Скачиваете готовый образ с kali.org, импортируете, запускаете. Минимум 4 ГБ RAM и 2 ядра процессора - для начала хватит за глаза.
- WSL2 на Windows - если не хотите ставить виртуалку. Работает для большинства консольных инструментов, но с GUI-приложениями (тот же Burp Suite) придётся повозиться.
- Установка на железо - для тех, кто готов выделить отдельный ноутбук под пентест.
Поднимаем уязвимое приложение через Docker
Тестировать чужие сайты без разрешения - уголовное преступление. Тестировать специально созданные уязвимые приложения на своей машине - легальная и эффективная практика.DVWA (Damn Vulnerable Web Application) - классический тренажёр, который используют на большинстве курсов по этичному хакингу. Внутри - уязвимости из OWASP Top 10 с тремя уровнями сложности: low, medium, high. Начинаете на low и по мере роста переключаетесь выше.
Запуск одной командой:
docker run --rm -it -p 80:80 vulnerables/web-dvwa. После этого открываете http://localhost в браузере, попадаете на страницу Setup (/setup.php), жмёте «Create / Reset Database». Логин - admin, пароль - password. Всё, можно ломать.Альтернатива - OWASP Juice Shop, более современное приложение на Node.js с элементами геймификации. Запуск:
docker run --rm -p 3000:3000 bkimminich/juice-shop. Juice Shop лучше имитирует реальный интернет-магазин и подойдёт как следующий шаг после DVWA.Почему Docker, а не установка на хост? Контейнер изолирован: после остановки не остаётся следов, а при поломке конфигурации достаточно пересоздать его за секунды.
Burp Suite: обучение перехвату трафика с нуля
Burp Suite - основной инструмент для веб пентеста. По данным HackerOne, его используют подавляющее большинство багхантеров и пентестеров. Community Edition бесплатна и уже стоит в Kali Linux.Burp работает как прокси между браузером и целевым приложением. Каждый запрос проходит через него - можно просмотреть, изменить, отправить заново. Это фундамент ручного тестирования.
Настройка прокси и установка сертификата
Вот последовательность, которая вызывает больше всего вопросов у стажёров:- Запустите Burp Suite, создайте временный проект (Temporary Project) - для обучения хватит.
- Проверьте настройки прокси: Settings → Tools → Proxy или кнопка Proxy settings во вкладке Proxy (версии 2023–2024), либо Proxy → Options (до 2022). По умолчанию Burp слушает на
127.0.0.1:8080. - Откройте встроенный браузер Burp (кнопка «Open browser» во вкладке Proxy → Intercept). Он уже настроен на работу через прокси - системные настройки трогать не нужно.
- Если предпочитаете Firefox: Settings → Network Settings → Manual proxy configuration, HTTP Proxy
127.0.0.1, порт8080. Потомhttp://burpsuiteв этом браузере - скачиваете CA-сертификат и импортируете через Settings → Privacy & Security → Certificates → View Certificates → Import.
Первый перехваченный запрос - что мы видим
Включаете перехват: вкладка Proxy → Intercept, кнопка «Intercept is on». Переходите в DVWA, пробуете залогиниться. Burp перехватывает POST-запрос:
Код:
POST /login.php HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
username=admin&password=password&Login=Login&user_token=abc123def456
user_token), который DVWA генерирует при каждой загрузке страницы - всё как на ладони. «Forward» - пропустить запрос дальше, «Drop» - заблокировать.Теперь Proxy → HTTP history - тут хранятся все запросы, прошедшие через прокси. Любой из них можно отправить в Repeater (правый клик → Send to Repeater) и модифицировать сколько угодно раз.
Именно в Repeater происходит основная работа: меняете параметры, подставляете пейлоады, наблюдаете за реакцией сервера. Запомните: Proxy - перехват, Repeater - эксперименты, Intruder - автоматизированный перебор.
Разведка: что мы можем узнать о веб-приложении
Прежде чем искать уязвимости, нужно понять, с чем работаем. Эта фаза - reconnaissance (разведка), и делится на пассивную и активную.Сканирование портов и сервисов с Nmap
Nmap - стандарт индустрии для обнаружения открытых портов и определения версий сервисов. В веб-пентесте нас интересуют порты 80 (HTTP), 443 (HTTPS), 8080, 8443 и другие, на которых могут крутиться веб-серверы.Для нашего DVWA-контейнера
nmap -sV -sC localhost покажет открытый порт 80 с Apache. MySQL работает внутри контейнера и наружу не проброшен - Nmap его не увидит. Флаг -sV определяет версии сервисов, -sC запускает стандартные NSE-скрипты для базовых проверок безопасности.На реальном проекте добавляется
nmap -sS -p- target_ip - сканирование всех 65535 портов. Иногда разработчики оставляют админку на каком-нибудь 9090 или 4443, и вот тут-то начинается самое интересное. Флаг -sS - SYN-сканирование, быстрый и относительно тихий метод.Зачем знать версии? Устаревший Apache или PHP - потенциальный вектор атаки. Помните CVE-2021-44228 (Log4Shell)? CVSS 10.0, одна запись в логе - и произвольный код на сервере. Знание версии компонента - первый шаг к обнаружению таких проблем.
Перебор директорий и скрытых файлов
Веб-приложения часто содержат скрытые страницы: панели администрирования, резервные копии конфигов, забытые тестовые файлы. Инструменты для их обнаружения - ffuf, gobuster, dirsearch.Я предпочитаю ffuf за скорость и гибкость. Типичный запуск:
ffuf -u http://localhost/FUZZ -w /usr/share/wordlists/dirb/common.txt. FUZZ - маркер, вместо которого ffuf подставляет слова из словаря. В результатах увидите директории вроде /admin, /config, /backup - если они существуют.В gobuster аналогичная задача:
gobuster dir -u http://localhost -w /usr/share/wordlists/dirb/common.txt. Оба делают одно и то же - выбирайте, какой удобнее.На что смотреть в результатах: 200 - страница есть, 301/302 - перенаправление (часто на логин), 403 - доступ запрещён, но ресурс существует. 403 особенно интересен: иногда запрет обходится добавлением слэша, изменением регистра пути или заголовком
X-Forwarded-For: 127.0.0.1. На одном проекте мы так нашли забытую phpMyAdmin - она отдавала 403 на /phpmyadmin, но 200 на /phpmyadmin/.OWASP Top 10 на практике: поиск уязвимостей в веб-приложениях
OWASP Top 10 - список наиболее критичных категорий уязвимостей веб-приложений, обновляемый сообществом OWASP. Это не инструмент и не сканер - это фреймворк мышления. Когда тестируете приложение, мысленно проходите по категориям и проверяете каждую.Для первого практического опыта сосредоточьтесь на двух вещах, которые проще всего найти и понять: SQL-инъекция (категория A03:2021 - Injection) и отражённый XSS (там же, A03:2021).
SQL-инъекция: ваша первая найденная уязвимость
Открываем DVWA, выставляем уровень безопасности Low (DVWA Security → Low), переходим в раздел «SQL Injection». Поле «User ID» - вводим1, жмём Submit. Приложение показывает данные пользователя.Теперь вводим
1' OR '1'='1. Приложение уязвимо (на Low - гарантированно), и вы видите данные всех пользователей. Что произошло? Серверный код подставляет ввод напрямую в SQL-запрос. Вместо SELECT [I] FROM users WHERE id='1' сервер выполнил SELECT [/I] FROM users WHERE id='1' OR '1'='1' - условие всегда истинно, вернулись все записи.Зафиксируйте момент: вы только что нашли уязвимость. Это техника Exploit Public-Facing Application (T1190) через инъекцию в пользовательский ввод.
Идём дальше. Отправляем запрос в Burp Repeater (правый клик в HTTP history → Send to Repeater). Во вкладке Repeater можно менять параметр
id и мгновенно видеть ответ. Сначала определяем количество колонок: 1' ORDER BY 2-- - (работает), 1' ORDER BY 3-- - (ошибка) - значит, колонок две. Теперь пейлоад 1' UNION SELECT user, password FROM users-- -. Небольшое замечание: комментарий # тоже работает в MySQL, но при отправке через форму браузера символ # интерпретируется как фрагмент URL и не долетает до сервера - его нужно URL-кодировать как %23. Через Burp Repeater # работает без кодирования. В ответе получаете MD5-хеши паролей (например, 5f4dcc3b5aa765d61d8327deb882cf99 - это password).Подтверждение уязвимости через sqlmap
Ручная эксплуатация нужна для понимания механики, но на реальном проекте sqlmap экономит часы. Сохраняете запрос из Burp (правый клик → Save item → файлrequest.txt) и скармливаете sqlmap:
Bash:
sqlmap -r request.txt --dbs --batch
-r request.txt загружает запрос из файла, --dbs перечисляет доступные базы данных, --batch автоматически выбирает ответы по умолчанию. sqlmap сам определит тип инъекции, СУБД и вытянет данные.Момент, на котором я регулярно ловлю стажёров: sqlmap - инструмент подтверждения, а не замена ручной работы. Сначала находите потенциальную точку инъекции руками (или через Burp), потом подтверждаете автоматикой. Запускать sqlmap вслепую по всем параметрам - шумно, медленно и непрофессионально.
XSS: от alert до понимания угрозы
В DVWA переходим в «XSS (Reflected)». Вводим<script>alert(1)</script>. На уровне Low скрипт выполнится - всплывающее окно. Это отражённый XSS: введённый скрипт возвращается в ответе сервера и выполняется в браузере.Почему это опасно? Замените
alert(1) на document.cookie - увидите куки текущей сессии. В реальной атаке злоумышленник формирует ссылку с вредоносным скриптом и отправляет жертве. Клик - скрипт крадёт сессионные куки и отправляет на сервер атакующего. В терминах MITRE ATT&CK это техника JavaScript (T1059.007, Execution).XSS бывает трёх типов: отражённый (reflected), хранимый (stored) и DOM-based. Хранимый опаснее - скрипт сохраняется на сервере (например, в комментариях) и выполняется у каждого посетителя. В DVWA есть раздел «XSS (Stored)» - попробуйте найти его самостоятельно, используя тот же подход.
Инструменты для веб-пентеста: минимальный набор
Не нужно осваивать двадцать инструментов одновременно. Вот набор, который покрывает 90% задач на старте:| Инструмент | Задача | Лицензия |
|---|---|---|
| Burp Suite Community | Перехват и модификация HTTP-запросов | Бесплатно |
| Nmap | Сканирование портов и сервисов | Open source |
| ffuf | Перебор директорий и параметров | Open source |
| sqlmap | Автоматизация SQL-инъекций | Open source |
| OWASP ZAP | Автоматическое сканирование уязвимостей | Open source |
OWASP ZAP заслуживает отдельного слова. В отличие от Burp Suite, ZAP полностью бесплатен (включая автоматическое сканирование) и является официальным проектом OWASP. Для начала: запускаете ZAP, вводите URL целевого приложения в поле «URL to attack», жмёте «Attack». ZAP прогонит паук (crawling) и активное сканирование, после чего покажет список найденных уязвимостей с описанием и рекомендациями.
Разница между ручным тестированием и автоматическим сканированием - то, что должен усвоить начинающий пентестер. Сканеры находят «низко висящие фрукты»: стандартные паттерны XSS, простые SQL-инъекции, устаревшие библиотеки. Но они не понимают бизнес-логику. Уязвимость «можно изменить цену товара в корзине, отредактировав скрытый параметр» - ни один сканер не найдёт. Только человек с Burp Repeater.
Методика веб-пентеста: от хаоса к системе
Когда первая эйфория отalert(1) проходит, встаёт вопрос: как тестировать системно, а не хаотично тыкая пейлоады? Вот упрощённая методика из пяти шагов, которую я даю стажёрам.Шаг 1 - Разведка. Определите стек: веб-сервер, язык, фреймворк, CMS. Nmap для портов, расширение Wappalyzer для стека в браузере, ffuf для скрытых директорий.
Шаг 2 - Карта приложения. Пройдитесь по всем страницам как обычный пользователь. Заполняйте каждую форму, нажимайте каждую кнопку, просматривайте каждый URL. Burp автоматически запишет всё в Site map (Target → Site map). Отмечайте точки ввода: формы, параметры URL, куки, заголовки.
Шаг 3 - Автоматическое сканирование. OWASP ZAP или Burp Scanner (в Pro-версии) для обнаружения очевидных дыр. Результаты сканирования - отправная точка, не финальный отчёт.
Шаг 4 - Ручное тестирование. По каждой категории OWASP Top 10 проверяете точки ввода со второго шага. Инъекции - кавычки и спецсимволы. Аутентификация - подбор, сброс пароля. Контроль доступа - подмена ID в запросе, попытка залезть в чужие ресурсы.
Шаг 5 - Документирование. Каждую найденную уязвимость фиксируете: URL, параметр, пейлоад, скриншот, оценка критичности. Без документирования ваш пентест - просто развлечение.
Частые ошибки новичков в веб-пентесте
За время менторства я собрал коллекцию граблей, на которые наступают все. Разберу главные.Начинать с инструментов вместо основ. Если не понимаете, что такое HTTP-запрос, метод GET/POST и код состояния - ни один инструмент не поможет. Потратьте вечер на HTTP-протокол. Откройте DevTools (F12 → Network) и просто посмотрите, какие запросы уходят при загрузке любого сайта. Это отрезвляет.
Запускать сканеры без ручного анализа. sqlmap по всем параметрам, Nikto по всем хостам - шум без результата. Сначала поймите структуру приложения руками, найдите потенциально уязвимые точки, и только потом подтверждайте автоматикой.
Игнорировать уровни сложности. В DVWA уровни Low, Medium, High существуют не просто так. На Low понимаете механику. На Medium видите, какие фильтры появились, и учитесь их обходить. High - приближение к реальной жизни. Перепрыгивать - себе дороже.
Не вести конспекты. Через месяц вы не вспомните, какой пейлоад сработал на конкретной лабе. Заведите заметки в Obsidian, Notion или обычном текстовом файле. Записывайте: задача, инструмент, команда, результат, что нового узнал. До сих пор я веду такой файл - он уже разросся до нескольких мегабайт, и я регулярно в него заглядываю.
Тестировать без разрешения. Даже сканирование портов чужого сервера без согласия - нарушение. Практикуйтесь на DVWA, Juice Shop, HackTheBox, TryHackMe, PortSwigger Web Security Academy. Последний особенно хорош: подробная теория по каждой уязвимости и интерактивные лабы с пошаговыми решениями.
Куда двигаться дальше
Первая SQL-инъекция в DVWA - отправная точка, не финиш. Вот маршрут для тех, кто решил копать серьёзно:- Пройдите все модули DVWA на всех уровнях сложности. Это даст понимание базовых типов уязвимостей и механизмов защиты - от «нет фильтрации» до «почти как в проде».
- PortSwigger Web Security Academy - бесплатный ресурс от создателей Burp Suite. Десятки лабораторных по каждой категории: от базового XSS до HTTP Request Smuggling и Server-Side Template Injection.
- HackTheBox и TryHackMe - платформы с виртуальными машинами. TryHackMe лучше для старта (пошаговые руководства), HackTheBox - для тех, кто готов разбираться сам.
- Bug bounty - после нескольких месяцев практики на лабах попробуйте программы на HackerOne или Bugcrowd. Начинайте с тех, что принимают отчёты от новичков и имеют широкий скоуп.
1' OR '1'='1 - и посмотрите, что вернётся. Оттуда и пойдёт.
Последнее редактирование модератором: