Stored DOM XSS – PortSwigger Write Up
En este post vamos a estar resolviendo el laboratorio de PortSwigger: “Stored DOM XSS.”
En este caso, el enunciado nos dice que existe una vulnerabilidad de XSS del tipo DOM almacenado en la funcionalidad de comentario del blog. Para resolver el laboratorio debemos de explotar la vulnerabilidad y ejecutar la función alert
.
Dicho esto, lo primero de todo es acceder al laboratorio:
Una vez accedidos, podemos observar como hay distintos artículos, en este caso, vamos a ver el primero:
Al acceder a un artículo, podemos observar como hay una zona de comentarios:
En este caso, simplemente vamos a llenarla con datos random y a publicar un comentario:
Una vez publicado, volvemos al artículo para ver nuestro comentario:
Sin problemas se ha publicado.
Si investigamos un poco el código fuente y las distintas dependencias (archivos JS), podemos encontrar el siguiente archivo de JavaScript, llamado loadComments.js
:
El archivo, entre otras cosas, posee una función que reemplaza los simbolos >
y <
, HTML encodeandolos cuando se carga los comentarios.
Aquí es donde está el fallo, está usando el método replace
para la sustitución. Este método únicamente reemplaza la primera ocurrencia que encuentra, por ejemplo, si tengo la palabra patata y utilizo la función replace
para sustituir las ‘a’
por una ‘e’
, el resultado de implementar este método en la palabra patata dará como resultado: petata
.
Por lo que, teniendo en cuenta este funcionamiento, podemos crear un payload típico de XSS, pero colocando al principio de este <> para que sean los que el script sustituya y no los símbolos usados en el código malicioso:
De esta manera, al publicar el comentario y volver al post:
Conseguimos ejecutar el código javascript que habiamos puesto, en este caso, el alert
.
De esta forma, conseguimos resolver el laboratorio:
¡Un saludo y espero que os sirva de apoyo!