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>