Authentication Lab 3
Skills
- Password reset broken logic
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
tiene una vulnerabilidad
en la funcionalidad de restablecimiento de contraseña
. Para resolver
el laboratorio, debemos restablecer
la contraseña
de Carlos
, luego iniciar sesión
y acceder a su página de Mi cuenta
. Nuestras credenciales son wiener:peter
y la víctima es carlos
Resolución
Al acceder
a la web
nos sale esto
Pulsamos sobre My account
y nos logueamos
con las credenciales wiener:peter
Al iniciar sesión
podemos ver nuestro correo electrónico
Si deseamos cambiar
nuestra contraseña
primero debemos desloguearnos
y hacer click
sobre Forgot password?
Introducimos
nuestro email
y pulsamos
en Submit
Una vez hecho esto nos llegará
un mensaje
a nuestro servidor
de correo
al cual podemos acceder pulsando
sobre Email client
Si pulsamos sobre el enlace nos dirigirá a esta url https://0ad100ad046943c68011c19a00470032.web-security-academy.net/forgot-password?temp-forgot-password-token=93wfkm33reur6z5zgzobpivg4aarlho3
. Una vez ahí rellenamos
los campos
, cambiamos
la contraseña
y nos vamos a Burpsuite > Target > SiteMap
. Lo primero que hace el servidor cuando pulsamos sobre el enlace es hacer una petición GET
a https://0ad100ad046943c68011c19a00470032.web-security-academy.net/forgot-password?temp-forgot-password-token=93wfkm33reur6z5zgzobpivg4aarlho3
Posteriormente se hace una petición
por POST
a la misma dirección url
pero también envía datos
en el body
de la petición
Debemos capturar
la petición
de cambio
de contraseña
nuevamente, porque el token
este ya ha caducado
y tenemos que generar uno nuevo. Si cambiamos el valor del campo username
por carlos
y enviamos
la petición
recibiremos un 302 Found
, lo que quiere decir que el cambio
de contraseña
a carlos
ha sido exitoso
Si intentamos loguearnos
como el usuario carlos
veremos que efectivamente hemos conseguido cambiarle
la contraseña
Hemos podido realizar este ataque debido a que, la primera petición GET
que se envía con el valor temp-forgot-password-token=93wfkm33reur6z5zgzobpivg4aarlho3
, el cual se valida y añade a la base
de datos
para nuestro usuario wiener
. Sin embargo, cuando se hace la segunda petición
, es decir, la petición POST
ese campo no se vuelve a validar de nuevo
y por lo tanto podemos cambiar
el nombre
de usuario
y cambiarle
la contraseña
. Esto lo podemos comprobarlo borrando
el parámetro temp-forgot-password-token
de la url
y dejándolo
en blanco
en el body
y enviando
la petición
. No
se puede eliminar
ese parámetro
del body
debido a que es necesario
para que el servidor
procese la petición correctamente