DOM XSS in document.write sink using source location.search inside a select element – PortSwigger Write Up
En este post vamos a estar resolviendo el laboratorio de PortSwigger: “DOM XSS in document.write sink using source location.search inside a select element.”
En este caso, para resolver el reto tenemos que escaparnos del elemento “select” y llamar a la función alert
.
Lo primero de todo es acceder al laboratorio:
Una vez hemos accedido, podemos ver varios productos. Vamos a entrar en uno cualquiera:
Cuando entramos, podemos observar una función para comprobar el stock en las distintas ciudades:
Si observamos el código fuente de la web, podemos encontrar el siguiente código:
Analizando un poco el script, básicamente se entiende que además de las tres ciudades por defecto para comprobar el stock, se le puede agregar una más a través de la variable storeId
de la URL. Por lo que podemos probar a añadir esa variable y un valor cualquiera:
Una vez accedemos a la web de nuevo pero con la variable storeId
, si nos fijamos en las ciudades:
Podemos ver como se ha agregado una más, en concreto una con el nombre del valor que le hemos pasado a la variable.
Si nos vamos de nuevo al código fuente, podemos observar como este parámetro se implementa:
Por lo que, observando esto, podemos intentar poner un valor que ocasione que nos escapemos del propio elemento options
, y ejecute un alert
:
Al acceder a la web con este valor en la variable:
Se nos ejecuta el alert
. En el código fuente, podemos observar lo siguiente:
Y de esta forma, conseguimos resolver el laboratorio:
¡Un saludo y espero que os sirva de apoyo!