En este post vamos a estar resolviendo el laboratorio: “Reflected XSS into attribute with angle brackets HTML-encoded”.

Pantalla de inicio del laboratorio Reflected XSS into a JavaScript string

En este caso, para resolver el reto tenemos que inyectar un payload que escape del string donde se encuentra y llame a la función alert.

Lo primero de todo es acceder al laboratorio:

Página principal del laboratorio con barra de búsqueda

Una vez accedemos, nos encontramos ante una barra de búsqueda, por lo que vamos a usarla buscando una palabra aleatoria:

Formulario de búsqueda con término de prueba

Cuando hacemos la búsqueda, podemos observar como la palabra que hemos buscado, se encuentra, entre otros sitios en la siguiente parte del código fuente

Código fuente mostrando término de búsqueda dentro de un string JavaScript

Como podemos observar, es un string. Puedes pensar, ok, cierro la variable, pongo un alert y listo, una cosa así:

  • var searchTerms= ' alert('XSS') '

Pero esto no es válido, ya que JavaScript no permite espacios en una variable, por esa misma razón para que toda la cadena se tome como parte de la variable, y aun así, el alert se ejecute, se concatena usando un guion. En la documentación de StackOverflow puedes ver una explicación más detallada sobre el tratamiento de guiones en JavaScript.

Dicho esto, colocamos un payload como:

  • ' '-alert('XSS')-' '

Payload XSS inyectado en el campo de búsqueda

Y cuando le demos a buscar:

Ejecución exitosa del alert escapando del string JavaScript

Se habrá ejecutado el alert. En el código fuente, se verá de la siguiente forma:

Código fuente mostrando payload inyectado exitosamente

Con esto, completamos el laboratorio:

Confirmación final de éxito del laboratorio