Entrada

Business Logic Vulnerabilities Lab 11

Business Logic Vulnerabilities Lab 11

Skills

  • Authentication bypass via encryption oracle

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio contiene un fallo lógico que expone un oracle cifrado a los usuarios. Para resolver el laboratorio, debemos explotar este fallo para obtener acceso al panel de administración y eliminar al usuario carlos. Podemos iniciar sesión en nuestra propia cuenta utilizando las credenciales wiener:peter


Resolución

Al acceder a la web vemos esto

Hacemos click sobre My account y nos logueamos con las credenciales wiener:peter

Al loguearnos vemos esto

Si hacemos click sobre View post vemos que tenemos una sección de comentarios

En este caso el email que proporcionamos no hace falta que cumpla un patrón en concreto

Al usar un email inválido nos muestra este mensaje

Si recargamos la página y capturamos la petición con Burpsuite vemos que se ha asignado una nueva cookie llamada notification

Si nos fijamos vemos que tanto notification como stay-logged-in tienen el mismo formato, notification es el email que hemos proporcionado pero cifrado, sin embargo, está siendo descifrado. Por lo tanto si el valor de notification está siendo descifrado si cambiamos ese valor por el de stay-logged-in también lo descifrará

Vamos a hacer este comentario para que nos cree una cookie con el nombre de administrator y así podamos iniciar sesión

El problema es que al publicar el comentario nos arroja un error, habría que intentar que en la cookie solo apareciera administrator:1740393673294. Actualmente el Invalid email address: es parte de la cookie, por lo tanto no podemos usarla para iniciar sesión

El texto Invalid email address: tiene un total de 23 caracteres, esto lo podemos comprobar es https://www.contadordecaracteres.com/

Si copiamos la cadena HokaDFQLTaLOScegXUavsZ%2fsDPNHTvifB04CMpZwfKEGc3%2bFMTlT53%2f%2f6df%2bVKcgBcRrmG5oaB0eG9R7VXByPw%3d%3d en el Decoder y la decodificamos primero con URL y luego como Base64 obtenemos datos en binario

En el caso de este laboratorio si borramos los primeros 23 bytes estos corresponderán al texto Invalid email address: . Esto puede no funcionar en otros casos porque depende de la tecnología de encriptación que se está usando. En este caso debemos señalar los bits que vamos a borrar y pulsar Delete selected bytes

El output obtenido lo encodeamos en Base64 y posteriormente lo encodeamos en URL

Si le asignamos este valor %6e%77%64%4f%41%6a%4b%57%63%48%79%68%42%6e%4e%2f%68%54%45%35%55%2b%64%2f%2f%2b%6e%58%2f%6c%53%6e%49%41%58%45%61%35%68%75%61%47%67%64%48%68%76%55%65%31%56%77%63%6a%38%3d a la cookie notification

Existen dos tipos de cifrados block cypher y stream cypher, el stream cypher toma solamente 1 byte a la vez y lo encripta usando una clave, mientras que el block cypher toma el bloque entero del tamaño que ha sido fijado y lo encripta. En este caso, se está usando un block cypher, en este tipo de cifrado se usa un padding para completar los bloques, cada tipo de cifrado tiene su forma de añadir padding a los bloques. El padding se usa porque si el bloque está incompleto no se puede encriptar. En este caso vemos como el último bloque tiene 7 bits vacíos, por lo tanto el bloque que es un conjunto de 16 bytes no está completo y no puede cifrarse

Para solventar este problema vamos a usar el payload xxxxxxxxxadministrator:1740393673294 que incorpora 9 caracteres más, esto lo hacemos para en vez de borrar 23 caracteres borrar 32 y de esta forma los bloques mantienen un tamaño múltiplo de 16

Nos devuelve este output el cual tiene una longitud de 60 caracteres

Nos copiamos el valor de la cookie HokaDFQLTaLOScegXUavsYyumBaSkI1UHN5xWo6X8g8WBpkcTVXHNf4inBX9NupRvRPLvdZaVRNrLfH3mkQXxA%3d%3d en el Decoder, primero decodeamos como URL y luego como Base64

Seleccionamos las primeras dos filas de caracteres que son 32 bits, hacemos click izquierdo y pulsamos Delete selected bytes

Una vez hecho esto encodeamos en Base64 y posteriormente encodeamos la URL

Sustituimos el valor notification en la cookie y recargamos la web

Una vez comprobado que es correcto, accedemos a /admin, sustituimos el valor de la cookie stay-logged-in por %46%67%61%5a%48%45%31%56%78%7a%58%2b%49%70%77%56%2f%54%62%71%55%62%30%54%79%37%33%57%57%6c%55%54%61%79%33%78%39%35%70%45%46%38%51%3d y eliminamos la cookie session porque está asociada con el usuario wiener

Una vez hecho eso recargamos la página y vemos que hemos accedido al panel administrativo. Una vez aquí, ya podemos borrar al usuario carlos

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