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 ./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
.
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