
Descripción
This lab’s email change functionality is vulnerable to CSRF. It uses tokens to try to prevent CSRF attacks, but they aren’t integrated into the site’s session handling system.
To solve the lab, use your exploit server to host an HTML page that uses a CSRF attack to change the viewer’s email address.
You have two accounts on the application that you can use to help design your attack. The credentials are as follows:
carlos:montoya
wiener:peter
CSRF where token is not tied to user session writeup
En este caso, el título del laboratorio nos está diciendo que el token de un usuario puede valer para otro. Dividiremos el laboratorio en 2 pasos, para poder realizar las pruebas necesarias fácilmente.
Obtener un token CSRF válido
Accederemos al laboratorio, iniciaremos sesión con el usuario ‘wiener’ y la contraseña ‘peter’. Antes de actualizar el mail, encenderemos el ‘Proxy’ de Burp Suite. Capturaremos la siguiente petición:

Es imporante que ahora, antes de apagar el ‘Proxy’, copiemos el valor del ‘csrf’ token y luego pulsemos ‘Drop’.
El valor de mi token es ‘XVyX1UhzHe17fdKO991iAflkQVSXIlBu’.
Al pulsar ‘Drop’, no se finalizará la petición (a menos que actualicemos la página), por lo que el token es válido (no se ha usado) y no pertenece a nadie (por el nombre del laboratorio). En este punto podremos apagar el ‘Proxy’.
Cambiar el correo de la víctima
Vamos al ‘Logger’ y buscamos ‘email’. Cogeremos cualquier petición que se haya generado para cambiar el correo, por ejemplo:

La enviaremos al ‘Repeater’ con Ctrl + I o Click derecho -> Send to Repeater. Allí pulsaremos Click derecho -> Engagement tools -> Generate CSRF PoC:

En esta ventana realizaremos 3 comprobaciones:
- Cambiaremos el correo para que no coincida con ninguno que hayamos usado en nuestras pruebas (aunque con uno que esté libre en el momento de enviar el exploit funcionará).
- Cambiaremos el valor del token CSRF por el que hemos obtenido anteriormente y no hemos usado
- Nos aseguraremos que en ‘Options’, esté marcada la opción de ‘Include auto-submit script’.
Copiaremos el HTML y nos iremos al nevegador, a ‘Go to exploit server’. Allí pegaremos el código en el ‘Body’, pulsaremos ‘Store’ y luego ‘Deliver to victim’. Al hacerlo habremos completado el laboratorio:

Nota: Si el laboratorio no se completa, puede ser por dos motivos:
- El valor del token no es válido. Hay que asegurarse de pulsar ‘Drop’ en la petición POST antes de apagar el ‘Proxy’ y no actualizar la página del navegador.
- El correo ya está en uso.