Entrada

XSS Lab 14

XSS Lab 14

Skills

  • Reflected XSS into HTML context with most tags and attributes blocked

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio contiene una vulnerabilidad XSS reflejada en la funcionalidad de búsqueda, pero utiliza un firewall de aplicación web (WAF) para proteger contra los vectores comunes de XSS. Para resolver el laboratorio, debemos realizar un ataque de cross-site scripting que eluda el WAF y llame a la función print()


Resolución

Al acceder a la web nos sale esto

Hemos notado que el WAF bloquea tanto por etiquetas como por atributos, detectando específicamente las secuencias como <img y atributos como onerror y onload. Para eludir esto, vamos a capturar la petición realizada al buscar un elemento en el cuadro de búsqueda utilizando Burp Suite y luego enviarla al Intruder para realizar un ataque más dirigido

En https://portswigger.net/web-security/cross-site-scripting/cheat-sheet tenemos varios payloads de etiquetas a utilizar, debemos pulsar en Copy tags to clipboard y pegarlo en el apartado de payloads de Burpsuite

Una vez hecho esto pulsamos en Start attack, filtramos por Status Code y vemos que las únicas dos etiquetas que reciben un código de estado 200 son body y custom tags

Ahora debemos hacer lo mismo con los atributos, para ello pegamos este payload <body onload=alert(1)> en el cuadro de búsqueda y capturamos la petición con Burpsuite

Nos dirigimos nuevamente a la web, pulsamos sobre Copy events to clipboard, pegamos los payloads, iniciamos el ataque y filtramos por Status code

La mejor opción que he encontrado es usar este payload <body onresize="print()">, una vez inyectado, si el usuario resizea la ventana, se ejecutará print(). Sin embargo, esto no nos sirve para completar el laboratorio. Para completar el laboratorio, debemos crear un payload que no requiera interacción alguna por parte del usuario. Para llevar esto a cabo, vamos a dirigirnos al exploit server y en el body vamos a insertar este payload. Lo que estamos haciendo aquí es cargar la web víctima mediante un iframe. Esto lo podríamos hacer con un VPS si estuviéramos en un entorno real o con el dominio de la web si la etiqueta <iframe> no estuviera blacklisteada por el WAF. En este caso, como estamos cargando la web desde un servidor externo no nos aplica el WAF. Básicamente, lo que hace el payload es que cuando el iframe carga, cambiamos su tamaño y altura, lo cual inmediatamente ejecuta el evento onresize que hay dentro de la etiqueta <body>. Para que nos den el laboratorio por válido, debemos pulsar en Deliver exploit to victim en el exploit server

1
<iframe src="https://0ae300c603f9c19d8168d0db00bf0041.web-security-academy.net/?search=%3Cbody+onresize%3D%22print%28%29%22%3E" onload="this.style.width='1px'; this.style.height='1px';></iframe>
Esta entrada está licenciada bajo CC BY 4.0 por el autor.