# Juice Shop — локальный демонстрационный стенд

Тот же стенд, что использовался на занятии (модуль «Инструменты», локальная SQL-инъекция). Запускайте из Windows PowerShell в корне репозитория с материалами курса:

```powershell
& .\pentest\lab\preflight-juice-shop-lab.ps1
& .\pentest\lab\start-juice-shop-lab.ps1
# Только после PREFLIGHT OK: http://127.0.0.1:3000/
& .\pentest\lab\stop-juice-shop-lab.ps1
# Обязательный результат: CLEANUP OK
```

Каноническая конфигурация —
[`juice-shop-compose.yml`](../lab/juice-shop-compose.yml). Preflight требует
Docker Engine 28 или новее, Docker Compose v2 с поддержкой `config`, `--wait` и
`--pull`, а также два заранее загруженных образа по точным digest. Образ
приложения закреплён как
`bkimminich/juice-shop@sha256:cd58d79c5cb4d82f22fbaf616f9ff43bbd04ba630cd6b448a9ed99cf652fcebf`;
автоматическая загрузка запрещена через `pull_policy: never` и `--pull never`.

Juice Shop не публикует host-порт напрямую. Минимальный proxy открывает только
`127.0.0.1:3000`, а приложение находится во внутренней сети без egress.
Stop-wrapper до удаления проверяет Compose project и собственную метку каждого
контейнера и сети. При несовпадении он останавливается и не удаляет объект.

Не сканируйте 8080/8081/8090, локальную сеть или внешние адреса. Пароли, токены и реальные данные в демонстрации не используются.

## Задание

1. Открыть `http://127.0.0.1:3000/`.
2. `Account → Login`; один обычный неуспешный вход как baseline.
3. В поле email: `' OR true--`, пароль — любая непустая учебная строка.
4. После смены контекста на administrator — остановиться: не выгружать данные, не копировать токен, не выполнять persistence.
5. Разбор: CWE-89, OWASP A05:2025 Injection; серверная параметризация запроса и авторизация как исправление.
