Single-endpoint race conditions
Laboratorio de Portswigger sobre Race Conditions
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio tiene una race condition en la función de cambio de correo electrónico, lo que permite asociar una dirección de correo arbitraria a nuestra cuenta. Alguien con la dirección carlos@ginandjuice.shop tiene una invitación pendiente para ser administrador del sitio web, pero aún no ha creado una cuenta. Por lo tanto, cualquier usuario que logre reclamar este email heredará automáticamente los privilegios de administrador
Para resolver el laboratorio debemos seguir los siguientes pasos
Identificarunarace conditionque permitareclamarunadirección de correo arbitrariaCambiarnuestradirección de correoacarlos@ginandjuice.shopAccederalpanel de administraciónEliminaral usuariocarlos
Podemos iniciar sesión en nuestra propia cuenta utilizando las credenciales wiener:peter. También tenemos acceso a un cliente de correo electrónico, donde podemos ver todos los correos electrónicos enviados a direcciones con el dominio @exploit-<YOUR-EXPLOIT-SERVER-ID>.exploit-server.net
Guía de race conditions
Antes de completar este laboratorio es recomendable leerse esta guía de race conditions https://justice-reaper.github.io/posts/Race-Conditions-Guide/
Resolución
Al acceder a la web vemos esto
Si hacemos click sobre My account nos podemos loguear con las credenciales wiener:peter
Después de iniciar sesión vemos que podemos cambiarnos el correo electrónico y que para confirmar el cambio de correo se nos manda un email a nuestro correo electrónico
Si accedeos al Email client vemos la confirmación para el cambio de correo electrónico
Si hacemos click sobre el enlace de confirmación recibimos este mensaje y nos redirige a /confirm-email?user=wiener&token=WqzeuYaRrAm1tOlD
Si nos dirigimos a My account podemos confirmar que el cambio de correo electrónico si ha funcionado
Posteriormente, nos dirigirnos a la extensión Logger ++ de Burpsuite y le echamos un vistazo a la petición de cambio de email
Vamos a enviar esta petición al Repeater y vamos a testear si es probable una race condition. Para ello vamos se recomienda usar entre 20 y 30 y cada una tiene que tener un email diferente
Pinchamos sobre los tres puntos y creamos un grupo pulsando en Create tab group
Vamos a enviar todas las peticiones en grupo usando la opción Send group in sequence (separate connections). Usamos esta opción para testear las race conditions, en este caso tiene sentido porque los correos electrónicos usan hilos y al mandar varias solicitudes hay más probabilidad de que colisionen
Nos dirigimos al Email client y observamos que cada email obtiene el código de confirmación de su correo electrónico. Si mandamos las peticiones en paralelo, podríamos causar una race condition si el servidor no maneja correctamente los emails enviados
Una vez comprobado esto, seleccionamos la opción Send group in parallel (single-packet attack) y efectuamos un single-packet attack. Aunque las condiciones sean aparentemente idóneas puede ser que tengamos que ejecutar el ataque varias veces para que funcione
Si nos dirigimos al Email client, vemos algo raro. Estamos recibiendo para un email un código de confirmación de otro email completamente diferente
Si nos fijamos en el delay de las peticiones que han colisionado, por ejemplo TESTING 1 con TESTING 9, vemos que el delay es exactamente el mismo o varía de forma mínima
Si hacemos click en varios enlaces, nos daremos cuenta que solo es válido el último que recibido. Por lo tanto esto puede hacer que sea complicado obtener el enlace que queremos, para solucionar esto vamos a reducir el número de peticiones a dos, la primera petición tendrá nuestro email y la segunda el email carlos@ginandjuice.shop
1
email=testing29%40exploit-0a5c00e90479d99e82f0c4b201010058.exploit-server.net&csrf=yluvF2aFoPhltmxFukCcYNpRH3V3Djvt
1
email=carlos%40ginandjuice.shop&csrf=yluvF2aFoPhltmxFukCcYNpRH3V3Djvt
El siguiente paso es seleccionar la opción Send group in parallel (single-packet attack) y efectuar un single-packet attack nuevamente. A continuación, si nos dirigimos al Email client vemos que hemos obtenido en nuestro correo el correo de confirmación de carlos@ginandjuice.shop
Hacemos click sobre el enlace, nos redirige a /confirm-email?user=wiener&token=SsyCyXVYn26WqPG3 y confirmamos el cambio de correo a carlos@ginandjuice.shop
Si accedemos a My account podemos ver como el cambio de correo ha sido exitoso. Además, como ese email iba a ser el de un usuario administrador, ganamos acceso al panel administrativo
Accedemos a Admin panel y eliminamos al usuario carlos






















