CSRF where token validation depends on token being present
Laboratorio de Portswigger sobre CSRF
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio tiene una funcionalidad de cambio de correo electrónico vulnerable a CSRF. Para resolver el laboratorio, debemos usar nuestro servidor de explotación para alojar una documento HTML que lleve a cabo un ataque CSRF para cambiar la dirección de correo electrónico del usuario que reciba el payload. Podemos iniciar sesión en nuestra propia cuenta utilizando las credenciales wiener:peter
Guía de CSRF
Antes de completar este laboratorio es recomendable leerse esta guía de CSRF https://justice-reaper.github.io/posts/CSRF-Guide/
Resolución
Al acceder a la web vemos esto
Pulsamos sobre My account y nos logueamos con las credenciales wiener:peter
Vemos que hay un botón para cambiar el email
Si capturamos la petición de cambiar email con Burpsuite, vemos esto
Algunas aplicaciones validan correctamente el token cuando está presente, pero omiten la validación si se omite el token. En esta situación, el atacante puede eliminar todo el parámetro que contiene el token (no solo su valor) para eludir la validación y lanzar un ataque CSRF. Vemos que al eliminar el parámetro csrf omitimos la validación y por lo tanto podemos modificar nuestro email
Si inspeccionamos el código, vemos cómo se envía el formulario. Podemos usar este formulario como modelo para construir nuestro propio payload
Si contamos Burpsuite Professional podemos capturar una petición y pulsar click derecho > Engagement tools > Generate CSRF PoC para que nos genere un payload
Se nos genera este payload, aunque es funcional, en la mayoría de ocasiones vamos a tener que retocarlo un poco para mejorar su desempeño
En mi caso prefiero construir los payloads de forma manual, para comprobar que funciona nos dirigimos al Exploit server y lo pegamos
1
2
3
4
5
6
7
8
9
10
<html>
<body>
<form action="https://0aef003a04fed832802f26d100f900ee.web-security-academy.net/my-account/change-email" method=POST>
<input type="hidden" name="email" value="pwned@gmail.com">
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
Una vez hecho esto pulsamos sobre View exploit para ver si nos cambia el email a nosotros y efectivamente nos lo cambia. Independientemente de como generemos el payload, para completar el laboratorio debemos pegarlo en el Exploit server y pulsar sobre Delivery exploit to victim. Debemos tener en cuenta que dos usuarios no pueden tener el mismo email, por lo tanto, debemos cambiar nuestro email o cambiar el email en el payload que enviamos










