5 - DOM-based cookie manipulation
<script>
document.cookie = 'lastViewedProduct=' + window.location + '; SameSite=None; Secure'
</script>
Guarda una cookie llamada lastViewedProduct como la url actual.
SameSite=None: Permite que la cookie se envíe junto con solicitudes de sitios cruzados (cross-site requests). Esto es necesario para que la cookie se envíe en escenarios como formularios POST desde un dominio diferente.Secure: La cookie solo se enviará a través de conexiones HTTPS, asegurando que no se transmita en texto claro.
La cookie actualizará el valor del enlace "Last Viewed Product" que al actualizar la página se reflejará en el DOM, si pulsamos en el enlace se ejecuta print()
Como explotarlo en el lab:
<iframe
src="https://0a4000310477b9b68292a3cf002b0064.web-security-academy.net/product?productId=1&'><script>print()</script>"
onload="if(!window.x)this.src='https://YOUR-LAB-ID.web-security-academy.net';window.x=1;">
</iframe>
Desglose del onload:
onload="if(!window.x)this.src='https://YOUR-LAB-ID.web-security-academy.net';window.x=1;"
-
if(!window.x):- Este es un condicional que verifica si
window.xno está definido o esfalse(en otras palabras, si es la primera vez que se carga eliframe). window.xes una propiedad global que se está utilizando para rastrear si esta es la primera carga deliframe. Siwindow.xno está definido, el código dentro delifse ejecuta.
- Este es un condicional que verifica si
-
this.src='https://YOUR-LAB-ID.web-security-academy.net':thisse refiere aliframeen sí.- Si la condición anterior es verdadera (
window.xno está definido), entonces la fuente (src) deliframese cambia a'https://YOUR-LAB-ID.web-security-academy.net'. - Esto significa que, después de que el
iframeha cargado inicialmente la URL con elproductId=1y el script deprint(), se recarga con una nueva URL (https://YOUR-LAB-ID.web-security-academy.net).
-
window.x=1:- Una vez que la URL del
iframeha sido cambiada,window.xse establece en1. - Esto asegura que la próxima vez que el
iframese cargue (debido al cambio desrc), la condiciónif(!window.x)no se cumplirá, evitando un ciclo infinito de recargas.
- Una vez que la URL del
En resumen cada vez que se establece un nuevo src se vuelve a cargar el iframe, el manejo de window.x se hace con el mótivo de no recibir recargas infinitas