Classic Passwd

Resolución de un reto de TryHackMe que aborda reversing para poder eludir el inicio de sesión para obtener una bandera.

Lo he obtenido de tres maneras diferentes:

Método 1

Le tiramos un file para comprobar de que tipo es la arquitectura:

file Challenge.Challenge 
Challenge.Challenge: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b80ce38cb25d043128bc2c4e1e122c3d4fbba7f7, for GNU/Linux 3.2.0, not stripped

ltrace registra las funciones de la biblioteca que el programa llamó y recibió. Llamó a la función "strcmp" con el "nombre de usuario" correcto.

Flag:

Método 2

Usaremos la herramienta Ghidra.

Importamos el ejecutable analizándolo.

Buscamos en Árbol de símbolos por "main" , una vez nos lleve al main subimos un poco para arriba hasta ver la cadena = "THM{%d%d}" .

Junto a la cadena de THM, se ven unos valores en Hexadecimales, que si los convertimos obtendremos también la bandera.

Método 3 (Patching)

Aprovechando que tenemos Ghidra abierto podemos ver el flujo del programa.

  • Una vez se introducimos el usuario se pueden dar dos opciones, que entremos y obtengamos la bandera o que nos dé un error de autentificación.

  • JNZ es un salto condicional que salta sí el ZF (Zero flag) no está configurado.

  • Podríamos cambiar la dirección de salto para que vaya directamente hacia LAB_00101287, que es el salto JMP que nos lleva a una autentificación correcta.

  • Cambiamos JNZ por JMP y que apunte a LAB_00101287 , que es lo que nos lleva al camino correcto.

  • Añadimos un NOP en la dirección de salto que nos llevaría al error de autentificación.

Una vez hecho, exportamos el ejecutable y comprobamos que se ha parcheado correctamente.

Última actualización