You Cant C Me
1 minuto de lectura
Se nos proporciona un binario llamado auth
:
$ file auth
auth: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
Si lo ejecutamos, pregunta por una clave:
$ ./auth
Welcome!
Podemos introducir una clave y ver que no es correcta:
$ ./baby
Insert key:
asdf
I said, you can't c me!
Podemos hacer uso de ltrace
para ver las llamadas a funciones externas (funciones que pertenecen a librerías como Glibc):
$ ltrace ./auth
printf("Welcome!\n"Welcome!
) = 9
malloc(21) = 0x4056b0
fgets(
Por ejemplo, utiliza printf
para mostrar el mensaje y fgets
para leer nuestra entrada. Si ponemos algo de texto, vemos algo interesante:
$ ltrace ./baby
printf("Welcome!\n"Welcome!
) = 9
malloc(21) = 0x4056b0
fgets(asdf
"asdf\n", 21, 0x7ffff7fa9980) = 0x4056b0
strcmp("wh00ps!_y0u_d1d_c_m3", "asdf\n") = 22
printf("I said, you can't c me!\n"I said, you can't c me!
) = 24
+++ exited (status 0) +++
Está comparando nuestra entrada con "wh00ps!_y0u_d1d_c_m3"
, por lo que esta es la clave que tenemos que introducir:
$ ./baby
Welcome!
wh00ps!_y0u_d1d_c_m3
HTB{wh00ps!_y0u_d1d_c_m3}