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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *