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!