
Descripción
This lab contains a DOM-based cross-site scripting vulnerability on the home page. It uses jQuery’s $()
selector function to auto-scroll to a given post, whose title is passed via the location.hash
property.
To solve the lab, deliver an exploit to the victim that calls the print()
function in their browser.
DOM XSS in jQuery selector sink using a hashchange event writeup
Al entrar al laboratorio encontramos un blog online:

Explorando la página web con Ctrl + U o Click derecho ->Ver código fuente de la página, encontraremos el siguiente script vulnerable:

Lo que realiza es lo siguiente:
- Define una función que funcionará únicamente cuando cambia en la URL el valor que prosigue al ‘#’
- Le quita el ‘#’ a la cadena, la decodifica de URL a texto, y busca esa cadena en todos los h2 de los elementos ‘section’ que tienen la clase ‘blog-list’.
- Si el post existe, hace scroll a él.
Este script utiliza una versión vulnerable de jQuery, la cual no sólo nos permite movernos al post, sino también insertar HTML a él.
Para ello realizaremos el siguiente HTML:
<iframe src="https://0af4001d03c6230c800b1764006f0039.web-security-academy.net/#" onload="this.src += '<img src=1 onerror=print()>'">
</iframe>
Notas:
- Sólo es posible ejecutar este script con iframe, dado que la página usa ‘hashchange’, necesitamos tener un hash precargado (en este caso vacío y posteriormente modificado con onload).
- Es necesario cerrar la etiquieta iframe para que funcione, pese a que en nuestro navegador funcione sin cerrar, en el de la víctima no lo hará.
- En este caso debemos llamar a la función print(), no alert() como en laboratorios anteriores
- Es importante el buen uso de comillas, dentro de unas dobles » «, debe de haber simples ‘ ‘.
Entramos en ‘Go to exploit server’ y enviamos el script:

Al presionar en ‘Deliver exploit to victim’ se completará el laboratorio:
