
Descripción
This lab is vulnerable to web cache poisoning because the query string is unkeyed. A user regularly visits this site’s home page using Chrome.
To solve the lab, poison the home page with a response that executes alert(1)
in the victim’s browser.
Web cache poisoning via an unkeyed query parameter writeup
Dividiremos el laboratorio en varios pasos:
Determinar que el laboratorio usa caché
Esto lo podremos averiguar viendo los siguientes tres atributos en una respuesta:

Si se encuentran podemos suponer que un ataque de envenenamiento de caché es posible.
Localizar un cache buster
Un cache buster nos permite refrescar la caché más rápido y evitar interferir con los usuarios que navegan. En este caso se puede encontrar añadiendo una cadena de caracteres aleatoria detrás de un ‘?’ en la URL, por ejemplo: ‘/?test’. Cuando queramos refrescar la caché cambiaremos la cadena de caracteres.

Nota: También podemos usar el atributo ‘Origin’ para realizar esto.
En este caso el cache buster también edita el link ‘canonical’, permitiendo inyectar JavaScript en la página, pero no en la de la victima debido a que el buster forma parte de la clave de caché, por lo que el servidor sólo nos entregará esta versión a nosotros. Tendríamos que enviarle la URL a la víctima (realizando un XSS reflejado entonces), y no un envenenamiento de caché.
Es por esto que necesitamos encontra un ‘unkeyed query parameter’, un parámetro en la URL que edite la página web, pero que no sirva para generar una versión del caché sólo accesible por nosotros.
Daremos Click derecho en la parte de ‘Request’ -> Estensions -> Param Miner -> Guess query params. Al aceptar y esperar un buen rato, veremos lo siguiente en la pestaña ‘Target’:

Nos ha detectado el parámetro ‘utm_content’ como vulnerable a envenenamiento de caché. Ahora que tenemos un resultado, es recomendable cerrar la extensión yendo a ‘Extensions’ y desactivando y volviendo a activar la extensión.
La URL que insertaremos en el ‘Repeater’ será la siguiente:
?utm_content='><script>alert(1)</script>
Nos tendremos que asegurar que sobreescriba el contenido. Una vez que lo haga, podemos comprobar que funciona actualizando el navegador. En cuanto la víctima refresque la página completaremos el laboratorio:
