Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2017-5638-Attack-and-Defense — Лаборатория безопасности на основе Docker, демонстрирующая эксплуатацию и защиту Apache Struts2 S2-045 (CVE-2017-5638), включая уязвимые и пропатченные приложения с защитой WAF для практического обучения. | Kitploit
Инструменты/GitHubGitHub/acharaf06/cve-2017-5638-attack-and-defense
Оборонительные ИнструментыАнализ уязвимостейЭксплуатация веб-приложенийОбход WAFТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubacharaf06/cve-2017-5638-attack-and-defense

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →

CVE-2017-5638-Attack-and-Defense

Лаборатория безопасности на основе Docker, демонстрирующая эксплуатацию и защиту Apache Struts2 S2-045 (CVE-2017-5638), включая уязвимые и пропатченные приложения с защитой WAF для практического обучения.

Репозиторий
158 месяцев назадЕщё не проверено
Поделиться

Лаборатория защиты и эксплуатации Apache Struts2 S2-045

Лаборатория безопасности на основе Docker, демонстрирующая как эксплуатацию, так и защиту от уязвимости Apache Struts2 S2-045 (CVE-2017-5638). Лаборатория включает:

  1. Уязвимое приложение: Struts 2.3.31 (уязвимый к S2-045) для демонстрации эксплуатации
  2. Лаборатория защиты: Struts 6.3.x (исправленный) с защитой WAF для тренировки по защите

⚠️ Предупреждение безопасности: Эта лаборатория содержит работающие эксплойты и уязвимый код. Используйте только в изолированных средах. НЕ выставляйте в публичные сети.

Обзор архитектуры

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     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
appTomcat 9 + Struts 6.3.x (исправленный, лаборатория защиты)Только внутренний
app-vulnerableTomcat 9 + Struts 2.3.31 (уязвимый, для эксплуатации)127.0.0.1:8081
exploitКонтейнер для демонстрации эксплуатацииН/Д
simulatorОтправляет тестовые запросы (безвредные + подозрительные шаблоны)Н/Д

Начало работы

Предварительные требования

  • Docker (версия 20.10 или новее)
  • Docker Compose (версия 2.0 или новее)
  • Python 3 (опционально, для прямого запуска скриптов эксплойтов)
  • curl (опционально, для ручного тестирования)

Установка

1. Клонирование репозитория

root@kitploit:~
# Клонирование репозитория
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec

2. Сборка и запуск

root@kitploit:~
# Сборка всех контейнеров (при первом запуске может занять несколько минут)
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  # Уязвимое приложение

Ожидаемый результат:

  • Лаборатория защиты: JSON-ответ с "status":"healthy" и "strutsVersion":"6.3.0.2 (patched - not vulnerable to S2-045)"
  • Уязвимое приложение: JSON-ответ с "status":"healthy" и "strutsVersion":"2.3.31 (VULNERABLE to S2-045)"

2. Тестирование лаборатории защиты

root@kitploit:~
# Запуск контейнера симулятора (тестирует механизмы защиты)
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

3. Демонстрация эксплуатации

root@kitploit:~
# Запуск контейнера эксплойта (демонстрирует эксплуатацию 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

⚠️ Предупреждение: Уязвимое приложение намеренно эксплуатируемо. Запускайте только в изолированных средах.

4. Просмотр журналов

root@kitploit:~
# Журналы лаборатории защиты
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

Что наблюдать

Лаборатория защиты (Порт 8080)

Легитимный запрос:

  • Журнал доступа Nginx: ответ 200
  • Журнал приложения: сообщение об обработке загрузки уровня INFO
  • Запрос выполняется успешно

Подозрительный/некорректный запрос:

  • Журнал доступа Nginx: 403 Forbidden или 400 Bad Request
  • Журнал ошибок Nginx: сообщение о срабатывании правила WAF
  • Журнал приложения: может отображать ошибку парсинга, если запрос достиг приложения
  • Запрос блокируется или санируется

Уязвимое приложение (Порт 8081)

Успешная эксплуатация:

  • HTTP 200 или 500 ответ
  • Вывод команды виден в теле ответа
  • Выражения OGNL вычисляются
  • Системные команды выполняются

Примеры журналов:

Блокировка подозрительного Content-Type Nginx (Лаборатория защиты):

root@kitploit:~
[WAF] Blocked suspicious Content-Type pattern - Request ID: abc123

Журналирование метаданных запроса приложением (Лаборатория защиты):

root@kitploit:~
[REQUEST] ID=abc123 Content-Type=multipart/form-data Method=POST URI=/upload
[UPLOAD] Processing file upload for request abc123

Успешная эксплуатация (Уязвимое приложение):

root@kitploit:~
HTTP/1.1 200 OK
...
root
(Command output appears in response body)

Сравнение: Уязвимое приложение vs Лаборатория защиты

ФункцияУязвимое приложение (Порт 8081)Лаборатория защиты (Порт 8080)
Версия Struts2.3.31 (уязвимая)6.3.0.2 (исправленная)
Защита WAF❌ Нет✅ Правила WAF Nginx
Ограничение скорости❌ Нет✅ 10 запросов/с
Лимиты размера запроса❌ Нет✅ 10 МБ тело, 8 КБ заголовки
Журналирование безопасности⚠️ Минимальное✅ Всестороннее
Внедрение OGNL✅ Эксплуатируемо❌ Заблокировано/Исправлено
Возможность RCE✅ Да❌ Нет
НазначениеДемонстрация эксплуатацииТренировка защиты

Заметки по безопасности

Изоляция

  • Все службы привязаны только к 127.0.0.1 (нет внешнего доступа)
  • Внутренняя сеть Docker для связи контейнеров
  • Нет открытия портов на 0.0.0.0
  • Уязвимое приложение НИКОГДА не должно быть выставлено в публичные сети

Уровни защиты (Лаборатория защиты)

  1. Правила WAF Nginx: Блокировка подозрительных шаблонов Content-Type до достижения приложения
  2. Ограничение скорости: 10 запросов/секунду на IP
  3. Лимиты размера запроса: макс. тело 10 МБ, макс. заголовки 8 КБ
  4. Исправленный Struts: Используется Struts 6.3.x (не уязвим к S2-045)
  5. Всестороннее журналирование: Вся подозрительная активность регистрируется

Что такое S2-045

S2-045 (CVE-2017-5638) — критическая уязвимость в Apache Struts2 версий 2.3.5 - 2.3.31 и 2.5 - 2.5.10, при которой:

  • Вредоносные заголовки Content-Type могли внедрять выражения OGNL
  • Парсер Jakarta Multipart вычислял эти выражения
  • Это приводило к удалённому выполнению кода (RCE)

Уязвимое приложение (порт 8081) демонстрирует эту уязвимость. Лаборатория защиты (порт 8080) показывает, как защититься от неё.

Структура файлов

root@kitploit:~
.
├── docker-compose.yml          # Оркестрация контейнеров
├── README.md                   # Этот файл
├── EXPLOITATION_GUIDE.md      # Подробное руководство по эксплуатации
├── TECHNICAL_DETAILS.md        # Технические детали реализации
├── GLOSSARY.md                 # Глоссарий терминов безопасности
├── nginx/
│   ├── nginx.conf              # Основная конфигурация nginx
│   └── waf-rules.conf          # Правила WAF для шаблонов S2-045
├── app/                        # Лаборатория защиты (исправленная)
│   ├── Dockerfile              # Сборка Tomcat + Maven
│   └── struts-app/
│       ├── pom.xml             # Проект Maven (Struts 6.3.x)
│       └── src/main/
│           ├── java/           # Классы действий
│           ├── resources/      # Конфигурация Struts + Log4j
│           └── webapp/         # Представления JSP + web.xml
├── app-vulnerable/             # Уязвимое приложение (для эксплуатации)
│   ├── Dockerfile              # Сборка Tomcat + Maven
│   └── struts-app/
│       ├── pom.xml             # Проект Maven (Struts 2.3.31)
│       └── src/main/
│           ├── java/           # Классы действий
│           ├── resources/      # Конфигурация Struts + Log4j
│           └── webapp/         # Представления JSP + web.xml
├── exploit/                    # Инструменты эксплуатации
│   ├── Dockerfile              # Контейнер эксплойта
│   ├── demo_exploit.sh         # Bash-скрипт эксплойта
│   └── exploit.py              # Python-скрипт эксплойта
├── simulator/
│   ├── Dockerfile              # Alpine + curl
│   └── simulate.sh             # Тестовый скрипт
└── logs/                       # Подключённая директория журналов
    ├── nginx/
    ├── app/                    # Журналы лаборатории защиты
    └── app-vulnerable/         # Журналы уязвимого приложения

Очистка

root@kitploit:~
# Остановка всех контейнеров
docker compose down

# Удаление томов и журналов
docker compose down -v
rm -rf logs/

# Полная очистка (включая образы)
docker compose down --rmi all -v

Настройка разработки

Структура проекта

Проект организован следующим образом:

  • app/ - Приложение лаборатории защиты (Struts 6.3.x, исправленное)
  • app-vulnerable/ - Уязвимое приложение (Struts 2.3.31)
  • exploit/ - Инструменты и скрипты эксплуатации
  • nginx/ - Конфигурация обратного прокси Nginx с правилами WAF
  • simulator/ - Симулятор шаблонов атак
  • logs/ - Журналы приложений (игнорируется git)

Сборка отдельных компонентов

root@kitploit:~
# Пересборка только уязвимого приложения
docker compose build app-vulnerable
docker compose up -d app-vulnerable

# Пересборка только приложения защиты
docker compose build app
docker compose up -d app

# Пересборка контейнера эксплойта
docker compose build exploit

Документация

  • EXPLOITATION_GUIDE.md: Подробное руководство по механизму уязвимости S2-045 и процедуре эксплуатации
  • TECHNICAL_DETAILS.md: Технические детали реализации лаборатории
  • GLOSSARY.md: Глоссарий терминов безопасности, используемых в этой лаборатории

Обучающие ресурсы

  • Бюллетени безопасности Apache Struts
  • Детали CVE-2017-5638
  • Предотвращение внедрения OWASP
  • Модуль Metasploit S2-045

⚠️ Важные предупреждения

  1. Уязвимое приложение: Приложение на порту 8081 намеренно уязвимо. НЕ выставляйте в публичные сети.
  2. Работающие эксплойты: Эта лаборатория содержит рабочий код эксплойтов. Используйте только в изолированных средах.
  3. Образовательная цель: Эта лаборатория предназначена только для обучения безопасности, исследований и авторизованного тестирования на проникновение.
  4. Соблюдение законодательства: Используйте только в системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.

Отказ от ответственности: Эта лаборатория предназначена только для образовательных целей. Используйте ответственно и только в контролируемых средах.

Скачать инструмент