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.

ltrace ./Challenge.Challenge 
printf("Insert your username: ")                                                                                 = 22
__isoc99_scanf(0x562ef2a2301b, 0x7ffc6f84f340, 0, 0Insert your username: ivan
)                                                             = 1
strcpy(0x7ffc6f84f2b0, "ivan")                                                                                   = 0x7ffc6f84f2b0
strcmp("ivan", "*********") // Compara ivan con un "nombre correcto"                                                                                  = 40
puts("\nAuthentication Error"
Authentication Error
)                                                                                   = 22
exit(0 <no return ...>
+++ exited (status 0) +++

Flag:

./Challenge.Challenge 
Insert your username: ***********
Welcome
THM{***********}

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.

ivan@ivan-VirtualBox:~$ echo $((0x******))
*******
ivan@ivan-VirtualBox:~$ echo $((0x*****))
*******

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