Laboratorio: Explotación de la contaminación de parámetros del lado del servidor en una URL REST
Last updated
Last updated
Aqui vemos un poco cuando modificamos la cadena, encontramos que nos da una respuesta refiriendose a la API, que la consulta no es valida debemos consultar la definicion de la API.
¿Tendriamos que modificar la cadena para acceder a la api?
&username=administrator%2f%..%2f..%2f..%2fapi/%23
&username=administrator%23
&username=administrator%26
Con estas formas y muchas más que intenté pudé descrubrir como no se hacía nada al respecto, hasta que:
&username=./administrator
Con base en ello podemos empezar a jugar con el path traversal para poder buscar y encontrar que nos puede devolver algo que verdaderamente nos de una respuesta acertada.
&username=../../../../../../../administrator
Esto significa que el servidor interpreta la URL por fuera de la raiz como tal y pudimos saltarnos el protocolo de username de forgot password, con base en ello, ¿podremos encontrar la api? ¿Ese mensaje de error tipico a que tipo de api podría corresponder?
Toca hacer una serie de fuzzing API para poder encontrar la posible ruta de API oculta que no está presente en la aplicación.
Nos da un endpoint interesante →
/api/internal/v1/users/{username}/field/{field}
Modificamos {field} por email
, y username por administrator
../../../../../../../../api/internal/v1/users/{username}/field/email%23
../../v1/users/administrator/field/email%23
Esto es lo que encontramos en los archivos estaticos, JS que forgot password tiene el passwordResetToken.
Si modificamos el endpoint que tomamos de la api reemplazando email
por passwordResetToken
Tenemos un token, cojamos ese re malparido y pongamos en el GET /forgot-password?passwordResetToken=TOKEN
%23
m4yuqsfgo6pkg9ld2do9f0o2us7xbxqr
administrator admin
Lo que hicimos aquí fue tomar el endpoint de reset password y en el parametro de username hicimos el recorrido de ruta accediendo directamente a la función de forgot-password y de esa forma pudimos generar un token que fue el que a posteriori usamos para resetear la contraseña de administrador.