Entrada

Single-endpoint race conditions

Laboratorio de Portswigger sobre Race Conditions

Single-endpoint 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

  • Identificar una race condition que permita reclamar una dirección de correo arbitraria

  • Cambiar nuestra dirección de correo a carlos@ginandjuice.shop

  • Acceder al panel de administración

  • Eliminar al usuario carlos

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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.