Informe sobre Cross-Site Scripting (XSS)

Publicado el 13 de junio de 2025

Introducción

Cross-Site Scripting (XSS) es una vulnerabilidad muy conocida de ciberseguridad web que permite a los atacantes inyectar scripts maliciosos en páginas webs.

¿Qué es el Cross-Site Scripting?

XSS es una vulnerabilidad web que permite inyectar código JavaScript Malicioso en un sitio web verídico en un sitio confiable y que cuando un usuario visita la página comprometida, el código malicioso se ejecuta en su navegador y permite a los atacantes robar información, realizar acciones en nombre de usuario, etc.

Principales tipos de XSS

XSS Reflejado

Los datos que se inyectan por el atacante se reflejan en la respuesta HTTPS sin hacer nada en el servidor y generalmente se explota mediante enlaces maliciosos.

XSS Almacenado

El código malicioso se almacena en el servidor como por ejemplo una base de datos o un archivo y se ejecuta cuando el usuario accede a la página comprometida

XSS basado en DOM

Se explota manipulando el DOM del navegador sin que el servidor intervenga en la inyección del código

Explotación de vulnerabilidades XSS

Los que se puede conseguir explotando esta vulnerabilidad es:

  • Redirigir a usuarios a lugares maliciosos
  • Robar cookies de sesión y credenciales
  • Ejecutar keyloggers y ejecutar ataques de phising a los usuarios
  • Modificar la página web y engañar a los usuarios

Medidas de Prevención

Para evitar sufrir un ataque de inyección de código XSS, podemos implementar las siguiente medidas:

  • Validación: Filtrar y codificar los datos de entrada
  • Cabeceras HTTPS: Implementar cabeceras seguras en las conexiones .
  • Evitar inserción en DOM: Usar textContent en lugar de innerHTML
  • Política de seguridad de Contenido: Restringir los orígenes permitidos para la ejecución de scripts

Realización de Laboratorio

Reflected XSS into HTML context with nothing encoded

Para la resolución de este laboratorio, simplemente hay que introducir en la entrada de texto para la brusquedad, un simple script

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

image.png

Y si lo ejecutamos, vemos que nos dice el mensaje

image.png

Stored XSS into HTML context with nothing encoded

Para resolver este laboratorio, basta con introducir un comentario, y en la casilla del comentario, introducimos un Script, y en la casilla de Website, tenemos que poner la página donde se va a ejecutar el script

image.png

Nada más postear el comentario, nos da las gracias

image.png

Y si volvemos, ahora solo nos saldrá la alerta guardada

image.png

DOM XSS in document.write sink using source location.search

Para resolver este ejercicio, debemos de hacer click derecho encima del buscador, y darle a inspeccionar.

image.png

Y vemos que tenemos una imagen, que no vemos en la página

image.png

Entonces si introducimos lo siguiente en el buscador, se ejecutará una alerta con el script:

"><script>alert('federico0')</script>

Esto lo que hará es comentar el cierre real de la imagen e introducir un supuesto svg con la alerta

image.png

Y nos saldrá la alerta con las felicitaciones de haberlo completado

image.png

DOM XSS in innerHTML sink using source location.search

Para completar el laboratorio, debemos insertar una imagen y si da error el src que lo vamos a poner erroneo, ejecutará la alerta

<img src=1 onerror=alert('federico')>

image.png

Y vemos que se nos ejecuta el script

image.png

DOM XSS in jQuery anchor href attribute sink using location.search source

Para completar el laboratorio, necesitamos ir a un post y pulsar en Submit Feedback

image.png

Al entrar, vemos en la URL un path un poco extraño

image.png

Si probamos cambiar el returnPath por el siguiente, podemos ver como se ejecuta el script

returnPath=javascript:alert('federico')

image.png

Y si ahora le damos a back podemos ver como se nos ejecuta el script correctamente

image.png

image.png

DOM XSS in jQuery selector sink using a hashchange event

Para completar el laboratorio tenemos que ir pulsar en el boton para ir al exploit server

image.png

Esto parece un servidor para hacer una respuesta para una API. Así que pegamos lo siguiente en el cuerpo

<iframe src="https://0a300078038a5bd781d970880003007d.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>

image.png

Y le damos a View Exploit

image.png

Y ahora vemos como se nos ejecuta en bucle para poder imprimir el blog en PDF

image.png

Y si ahora le damos a Deliver Exploit to Victim , nos dará las felicitaciones

image.png

image.png

Reflected XSS into attribute with angle brackets HTML-encoded

Para resolver el problema, podemos buscar en el buscador, y acceder en el código fuente de la página

image.png

Y en el código fuente, podemos ver como lo que introducimos se queda en el value y es la ultima variable y no modifica nada al ejecutar un script

image.png

Así que podemos introducir un script, que al pasar el cursor por encima, saque una alerta

"onmouseover="alert('federico')

image.png

Y al ejecutarlo, vemos las felicitaciones

image.png

Stored XSS into anchor href attribute with double quotes HTML-encoded

Para completar esto, tenemos que ir a una publicación y escribir un comentario, y en la zona de Website, introducimos el siguiente script para ejecutar un script

javascript:alert('federico')

image.png

Y cuando veamos que se ha subido el comentario, tenemos que hacer click en el enlace del nombre

image.png

Al hacer click, se nos ejecutará el script que hemos hecho antes

image.png

Reflected XSS into a JavaScript string with angle brackets HTML encoded

Para resolver el ejercicio, debemos de hacer una búsqueda y abrir el código fuente

image.png

Si abrimos el código fuente, podemos ver como lo que introduzcamos en la búsquedad, se introduce en una variable de javascript, y se introduce en una imagen

image.png

Así que si ejecutamos lo siguiente en el buscador podemos ejecutar el script

'-alert('federico')-'

image.png

image.png

Extra - Stored XSS into onclick event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped

Para resolver este ejercicio, lo primero que tenemos que hacer es ir a un post y añadir un mensaje

image.png

Si entramos en el código fuente nada más ingresar el comentario, podemos ver como , al crearlo, en el enlace que tenemos donde website, podermos ver como tenemos una ejecución en javascript

image.png

Entonces si introducimos lo siguiente en website, podemos parsear este script para poder poder ejecutar lo que queramos

Lo que hacemos es añadir como si fuese una variable la alerta, pero tenemos que poner en ASCII las comillas que es &apos;

https://0a84008e03caf7d5827801cb00b500d8.web-security-academy.net?&apos;-alert(1)-&apos;

image.png

Ahora pulsamos en el enlace del nombre

image.png

Y se ejecuta el script

image.png

Comentarios

Cargando comentarios...

Escribe tu comentario: