Laboratorio: omisión de autenticación mediante Oracle de cifrado
Last updated
Last updated
Aqui al parecer ya tenemos la plena de que podemos atacar porque en la aplicación tenemos un oracle de encrypt en los usuarios el cual podemos explotar para obtener acceso como admin y eliminar al user carlos, así que vamos a ver como podemos efectuar esto.
Aqui ya podemos ver algo, tienen posts la pagina, posts que probablemente podamos escribir algo y enviarlo al servidor de la aplicación, en pocas palabras ese puede ser el principal vector de ataque del oraculo de cifrado.
Vamos a enviar esto a ver que alcanzamos a ver…
(Cabe aclarar que no hemos iniciado sesión como wiener:peter
)
Considerando que el Lab se llama así, vamos a tomar en cuenta mejor el proceso de ataque ingresando como wiener y analizando la autenticación.
Ese stay logged in nos devuelve algo curioso como response cuando lo analizamos en el repeater.
Content-Type: application/x-www-form-urlencoded
Esto es lo maximo que he podido deducir, quitando el encabezado content-Type que codifica la salida de response no muestra nada pero si lo quitamos nuestro response sale con una codificación desconocida que pareciera ser base64 pero cuando intento decodearla aparecen caracteres desconocidos.
Pero ahi vemos claramente que Set-Cookie: notification=texto codificado, esa cookie aparece cuando nosotros enviamos un correo de forma errada o cuando eliminamos el encabezado que mencioné.
Aqui estamos con otra prueba de concepto, si ponemos el correo malo nos aparece en la misma pagina que el correo está malo.
Tomamos de la solicitud POST/COMMENT la cookie stay-logged-in= que evidentemente está encriptada, por más que intenté decodificarla no pudé, así que es claro que está es cifrada y no codificada.
Ahora vamos a get post/?id=x para poder pasarle como parametro la stay-logged-in ya que como sabemos dentro de la solicitud POST está la cookie notification que esa precisamente también está en GET así que lo que haremos será modificarla pasandole como parametro el valor de stay-logged-in y con ello vamos a ver como descifra exitosamente el encriptado.
Este que es el response que nos sale de POST
Este el request de GET vemos cómo está presente la misma cookie y cuando la modificamos, nos retorna el decrypt desde el mensaje del email incorrect.
Cookie: notification=aEt%2fnsJREuNTVAipO48Sk3TIIt0VlV9Hc9zB7FxyeJg%3d;
→ Modificamos el valor de notification en GET.
Y vemos como exitosamente obtenemos el descifrado pasandole el notification de POST a GET:
wiener:1701730869584 -> Ese es formato de fecha Del tipo USERNAME:TIMESTAMP
¿Si cambiamos el username por administrator? ¿que podriamos lograr? Vamos a ver…
Por ahora esta complicado la resolución de este Lab, el burp decoder no me decodifica de forma correcta y desde la web es lo mismo, no puedo enviar la cookie decodificada a la request que descencripta “GET” porque no me toma la cookie como correcta.
Aqui lo que hacemos es que como nos dimos cuenta tenemos que nos mostraba el mensaje ese de email incorrect, con ese nos dimos cuenta que lo muestra porque está en la longitud correcta del prefijo de cifrado por bloques que deben ser numeros multiplos de 16, entonces lo que haremos será, añadimos 9 caracteres más para que esos 9 caracteres más administrator: den un total de 23 caracteres, así podemos dejar a un lado el resultado total de email incorrect para que no aparezca más, y en el Burp Decoder eliminamos 32 caracteres ya que es el total de 16 + 16 = 32, y este es el resultado:
Luego de eso debemos tomar la solicitud GET / del directorio raiz.
para poder cambiar la stay-logged-in= por el valor que tenemos encriptado para poder acceder a admin.
Esa solicitud en especifico.
Así que eliminamos el valor de la cookie sesion= y reemplazamos el valor de stay-logged-in por el valor que tomamos encriptado y enviamos la solicitud.
Ahi vemos como ahora podemos tener el menu de Admin panel> esto es lo principal ya que ahora solo nos queda acceder al panel de admin y eliminar al user @carlos
Le damos a show response in browser y eliminamos al sapo ese de Carlos.
Eso sería todo, gracias por leerme :)