РАЗБОР
Статья
Домашняя лаборатория для веб-пентеста на Docker
Режим чтения
[ обложка статьи ]
Полгода назад я помогал знакомому поставить DVWA - он убил два дня на ручную настройку PHP, MySQL и Apache, а потом случайно снёс конфиг и начал заново. Один файл
docker-compose.yml решает эту задачу за три минуты: поднимает DVWA, OWASP Juice Shop и crAPI в изолированных контейнерах без возни с зависимостями. Ниже - готовый стенд, который копируется и запускается одной командой.Уязвимые веб-приложения для практики: что внутри стенда
Русскоязычные гайды по домашней лаборатории для веб-пентеста обычно останавливаются на DVWA или Metasploitable 2. Этого мало: одно приложение покрывает один класс задач. Связка из трёх штук закрывает три пласта веб-пентеста, которые реально встречаются на проектах.DVWA (Damn Vulnerable Web Application) - PHP/MySQL-приложение с классическими уязвимостями: SQL-инъекции, XSS, command injection, загрузка файлов без валидации. Всё это входит в категорию A03:2021 Injection по классификации OWASP. Три уровня сложности (Low, Medium, High) на каждую уязвимость - ставите Low, вводите
' OR 1=1 -- в поле SQL Injection и видите результат. Переключаете на Medium - тот же payload не работает, и надо разобраться почему. Исходный код фильтрации доступен прямо в интерфейсе - удобно, не нужно лезть в контейнер.OWASP Juice Shop - современный интернет-магазин на Node.js и Angular со 100+ задачами разной сложности. По данным OWASP, приложение покрывает уязвимости из OWASP Top 10, OWASP API Security Top 10 и MITRE CWE. Помимо инъекций здесь есть Broken Access Control (A01:2021), Identification and Authentication Failures (A07:2021), Security Misconfiguration (A05:2021). Встроенный scoreboard отслеживает прогресс - его ещё нужно найти, и это одна из первых задач. (Подсказка: ищите не в меню.)
crAPI (Completely Ridiculous API) - уязвимое REST API для тренировки атак на бэкенд. Красивого фронтенда нет - работа идёт через Burp Suite, Postman или
curl. Уязвимости выстроены вокруг OWASP API Security Top 10: BOLA (обращение к чужим объектам через подмену ID в запросе), сломанная аутентификация, манипуляции с JWT-токенами. API-тестирование сейчас - часть каждого второго пентест-проекта, так что навык не академический.Смысл связки: DVWA учит базовым уязвимостям на понятном PHP-коде, Juice Shop даёт CTF-опыт на современном стеке, crAPI - чистый API-пентест без фронтенда. Три приложения покрывают примерно 80% того, что встречается на реальном веб-пентесте.
Docker-compose для пентеста: один файл - три контейнера
Что нужно: любой ноутбук или ПК с 8 ГБ RAM и 10 ГБ свободного места. Windows, macOS, GNU/Linux - без разницы. Три контейнера в сумме съедают 2-3 ГБ оперативки. Виртуальные машины, VirtualBox и отдельные ISO-образы не нужны - Docker изолирует приложения сам.
Установите Docker по инструкции с docs.docker.com/engine/install/ и проверьте командой
docker --version. После этого создайте файл docker-compose.yml в любой папке:
YAML:
services:
dvwa:
image: vulnerables/web-dvwa
ports: ["127.0.0.1:8081:80"]
juice-shop:
image: bkimminich/juice-shop
ports: ["127.0.0.1:3000:3000"]
crapi:
image: crapi/crapi
ports: ["127.0.0.1:8888:8025", "127.0.0.1:8889:8443"]
127.0.0.1 перед портом - обязательна. Без неё контейнеры будут доступны из локальной сети и потенциально из интернета. С 127.0.0.1 всё работает только на вашей машине. Уязвимые приложения не должны быть видны никому кроме вас - это базовая гигиена, а не паранойя.Запуск из той же папки:
Bash:
docker compose up -d
docker ps
docker ps покажет три работающих контейнера. Для остановки: docker compose down. Для полной очистки с удалением данных: docker compose down -v.Первые шаги: DVWA, Juice Shop, crAPI
Начните с задач на одну звезду: XSS через поле поиска, обход авторизации, утечка данных в HTTP-ответах. Juice Shop уведомляет о решении зелёным баннером при каждой успешной эксплуатации. Приятно, когда приложение само говорит "да, ты меня сломал".
crAPI: уязвимое API и атака BOLA
Откройтеhttps://localhost:8889 (приложение) и http://localhost:8888 (встроенный почтовый сервер). Зарегистрируйте аккаунт - письмо с подтверждением придёт не на реальную почту, а на встроенный сервер.После логина найдите эндпоинт, который отдаёт данные по ID (заказы, профили). Подставьте чужой ID в запросе через Burp Suite или
curl - если получите данные другого пользователя, это BOLA (Broken Object Level Authorization), ключевая уязвимость из OWASP API Security Top 10. На реальных проектах я такое встречаю регулярно - кто-то забывает проверить, что запрашиваемый объект принадлежит текущему пользователю.Типичные ошибки при запуске тренировочных CTF-стендов
Порт занят. Ошибкаbind: address already in use - конфликт. Проверяем: lsof -i :8081 на GNU/Linux, macOS или netstat -ano | findstr :8081 на Windows. Либо останавливаете конфликтующий процесс, либо меняете порт в docker-compose.yml - например, 127.0.0.1:9081:80.crAPI не стартует. Самый тяжёлый контейнер из трёх. При 8 ГБ RAM и открытом браузере с десятком вкладок памяти может не хватить. Закройте лишнее или запустите crAPI отдельно:
docker compose up -d crapi.DVWA показывает "Access denied". Жмите "Create / Reset Database" на странице Setup. Без этого шага база пуста - приложение не пустит дальше логина. Каждый второй, кого я видел с этой проблемой, просто пропускал эту кнопку.
Страница не открывается после запуска. Juice Shop и crAPI стартуют медленнее DVWA - подождите 30–60 секунд. Если в
docker ps статус Up, а страница не грузится - смотрите логи: docker logs juice-shop.Прокси и дальнейшее развитие стенда
Прокси-инструмент - обязательное дополнение к лаборатории для пентеста API. Burp Suite Community Edition (бесплатная версия) или Caido перехватывают и модифицируют HTTP-запросы между браузером и приложением. Настройте прокси на127.0.0.1:8080 в Firefox через Settings -> Network Settings -> Manual proxy, добавьте целевые адреса приложений в scope - и каждый запрос пойдёт через перехватчик. Именно так работают пентестеры на реальных проектах - без прокси вы половину уязвимостей просто не увидите.Сканирование портов контейнеров через
nmap -sV 127.0.0.1 маппится на технику Network Service Discovery (T1046, Discovery по MITRE ATT&CK). SQL-инъекция в DVWA - на Exploit Public-Facing Application (T1190, Initial Access). Каждая решённая задача в стенде - тренировка навыка, который применяется в реальном пентесте, только в легальной среде.Этот стенд - штука, к которой я возвращаюсь каждый раз, когда нужно проверить новый инструмент или показать кому-то конкретную уязвимость вживую. Главная ошибка на старте - бесконечно читать теорию про OWASP Top 10 вместо того, чтобы открыть DVWA и руками вбить первый payload. Три контейнера, один файл, одна команда - рабочий полигон готов. Дальше вопрос не в инфраструктуре, а в количестве решённых задач на этой неделе. DVWA на уровне Low - за вечер. Medium и High потребуют понимания фильтрации. Juice Shop на 4-6 звёзд - SSRF, XXE, prototype pollution - это уже уровень реальных багбаунти-отчётов. Если хочется не тыкаться в задачи наугад, а разобраться от фундамента - IB Basics на codeby.academy для тех, кому мало решать задачи без понимания, зачем это всё.
AI-выжимка
сгенерировано ИИ
Тезисы статьи скоро
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Поиск в обсуждении
Карта ветки
Продолжить чтение
Следующий разбор
Автоматизация пентест-лаборатории: Vagrant + Ansible
Комментарии
0