Secure Password Database writeup

Descripción
I made a new password authentication program that even shows you the password you entered saved in the database! Isn’t that cool? system.out
Secure Password Database solución
Descargamos el archivo ‘system.out’, le damos permisos de ejecución y lo ejecutamos:
chmod +x system.out
./system.out
Al hacerlo, vemos que debemos de introducir el hash generado por el programa en base a los datos introducidos:

En este caso, vamos a analizar el código del programa con ghidra, para ver si podemos descifrar el hash u obtener el valor que el programa espera:
ghidra
Creamos un nuevo proyecto, importamos el archivo system.out y analizamos la función main():

Vemos que la comprobación para abrir y mostrar la flag es ‘local_f8 == local_100’. Tenemos que hacer que esta comprobación se cumpla. Para ello daremos doble click a make_secret() y veremos la función:

Esta función tiene dentro la función de hashear, ‘hash()’. Detendremos la ejecución del programa en este punto, finalizaremos la función ‘hash()’ y exploraremos los registros para ver que valor devuelve esta función. Para ello usaremos gdb.
gdb ./system.out
Primero, ponemos el breakpoint en la función hash:
b hash
Ejecutamos hasta llegar al breakpoint:
run
Insertamos los valores ‘1’, y ‘1’ para llegar al breakpoint y, una vez que lleguemos, ejecutamos toda la función hash hasta el retorno:
finish
Vemos toda la información que hay en los registros del programa:
info reg

Para la contraseña ‘1’, el hash es ‘-3209081493549540382’, dado que es el valor que tiene el primer registro de propósito general del procesador. Sabemos que se encuentra en este registro dado que el valor se iba a retornar en una función.
Con este valor, lanzamos la instancia en PicoCTF, insertamos los mismos valores que hemos usado en gdb (‘1’, y ‘1’) y el hash obtenido ‘-3209081493549540382’:

Obteniendo así la flag y completando el CTF.
Consultor de ciberseguridad especializado en continuidad de negocio y respuesta ante incidentes. Interesado en analizar tecnologías desde una perspectiva de seguridad y descubrir su comportamiento real.
