DOM XSS in document.write sink using source location.search inside a select element
Laboratorio de Portswigger sobre XSS
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio contiene una vulnerabilidad de XSS basado en DOM en la funcionalidad de verificación de stock. Utiliza la función document.write de JavaScript, que escribe datos en la página. La función document.write se llama con datos de location.search, los cuales podemos controlar mediante la URL del sitio web. Los datos están dentro de un elemento select. Para resolver este laboratorio, debemos realizar un ataque de cross-site scripting que escape del elemento select y llame a la función alert
Guía de XSS
Antes de completar este laboratorio es recomendable leerse esta guía de XSS https://justice-reaper.github.io/posts/XSS-Guide/
Resolución
Al acceder a la web nos sale esto
Si pulsamos sobre View details podemos ver la descripción del post
Si vemos el código fuente encontramos esta función
Si pulsamos sobre Check stock y capturamos la petición con Burpsuite vemos el parámetro storeId
Si accedemos a https://0a9500b4046690c38237c075004a0082.web-security-academy.net/product?productId=1&storeId="> </select><img src=test onerror=alert(0)> y añadimos el parámetro storeId con este payload "> </select><img src=test onerror=alert(0)> obtenemos un XSS. Esto se debe a que hemos escapado de document.write, el texto después de escapar, debe lucir como document.write('<select name=""> </select><img src=test onerror=alert(0)> ">');. Es importante que document.write tuviera las comillas simples ', de no ser así, no se podría haber ejecutado de esta forma





