Салют ,
Данная лабораторная работа посвящена динамическому анализу безопасности web‑приложений DAST с использованием OWASP ZAP. Вы развернёте уязвимое приложение в Docker, проведете ручное тестирование по инструкции для понимания принципа и логики работы, далее выполните автоматическое сканирование, проанализируете отчёт и опишете уязвимости как и каким образом они реализуются. Аналогично вы проанализируете риски ИБ и предложите меры защиты, внесете необходимые исправления.
Для сдачи данной работы также будет требоваться ответить на дополнительыне вопросы по описанным темам.
Структура репозитория лабораторной работы
lab08
├── dast
│ ├── convert_reports.py
│ ├── zap_scan.sh
│ └── zap-baseline.conf
├── docker-compose.yml
├── README.md
├── requirements.txt
└── vulnerable-app
├── app.py
├── Dockerfile
├── files
│ └── secret.txt
└── requirements.txt
Материал
- DAST Dynamic Application Security Testing обеспечивает тестирование «чёрного ящика», когда сканер не знает исходного кода и взаимодействует с приложением как внешний клиент:
- Отправляет
HTTP‑запросы - Анализирует ответы
- Пытается воспроизвести реальные атаки
XSS,SQLi, уязвимости в заголовках, слабую авторизацию и т.д.
- Отправляет
В отличие от
SAST/SCA, здесь обязательно нужно живое, запущенное приложение (стенд), к которому есть сетевой доступ и разрешить доступ сканеру Инструмент ведёт себя как автоматизированный атакующий: обходит страницы, подставляет полезные нагрузки payloads и фиксирует подозрительные ответы
OWASP ZAP
Особенности:
- Чёрный ящик: анализ идёт по внешнему интерфейсу HTTP/HTTPS
- Фокус на эксплуатацию: SQLi, XSS, LFI/ RFI, небезопасные заголовки, слабые cookies, открытые админки и т.д. Сканировать как простыми профилями baseline scan, так и агрессивными активными проверками
> - Автоматически обходить сайт `spider`/ `crawler` и находить новые эндпоинты (входные точки)
> - Выполнять пассивный анализ - заголовки, `cookies`, версии серверов, утечки данных и активные атаки `XSS`, `SQLi` и др.
- Формировать отчёты в форматах
HTML,JSON,XMLдля дальнейшего анализа и интеграции вCI/CD
Ремарка
Мы используем owasp/zap2docker-stable и CLI‑скрипт zap_scan.sh для сканирования по URL http://localhost:8080/ уязвимого приложения Flask. Скрипт запускает baseline‑скан, сохраняет отчёты и передаёт JSON на генерацию ODT/XLSX.
Задание
- 1. Разверните и подготовьте окружение для уязвимого приложения
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt && vulnerable-app/requirements.txt
- 2. Запустите уязвимое приложение
- 3. Проверьте доступность приложения
Вывод такой:
HTTP/1.1 200 OK
Server: xxxxx/xxxxx Python/xxxxx
Date: xxxxx, xxxxx xxxxx 2025 xxxxx GMT
Content-Type: text/html; charset=utf-8
Content-Length: 625
Set-Cookie: session=guest-session-id; Path=/
Connection: close
<h1>Vulnerable DAST Demo App</h1>
<p>Пример уязвимого приложения для лабораторной по DAST.</p>
<ul>
<li><a href="/echo?msg=Hello">Reflected XSS / echo</a></li>
<li><a href="/search?username=admin">SQL Injection / search</a></li>
<li><a href="/login">Небезопасный логин</a></li>
<li><a href="/profile">Профиль (зависит от cookie)</a></li>
<li><a href="/admin">«Админка» без нормальной авторизации</a></li>
<li><a href="/files/">Directory listing</a></li>
</ul>
- 4. Проведите ручное исследование уязвимостей и опишите почему такое происходит, каким образом реализуются уязвимости и дайте им определение
- 4.1.
/echo- проверить отражение параметраmsgвHTMLи использоватьpayloadвида<script>alert('XSS')</script>зафиксировав его поведение
- 4.2.
/search- проверить обычный запрос?username=adminи использовать строку?username=admin' OR '1'='1зафиксировав его поведение описав признак SQLi
- 4.3.
/login- войти подadminиuserпроверив логику на открытые пароли и простые SQL‑запросы - 4.4.
/profile- изменитьcookie roleнаadminчерезDevTools→Application→Cookiesи обновить/profile(возможно создатьcookie - 4.5.
/admin- проверить, что доступ запрещён безcookie role=adminи далее подделатьcookie, что «админка» открывается путем изменения черезDevTools. Подсказка: доступ завязан на значение cookie, без подписи/ токена/ серверной проверки. - 4.6.
/files/- просмотритеdirectory listingи откройте один из файлов убедившись, что оно выводится
- 5. Доработайте по пп 4 лабораторную работу развив их содержимое, которое может выводиться (мин 1 пример)
- 6. Поставьте
OWASP ZAPи стяните образ конкртеной версии для него
- 7. Задайте переменные окружения для работы скриптов
$ export ZAP_IMAGE=ghcr.io/zaproxy/zaproxy:stable
$ TARGET_URL="${TARGET_URL:-http://host.docker.internal:8080}"
- 8. Запустите скрипт автоматического сканирования DAST
OWASP ZAP
- 9. Изучите сгенерированные отчеты в
dast/reportsи опишите риски ИБ для них, без сценариев, так как ранее вы видели часть из их реализации - 10. Внесите исправления по данному отчету
DASTдляvulnerable-app/app.py - 11. Делайте все необходимые коммиты по шагам и отправляйте изменения в удалённый репозиторий
- 12. Подготовьте отчет
gist. - 14. Почистите кеш от
venvи остановите уязвимое приложение
Рекомендации
XSSнаecho— отражение входных данных без экранированияЗаменить прямую подстановку строки на безопасный рендер с автоматическим экранированием или ручной фильтрацией
SQL Injectionнаsearch— небезопасная конкатенация строки запросаПерейти на параметризованные запросы
sqliteи передача параметров отдельным аргументом, включая отказа от конкатенацииSQL‑строк с пользовательским вводом- Небезопасные
cookies(session,user,role) — безSecure,HttpOnly,SameSiteЗадать флаги
HttpOnly,Secure(еслиHTTPS),SameSite=Lax/ Strict - Отсутствие основных
security‑headers(X-Frame-Options,X-Content-Type-Options,Content-Security-Policyи т.д.) - Усилить авторизацию на
adminиз-за доступа по подделанному cookie Directory listingнаfilesОграничить список отдаваемых ресурсов, либо скрыть
directory listing, либо добавить проверки и фильтрацию путей.
Links
- Docker
- Flask Documentation
- odfpy – OpenDocument API for Python
- openpyxl – Excel files in Python
- Markdown
- Gist
- GitHub CLI
- OWASP ZAP
- OWASP Web Security Testing Guide
- OWASP Top 10 Web Application Security Risks
- ZAP Docker images
- ZAP Baseline Scan
- ZAP Automation Framework
Copyright © 2025 Elijah S Shmakov

