[Reversing] ctos0 #HackTheFDI

Voy a mostrar los pasos que realicé para sacar el primer reto de reversing, del torneo organizado por mi universidad UCM en la semana de la informática sobre el juego de Watch Dogs 2, organizado por mi ex-profesor de redes y seguridad @jlvazpol.

El primer ejecutable que nos dan es el ctos0 que se encuentra comprimido en el zip reversing.

Lo primero que miro es el tipo de fichero que es, con el comando file:

ctos0_file

Es un ELF (Executable and Linkable Format) usado en los sistemas tipo UNIX, en este caso de 64 bits.

Lo ejecuto para darme una idea de como puede estar programado el binario y que es lo que pide para poder obtener la flag.

ctos_prog

El programa pide una contraseña la cual seguramente la esté comparando con el valor de una variable interna y al introducirla veo que hay un delay de unos 5 segundos, por lo que descarto el uso de fuerza bruta.

Voy a debuguearlo con gdb para ver el funcionamiento interno del programa:

$ gdb -q ./ctos0

ctos0_disass

Al fijarme en las llamadas a funciones que realiza el programa, veo que una de ellas, la que he marcado en un recuadro rojo, llama a la función strncmp, la cual compara la contraseña que hemos introducido con la real,  y si no es igual salta a la dirección de memoria de 0x400d64.

Si miramos el man 3 de la función strncmp podemos ver que recibe tres parámetros, cadena1, cadena2 y el número de bytes a comparar de la cadena.

$ man 3 strncmp

strncmp

Con estos datos podemos deducir que antes de la llamada a la función strncmp se va a pasar al Stack los tres parámetros en orden inverso (marcado como rectángulo azul), en este caso el tercer parámetro se almacena en el registro rdx y contiene 0x20 que son 32 bytes, rcx que es el registro que almacenará el parámetro 2 y rax que contendrá el parámetro 1.

Lo que hice fue poner un breakpoint antes de la llamada a la función strncmp que se corresponde con 218 bytes a partir de la función main como sale en el desensamblado, para luego consultar el contenido de los registros rax y rcx.

ctos0_registers

La contraseña que introduje fue AAAA y es la que se guardó en el registro rax, por lo que la contraseña estará en el registro rcx y es: TodoEstaConectado

ctos0_done

Una vez introducida la contraseña en el programa obtenemos la flag: QRSQRSQR

Esta entrada fue publicada en CTF, HackTheFDI, Reversing. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s