Перейти к содержимому
New

DeepSeek V4.1 Flash free for 7 days: 10M tokens a day after a top-up of $10 or more. Until Nov 30.

How it works

OWASP Juice Shop в Docker: локальная лаборатория для практики

Запустите OWASP Juice Shop в контейнере Docker, привязанном к вашей машине, убедитесь, что он отвечает, и корректно остановите его.

Начальный4 мин чтенияАвтор: NotHoly

OWASP Juice Shop — намеренно уязвимое веб-приложение. Его можно запустить в контейнере Docker на своём компьютере, открыть в браузере по адресу http://127.0.0.1:3000 и практиковаться в веб-безопасности, не затрагивая чужие системы. По словам проекта, в нём есть уязвимости из всего OWASP Top Ten и другие, найденные в реальных приложениях. Ниже команды, что проверять после каждой, как сохранить порт закрытым для других и как остановить лабораторию.

Что понадобится

  • Компьютер, которым вы владеете или который администрируете, с разрешением запускать на нём Docker.
  • Docker Engine или Docker Desktop. Установите его по официальной документации Docker для своей операционной системы.
  • Браузер с инструментами разработчика. Они есть в Chrome, Firefox и Edge.
  • Место на диске и память для одного контейнера. Размер образа зависит от выбранного тега, поэтому сначала посмотрите его страницу на Docker Hub.

В Juice Shop уязвимости заложены намеренно. Держите его на машине и в сети, которые контролируете, и никогда не открывайте в интернет.

1. Проверьте, что Docker работает

Выполните в терминале эти две команды:

bash
docker --version
docker info

Первая команда печатает версию Docker CLI. Вторая обращается к движку Docker и печатает его конфигурацию. Если docker info сообщает, что не может подключиться к демону, запустите Docker Desktop или службу Docker и повторите команду. Точный текст ошибки зависит от платформы, поэтому, если исправление неочевидно, следуйте документации Docker по установке.

2. Запустите лабораторию только на loopback

В документации проекта образ называется bkimminich/juice-shop. В README проекта он запускается без тега, поэтому скачивается latest. Если нужна воспроизводимая лаборатория, выберите тег релиза на странице Docker Hub и допишите его к имени образа (bkimminich/juice-shop:<tag>), чтобы знать, какую версию вы тестируете.

bash
docker run --rm --name juice-shop-lab \
  -p 127.0.0.1:3000:3000 \
  bkimminich/juice-shop

Флаг -p публикует порт контейнера на хосте. Значение 127.0.0.1:3000:3000 состоит из трёх частей: адрес хоста, порт хоста и порт контейнера. В справочнике Docker по публикации портов сказано, что маппинг без адреса может слушать на всех интерфейсах хоста. Если поставить первым 127.0.0.1, лаборатория будет доступна только с вашей машины.

Флаг --rm удаляет контейнер, когда тот останавливается. Команда работает на переднем плане, поэтому терминал печатает логи, пока вы её не остановите. При первом запуске скачивается образ, и это может занять время.

Откройте http://127.0.0.1:3000 в браузере на той же машине. Должна появиться главная страница Juice Shop. Если она не загружается, прочитайте ошибки в терминале, затем выполните docker ps во втором терминале и убедитесь, что контейнер работает, а маппинг портов правильный. VPN-клиенты, прокси и сети виртуальных машин могут менять поведение локального трафика, так что проверьте и их, прежде чем менять флаги.

Не меняйте 127.0.0.1 на 0.0.0.0, чтобы страница загрузилась. Такая настройка открывает лабораторию другим устройствам в вашей сети.

3. Посмотрите на одну безобидную загрузку страницы

Прежде чем браться за челленджи, посмотрите, как общаются браузер и сервер. Откройте инструменты разработчика, перейдите на вкладку Network и перезагрузите страницу. Выберите один запрос и запишите:

  • метод запроса, например GET;
  • код статуса ответа;
  • один заголовок ответа, например Content-Type;
  • разницу между HTML-документом и файлом JavaScript.

Ту же информацию можно получить из терминала:

bash
curl -I http://127.0.0.1:3000

В Windows PowerShell 5.1 curl — это псевдоним другой команды, поэтому вводите curl.exe.

Опция -I отправляет запрос HEAD и печатает только заголовки ответа. RFC 9110 определяет методы, коды статуса и поля заголовков, на которые вы смотрите. Вот первые строки того, что вернул образ без тега в одном из запусков (2026-11-08); другие релизы могут отличаться:

text
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=UTF-8

Запишите, что возвращает ваш сервер, и сравните.

В документации проекта описаны учебные челленджи и подсказки к ним. Прочитайте эти материалы, прежде чем пробовать эксплойт, и направляйте все тесты только на 127.0.0.1. Если сначала разобраться в цикле запроса и ответа, позже будет проще оценивать результаты сканеров, потому что вы увидите трафик, который эти инструменты отправляют и получают.

4. Остановите и удалите лабораторию

Если контейнер работает на переднем плане, нажмите Ctrl+C в его терминале. Поскольку вы указали --rm, Docker удалит контейнер после остановки.

Если этот терминал потерян, остановите контейнер из другого:

bash
docker stop juice-shop-lab

Docker отправляет сигнал остановки и ждёт завершения контейнера. Убедитесь, что лаборатории больше нет:

bash
docker ps

Если имени контейнера в списке нет, лаборатория остановлена. Закрытие вкладки браузера контейнер не останавливает, поэтому каждый раз проверяйте docker ps.

Частые проблемы

Если порт уже занят, docker run завершается ошибкой Bind for 127.0.0.1:3000 failed: port is already allocated. Выберите другой порт хоста, например -p 127.0.0.1:3001:3000, и откройте http://127.0.0.1:3001. Часть 127.0.0.1 оставьте.

Если контейнер сразу завершается, прочитайте логи в терминале. Ищите первую строку с ошибкой, а не последнюю.

Если первый запуск идёт долго, значит Docker скачивает образ и его слои. Следующие запуски быстрее, потому что Docker хранит образ локально.

Где здесь языковая модель

Языковая модель может объяснить код статуса или помочь упорядочить заметки, и NotHoly — одно из мест, где её можно запустить. Она может и ошибиться в том, что значит ответ, и она не заменяет письменное разрешение и ручную проверку. Вставляйте только вывод из своей лаборатории и никогда не вставляйте сессионные куки, токены или данные реальной цели.

Пишите заметки по тому, что наблюдали сами, а затем сравнивайте их с материалами ниже.

Источники

Источники

  1. OWASP Juice Shop project
  2. OWASP Juice Shop documentation
  3. Docker port publishing
  4. docker container run reference
  5. docker container stop reference
  6. RFC 9110, HTTP Semantics
  7. OWASP Top 10

Ещё по теме: Хакерские лабы

Хакерские лабы

Как написать хороший отчёт о пентесте

Структура отчёта о пентесте и одна находка, которую сможет воспроизвести другой человек: улики, импакт, вектор CVSS v4.0 и исправление.

Средний7 мин чтения