Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2017-5638-Attack-and-Defense — Laboratorio de seguridad basado en Docker que demuestra la explotación y defensa de Apache Struts2 S2-045 (CVE-2017-5638), con aplicaciones vulnerables y parcheadas y protección WAF para formación práctica. | Kitploit
Herramientas/GitHubGitHub/acharaf06/cve-2017-5638-attack-and-defense
Herramientas DefensivasAnálisis de VulnerabilidadesExplotación de Aplicaciones WebEvasión de WAFPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubacharaf06/cve-2017-5638-attack-and-defense

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

CVE-2017-5638-Attack-and-Defense

Laboratorio de seguridad basado en Docker que demuestra la explotación y defensa de Apache Struts2 S2-045 (CVE-2017-5638), con aplicaciones vulnerables y parcheadas y protección WAF para formación práctica.

Ver Repositorio
15hace 8 mesesAún no revisado
Compartir

Laboratorio de Defensa y Explotación de Apache Struts2 S2-045

Un laboratorio de seguridad basado en Docker que demuestra tanto explotación como defensa contra la vulnerabilidad Apache Struts2 S2-045 (CVE-2017-5638). Este laboratorio incluye:

  1. Aplicación vulnerable: Struts 2.3.31 (vulnerable a S2-045) para demostración de explotación
  2. Laboratorio de defensa: Struts 6.3.x (parcheado) con protección WAF para entrenamiento defensivo

⚠️ Advertencia de seguridad: Este laboratorio contiene exploits funcionales y código vulnerable. Utilice solo en entornos aislados. NO exponga a redes públicas.

Architecture Overview

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/                  │
└─────────────────────────────────────────────────────────────┘

Components

ContenedorPropósitoPuerto
nginxProxy inverso con reglas WAF, limitación de velocidad127.0.0.1:8080
appTomcat 9 + Struts 6.3.x (parcheado, laboratorio de defensa)Solo interno
app-vulnerableTomcat 9 + Struts 2.3.31 (vulnerable, para explotación)127.0.0.1:8081
exploitContenedor de demostración de explotaciónN/A
simulatorEnvía solicitudes de prueba (patrones benignos + sospechosos)N/A

Getting Started

Prerequisites

  • Docker (versión 20.10 o posterior)
  • Docker Compose (versión 2.0 o posterior)
  • Python 3 (opcional, para ejecutar scripts de exploit directamente)
  • curl (opcional, para pruebas manuales)

Installation

1. Clonar el repositorio

root@kitploit:~
# Clone the repository
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec

2. Build and Run

root@kitploit:~
# Build all containers (this may take several minutes on first run)
docker compose build

# Start the defense lab (nginx + patched app)
docker compose up -d nginx app

# Start the vulnerable app (for exploitation demo)
docker compose up -d app-vulnerable

# Verify services are running
docker compose ps

# Wait for services to be healthy (about 60 seconds)
sleep 60

# Check health endpoints
curl http://127.0.0.1:8080/struts-lab/health  # Defense lab
curl http://127.0.0.1:8081/struts-lab/health   # Vulnerable app

Expected Output:

  • Laboratorio de defensa: respuesta JSON con "status":"healthy" y "strutsVersion":"6.3.0.2 (patched - not vulnerable to S2-045)"
  • Aplicación vulnerable: respuesta JSON con "status":"healthy" y "strutsVersion":"2.3.31 (VULNERABLE to S2-045)"

2. Pruebas del laboratorio de defensa

root@kitploit:~
# Run the simulator container (tests defense mechanisms)
docker-compose run --rm simulator

# Or run individual tests manually:
# Legitimate upload
curl -X POST -F "[email protected]" http://127.0.0.1:8080/struts-lab/upload

# Suspicious Content-Type (will be blocked by WAF)
curl -v -X POST \
  -H "Content-Type: multipart/form-data; boundary=----SUSPICIOUS" \
  http://127.0.0.1:8080/struts-lab/upload

3. Demostración de explotación

root@kitploit:~
# Run the exploit container (demonstrates S2-045 exploitation)
docker-compose --profile exploit run --rm exploit

# Or use the Python exploit script directly
python3 exploit/exploit.py http://127.0.0.1:8081/struts-lab 'whoami'

# Or use the bash script
./exploit/demo_exploit.sh

⚠️ Warning: The vulnerable application is intentionally exploitable. Only run in isolated environments.

4. Observar los registros

root@kitploit:~
# Defense lab logs
tail -f logs/nginx/access.log      # Nginx access logs
tail -f logs/nginx/error.log       # WAF blocks
tail -f logs/app/struts-lab.log    # Defense app logs

# Vulnerable app logs
tail -f logs/app-vulnerable/struts-lab.log  # Vulnerable app logs

# All logs combined
docker-compose logs -f

Qué observar

Laboratorio de defensa (Puerto 8080)

Solicitud legítima:

  • Registro de acceso de Nginx: respuesta 200
  • Registro de la aplicación: mensaje de procesamiento de carga a nivel INFO
  • La solicitud se completa correctamente

Solicitud sospechosa/malformada:

  • Registro de acceso de Nginx: 403 Forbidden o 400 Bad Request
  • Registro de error de Nginx: mensaje de regla WAF activada
  • Registro de la aplicación: puede mostrar error de análisis si la solicitud llega a la aplicación
  • La solicitud es bloqueada o sanitizada

Aplicación vulnerable (Puerto 8081)

Explotación exitosa:

  • HTTP 200 o 500 respuesta
  • Salida del comando visible en el cuerpo de la respuesta
  • Expresiones OGNL evaluadas
  • Comandos del sistema ejecutados

Ejemplos de registros:

Nginx bloqueando Content-Type sospechoso (Laboratorio de defensa):

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

Registro de metadatos de solicitud de la aplicación (Laboratorio de defensa):

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

Explotación exitosa (Aplicación vulnerable):

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

Comparación: Vulnerable vs Defensa

CaracterísticaAplicación vulnerable (Puerto 8081)Laboratorio de defensa (Puerto 8080)
Versión de Struts2.3.31 (vulnerable)6.3.0.2 (parcheado)
Protección WAF❌ Ninguna✅ Reglas WAF de Nginx
Límite de velocidad❌ Ninguno✅ 10 solicitudes/s
Límites de tamaño de solicitud❌ Ninguno✅ Cuerpo 10MB, encabezados 8KB
Registro de seguridad⚠️ Mínimo✅ Completo
Inyección OGNL✅ Explotable❌ Bloqueada/Parcheada
RCE Posible✅ Sí❌ No
Caso de usoDemostración de explotaciónEntrenamiento defensivo

Notas de seguridad

Aislamiento

  • Todos los servicios vinculados solo a 127.0.0.1 (sin acceso externo)
  • Red interna de Docker para comunicación entre contenedores
  • Sin exposición de puertos a 0.0.0.0
  • La aplicación vulnerable NUNCA debe exponerse a redes públicas

Capas de defensa (Laboratorio de defensa)

  1. Reglas WAF de Nginx: Bloquean patrones de Content-Type sospechosos antes de llegar a la aplicación
  2. Límite de velocidad: 10 solicitudes/segundo por IP
  3. Límites de tamaño de solicitud: Máximo cuerpo 10MB, máximo encabezados 8KB
  4. Struts parcheado: Utiliza Struts 6.3.x (no vulnerable a S2-045)
  5. Registro completo: Toda actividad sospechosa es registrada

Qué fue S2-045

S2-045 (CVE-2017-5638) fue una vulnerabilidad crítica en Apache Struts2 versiones 2.3.5 - 2.3.31 y 2.5 - 2.5.10 donde:

  • Encabezados Content-Type maliciosos podían inyectar expresiones OGNL
  • El analizador Jakarta Multipart evaluaba estas expresiones
  • Esto llevaba a Ejecución Remota de Código (RCE)

La aplicación vulnerable (puerto 8081) demuestra esta vulnerabilidad. El laboratorio de defensa (puerto 8080) muestra cómo protegerse contra ella.

Estructura de archivos

root@kitploit:~
.
├── docker-compose.yml          # Container orchestration
├── README.md                   # This file
├── EXPLOITATION_GUIDE.md      # Detailed exploitation guide
├── TECHNICAL_DETAILS.md        # Technical implementation details
├── GLOSSARY.md                 # Security terms glossary
├── nginx/
│   ├── nginx.conf              # Main nginx configuration
│   └── waf-rules.conf          # WAF rules for S2-045 patterns
├── app/                        # Defense lab (patched)
│   ├── Dockerfile              # Tomcat + Maven build
│   └── struts-app/
│       ├── pom.xml             # Maven project (Struts 6.3.x)
│       └── src/main/
│           ├── java/           # Action classes
│           ├── resources/      # Struts + Log4j config
│           └── webapp/         # JSP views + web.xml
├── app-vulnerable/             # Vulnerable app (for exploitation)
│   ├── Dockerfile              # Tomcat + Maven build
│   └── struts-app/
│       ├── pom.xml             # Maven project (Struts 2.3.31)
│       └── src/main/
│           ├── java/           # Action classes
│           ├── resources/      # Struts + Log4j config
│           └── webapp/         # JSP views + web.xml
├── exploit/                    # Exploitation tools
│   ├── Dockerfile              # Exploit container
│   ├── demo_exploit.sh         # Bash exploit script
│   └── exploit.py              # Python exploit script
├── simulator/
│   ├── Dockerfile              # Alpine + curl
│   └── simulate.sh             # Test script
└── logs/                       # Mounted log directory
    ├── nginx/
    ├── app/                    # Defense lab logs
    └── app-vulnerable/         # Vulnerable app logs

Limpieza

root@kitploit:~
# Stop all containers
docker compose down

# Remove volumes and logs
docker compose down -v
rm -rf logs/

# Full cleanup (including images)
docker compose down --rmi all -v

Configuración de desarrollo

Estructura del proyecto

El proyecto está organizado de la siguiente manera:

  • app/ - Aplicación del laboratorio de defensa (Struts 6.3.x, parcheado)
  • app-vulnerable/ - Aplicación vulnerable (Struts 2.3.31)
  • exploit/ - Herramientas y scripts de explotación
  • nginx/ - Configuración del proxy inverso Nginx con reglas WAF
  • simulator/ - Simulador de patrones de ataque
  • logs/ - Registros de la aplicación (gitignored)

Construcción de componentes individuales

root@kitploit:~
# Rebuild only the vulnerable app
docker compose build app-vulnerable
docker compose up -d app-vulnerable

# Rebuild only the defense app
docker compose build app
docker compose up -d app

# Rebuild exploit container
docker compose build exploit

Documentación

  • EXPLOITATION_GUIDE.md: Guía detallada sobre el mecanismo de la vulnerabilidad S2-045 y el procedimiento de explotación
  • TECHNICAL_DETAILS.md: Detalles de implementación técnica del laboratorio
  • GLOSSARY.md: Glosario de términos de seguridad utilizados en este laboratorio

Recursos educativos

  • Apache Struts Security Bulletins
  • CVE-2017-5638 Details
  • OWASP Injection Prevention
  • Metasploit S2-045 Module

⚠️ Advertencias importantes

  1. Aplicación vulnerable: La aplicación en el puerto 8081 es intencionalmente vulnerable. No la exponga a redes públicas.
  2. Exploits funcionales: Este laboratorio contiene código de exploit funcional. Úselo solo en entornos aislados.
  3. Propósito educativo: Este laboratorio es solo para educación en seguridad, investigación y pruebas de penetración autorizadas.
  4. Cumplimiento legal: Úselo solo en sistemas que posea o para los que tenga autorización explícita por escrito.

Descargo de responsabilidad: Este laboratorio es solo para fines educativos. Úselo responsablemente y solo en entornos controlados.

Descargar herramienta