
Лаборатория безопасности на основе Docker, демонстрирующая эксплуатацию и защиту Apache Struts2 S2-045 (CVE-2017-5638), включая уязвимые и пропатченные приложения с защитой WAF для практического обучения.
Лаборатория безопасности на основе Docker, демонстрирующая как эксплуатацию, так и защиту от уязвимости Apache Struts2 S2-045 (CVE-2017-5638). Лаборатория включает:
⚠️ Предупреждение безопасности: Эта лаборатория содержит работающие эксплойты и уязвимый код. Используйте только в изолированных средах. НЕ выставляйте в публичные сети.
┌─────────────────────────────────────────────────────────────┐
│ Host (127.0.0.1 only) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Simulator │───▶│ Nginx Proxy │ │
│ │ (curl-based) │ │ + WAF Rules │ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ┌───────┴────────┐ │
│ │ │ │
│ ┌───────▼──────┐ ┌───────▼──────┐ │
│ │ Defense App │ │ Vulnerable │ │
│ │ (Struts 6.3) │ │ App (2.3.31) │ │
│ │ Port: 8080 │ │ Port: 8081 │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ Exploit │───▶ Vulnerable App (8081) │
│ │ Container │ │
│ └─────────────────┘ │
│ │
│ Logs mounted to: ./logs/nginx/, ./logs/app/, │
│ ./logs/app-vulnerable/ │
└─────────────────────────────────────────────────────────────┘
| Контейнер | Назначение | Порт |
|---|---|---|
nginx | Обратный прокси с правилами WAF, ограничением скорости | 127.0.0.1:8080 |
app | Tomcat 9 + Struts 6.3.x (исправленный, лаборатория защиты) | Только внутренний |
app-vulnerable | Tomcat 9 + Struts 2.3.31 (уязвимый, для эксплуатации) | 127.0.0.1:8081 |
exploit | Контейнер для демонстрации эксплуатации | Н/Д |
simulator | Отправляет тестовые запросы (безвредные + подозрительные шаблоны) | Н/Д |
# Клонирование репозитория
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec
# Сборка всех контейнеров (при первом запуске может занять несколько минут)
docker compose build
# Запуск лаборатории защиты (nginx + исправленное приложение)
docker compose up -d nginx app
# Запуск уязвимого приложения (для демонстрации эксплуатации)
docker compose up -d app-vulnerable
# Проверка, что службы работают
docker compose ps
# Ожидание готовности служб (около 60 секунд)
sleep 60
# Проверка конечных точек здоровья
curl http://127.0.0.1:8080/struts-lab/health # Лаборатория защиты
curl http://127.0.0.1:8081/struts-lab/health # Уязвимое приложение
Ожидаемый результат:
"status":"healthy" и "strutsVersion":"6.3.0.2 (patched - not vulnerable to S2-045)""status":"healthy" и "strutsVersion":"2.3.31 (VULNERABLE to S2-045)"# Запуск контейнера симулятора (тестирует механизмы защиты)
docker-compose run --rm simulator
# Или запуск отдельных тестов вручную:
# Легитимная загрузка
curl -X POST -F "[email protected]" http://127.0.0.1:8080/struts-lab/upload
# Подозрительный Content-Type (будет заблокирован WAF)
curl -v -X POST \
-H "Content-Type: multipart/form-data; boundary=----SUSPICIOUS" \
http://127.0.0.1:8080/struts-lab/upload
# Запуск контейнера эксплойта (демонстрирует эксплуатацию S2-045)
docker-compose --profile exploit run --rm exploit
# Или прямое использование скрипта эксплойта на Python
python3 exploit/exploit.py http://127.0.0.1:8081/struts-lab 'whoami'
# Или использование bash-скрипта
./exploit/demo_exploit.sh
⚠️ Предупреждение: Уязвимое приложение намеренно эксплуатируемо. Запускайте только в изолированных средах.
# Журналы лаборатории защиты
tail -f logs/nginx/access.log # Журналы доступа Nginx
tail -f logs/nginx/error.log # Блокировки WAF
tail -f logs/app/struts-lab.log # Журналы приложения защиты
# Журналы уязвимого приложения
tail -f logs/app-vulnerable/struts-lab.log # Журналы уязвимого приложения
# Все журналы вместе
docker-compose logs -f
Легитимный запрос:
200INFOПодозрительный/некорректный запрос:
403 Forbidden или 400 Bad RequestУспешная эксплуатация:
Примеры журналов:
Блокировка подозрительного Content-Type Nginx (Лаборатория защиты):
[WAF] Blocked suspicious Content-Type pattern - Request ID: abc123
Журналирование метаданных запроса приложением (Лаборатория защиты):
[REQUEST] ID=abc123 Content-Type=multipart/form-data Method=POST URI=/upload
[UPLOAD] Processing file upload for request abc123
Успешная эксплуатация (Уязвимое приложение):
HTTP/1.1 200 OK
...
root
(Command output appears in response body)
| Функция | Уязвимое приложение (Порт 8081) | Лаборатория защиты (Порт 8080) |
|---|---|---|
| Версия Struts | 2.3.31 (уязвимая) | 6.3.0.2 (исправленная) |
| Защита WAF | ❌ Нет | ✅ Правила WAF Nginx |
| Ограничение скорости | ❌ Нет | ✅ 10 запросов/с |
| Лимиты размера запроса | ❌ Нет | ✅ 10 МБ тело, 8 КБ заголовки |
| Журналирование безопасности | ⚠️ Минимальное | ✅ Всестороннее |
| Внедрение OGNL | ✅ Эксплуатируемо | ❌ Заблокировано/Исправлено |
| Возможность RCE | ✅ Да | ❌ Нет |
| Назначение | Демонстрация эксплуатации | Тренировка защиты |
127.0.0.1 (нет внешнего доступа)0.0.0.0