Entrada

DOM Based Vulnerabilities Lab 3

DOM Based Vulnerabilities Lab 3

Skills

  • DOM XSS using web messages and JSON.parse

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio utiliza mensajes web y analiza el mensaje como JSON. Para resolver el laboratorio, debemos construir una página HTML en el servidor de exploits que explote esta vulnerabilidad y llame a la función print()


Resolución

Al acceder a la web nos sale esto

Me llama la atención la carga del objeto, si inspeccionamos el código fuente vemos que la ventana tiene un listener y si enviamos un mensaje este se mostrará en la web

Para enviar un mensaje podemos usar window.postMessage, el mensaje debe contener un string en formato JSON. Al proporcionar los parámetros type: 'load channel' y url: 'https://0afc00da04b221f285fd3b08005c00c2.web-security-academy.net/' el script nos crea un iframe cuya url es la proporcionada

1
window.postMessage(JSON.stringify({type: 'load-channel', url: 'https://0afc00da04b221f285fd3b08005c00c2.web-security-academy.net/'}));

Como nos esta cargando una url podemos usar javascript:print() para ejecutar código JavaScript

1
window.postMessage(JSON.stringify({type: 'load-channel', url: 'javascript:print()'}));

A continuación nos vamos al exploit server e insertamos este payload. Este payload nos carga la url de la web vulnerable y cuando se ha cargado enviamos un mensaje con el payload desde dentro del iframe

1
<iframe src="https://0afc00da04b221f285fd3b08005c00c2.web-security-academy.net/" onload="this.contentWindow.postMessage(JSON.stringify({type: 'load-channel', url: 'javascript:print()'}), '*')">

Si pulsamos sobre View exploit se nos cargará el iframe y también se mostrará un print(). Si pulsamos en Deliver exploit to victim estaremos enviando a la víctima la url de nuestro servidor https://exploit-0a9b002b0485218685773a2501aa0098.exploit-server.net/exploit en el cual alojamos el exploit

Esta entrada está licenciada bajo CC BY 4.0 por el autor.