Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863101620

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

En este post vamos a estar resolviendo el laboratorio: “DOM XSS in jQuery selector sink using a hashchange event”:

image 43

Para resolver el laboratorio, tenemos que enviar a una víctima un exploit que aproveche la vulnerabilidad del laboratorio para ejecutar la función print().

Lo primero de todo es acceder al laboratorio:

image 44

En este caso, no vemos ninguna barra de búsqueda o página de feedback como ha ocurrido en otros retos de XSS. Sin embargo, si nos vamos al código fuente, nos encontramos con el siguiente trozo de código:

image 45

Este código, básicamente lo que hace es que cuando se especifica en la URL algo después de un hashtag, busca este valor en la web y hace un scroll hasta la coincidencia.

Por ejemplo, si nos vamos abajo del todo del laboratorio, podemos ver como hay un post que tiene la palabra “Resume” en el título:

image 46

Sabiendo esto, vamos a buscar por:

  • <URL>/#Resume
image 47

Damos enter.

image 48

Y aunque en la imagen no se pueda apreciar, nos redirige automáticamente hacia el post que contiene la palabra.

Para ver como explotar esto, vamos a traer el código de nuevo:

image 49

Como podemos observar, realmente lo que ocurre en el código, es que cuando especificamos algo después del hashtag, jQuery intenta busca un elemento h2 que contenga lo que hemos dicho. Cuando encuentra el elemento, este se almacena en la variable post, por lo que ahora, lo que contiene es un elemento de jQuery que se ve de la siguiente forma:

image 50

Posteriormente, si la variable post tiene algun dato almacenado, se obtiene el primer elemento del objeto jQuery y se usa el método scrollIntoView().

Aqui la vulnerabilidad como tal, se encuentra en la primera linea, en el selector sink de jQuery ($()):

image 51
image 52

Si no se sanitiza bien, lo que ocurre en aproximadamente en el código es lo siguiente:

  • $(‘section.blog-list h2:contains(‘ + decodeURIComponent(window.location.hash.slice(1)) + ‘)’);
  • $(‘section.blog-list h2:contains(‘ + Hola + ‘)’);

Por lo tanto, si ponemos un payload como el siguiente:

  • <img src=/ onerror=print()>

Mas o menos, ocurriría algo así:

  • $(‘section.blog-list h2:contains(‘ + <img src=/ onerror=print()> + ‘)’);

De esta forma, se interpretaría. Vamos a probarlo:

image 53

Damos enter:

image 54

Y efectivamente se ejecuta. Ahora tenemos que crear un exploit que mandemos a la víctima y se haga uso de esta vulnerabilidad. Para ello nos vamos al servidor del exploit:

image 55
image 56

En este caso, la idea es automatizar la explotación usando un simple <iframe>:

image 57

Antes de enviarlo vamos a ver como se vería:

image 58
image 59

La victima al visitar una web con nuestro código, vería lo que estamos viendo, un pequeño iframe de la web, e inmediatamente después de que cargase la web, se ejecutaría la función print():

image 60

Por lo que, viendo que funciona. Simplemente lo guardamos y lo enviamos a la víctima:

image 61
image 62

De esta forma, conseguimos resolver el laboratorio:

image 63
image 64