No cON Name CTF Pre Quals: Access Level 3
En este tercer y último reto nos enfrentamos a un fichero ELF. Este nivel fue el más fácil de los tres. Como veremos es súper sencillo.
Una vez bajamos el binario, lo primero es ejecutar file:
tuxotron@tuxotron-T530 ~/ctf/noconname2013quals $ file level.elf
level.elf: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xb589d432799bf15343387fea63d4bdc00faa177c, not stripped
Está compilado con símbolos y demás. Esto nos facilitará mucho la vida. Lo siguiente fue pasarle el comando strings, pero éste no arrojaba nada interesante.
Cuando ejecutamos el fichero se nos pide que introduzcamos por teclado una clave:
tuxotron@tuxotron-T530 ~/ctf/noconname2013quals $ ./level.elf
| > Type to win, only what I want to read… | >
Nada más pulsemos una tecla, si no es la que la aplicación espera, la aplicación termina:
tuxotron@tuxotron-T530 ~/ctf/noconname2013quals $ ./level.elf
| > Type to win, only what I want to read… | > | | -> I DON’T THINK SO
Echemos un vistazo al fichero desde gdb.
Una vez cargamos el ejecutable, desensamblamos el main:
(gdb) disassemble main
Aquí buscamos la función que nos pide entrada por teclado y rápidamente vemos que justo después de cada carácter, éste se compara con lo que hay almacenado en la dirección 0x6033a0:
0x00000000004010f3 <+212>: call 0x400fef < getch > // Entrada teclado
0x00000000004010f8 <+217>: movsx eax,al
0x00000000004010fb <+220>: mov DWORD PTR [rbp-0x4],eax
0x00000000004010fe <+223>: mov eax,DWORD PTR [rbp-0x8]
0x0000000000401101 <+226>: cdqe
0x0000000000401103 <+228>: mov eax,DWORD PTR [rax*4+0x6033a0] // Comparación
0x000000000040110a <+235>: cmp eax,DWORD PTR [rbp-0x4]
Si miramos lo que hay en esa dirección:
(gdb) x/30s 0x6033a0
0x6033a0 <facebookctf_rocks>: " "
0x6033a2 <facebookctf_rocks+2>: ""
0x6033a3 <facebookctf_rocks+3>: ""
0x6033a4 <facebookctf_rocks+4>: "S"
0x6033a6 <facebookctf_rocks+6>: ""
0x6033a7 <facebookctf_rocks+7>: ""
0x6033a8 <facebookctf_rocks+8>: "U"
0x6033aa <facebookctf_rocks+10>: ""
0x6033ab <facebookctf_rocks+11>: ""
0x6033ac <facebookctf_rocks+12>: "R"
0x6033ae <facebookctf_rocks+14>: ""
0x6033af <facebookctf_rocks+15>: ""
0x6033b0 <facebookctf_rocks+16>: "P"
0x6033b2 <facebookctf_rocks+18>: ""
0x6033b3 <facebookctf_rocks+19>: ""
0x6033b4 <facebookctf_rocks+20>: "R"
0x6033b6 <facebookctf_rocks+22>: ""
0x6033b7 <facebookctf_rocks+23>: ""
0x6033b8 <facebookctf_rocks+24>: "I"
0x6033ba <facebookctf_rocks+26>: ""
0x6033bb <facebookctf_rocks+27>: ""
0x6033bc <facebookctf_rocks+28>: "S"
0x6033be <facebookctf_rocks+30>: ""
0x6033bf <facebookctf_rocks+31>: ""
0x6033c0 <facebookctf_rocks+32>: "E"
0x6033c2 <facebookctf_rocks+34>: ""
0x6033c3 <facebookctf_rocks+35>: ""
0x6033c4 <facebookctf_rocks+36>: "!"
0x6033c6 <facebookctf_rocks+38>: ""
Vemos que el primer carácter es un espacio en blanco y luego SURPRISE! Si metemos eso como entrada al programa:
level.elf > enter: SURPRISE! | > Type to win, only what I want to read… | > ********** | | -> Congratulations! The key is: | 9e0d399e83e7c50c615361506a294eca22dc49bfddd90eb7a831e90e9e1bf2fb
Buscar
Entradas Recientes
- Posts
- Reemplazando la bateria del AirTag
- OpenExpo Europe décima edición, 18 de mayo: El Epicentro de la Innovación y la Transformación Digital
- Docker Init
- Kubernetes para profesionales
- Agenda: OpenExpo Europe 2022 llega el 30 de junio en formato presencial
- Libro 'Manual de la Resilencia', de Alejandro Corletti, toda una referencia para la gestión de la seguridad en nuestros sistemas
- Mujeres hackers en ElevenPaths Radio
- Creando certificados X.509 caducados
- Generador de imágenes Docker para infosec