Este primer reto, en mi opinión, tiene un nivel de dificultad bajo (★★☆☆☆).
El título del reto es "Jump! (baby)" y en su enunciado, que pongo a continuación, se hace referencia a otro reto "Strings (baby)", de la misma categoría y nivel de dificultad muy bajo, en el que la flag se obtiene sin más que buscarla directamente en el archivo que se proporciona (por ejemplo mostrando todas aquellas cadenas de texto que comiencen por "utc{"), y se nos da a entender que en este caso ese método no nos dará la solución al desafío.
Su enunciado es el siguiente:
Descargo el archivo que se proporciona (jump), un ejecutable de Linux (ELF).
No obstante lo dicho anteriormente, utilizo el software 'strings' para intentar localizar directamente la flag:
Y lo único que obtengo es una flag falsa.
Para obtener más información sobre el funcionamiento del ejecutable lo ejecuto:
Y directamente se muestra la flag falsa.
Desensamblo el ejecutable Linux con el software IDA para realizar un análisis estático del código y veo que la función 'main' se limita a mostrar la flag falsa:
Asimismo, veo que hay una función 'gimme_flag' que parece mostrar la flag y a la que por el título y enunciado del reto entiendo que es a la que debo realizar un salto para obtener la solución:
Para ello utilizo gdb, un depurador ('debugger') muy popular. En primer lugar desensamblo la función 'gimme_flag':
Tras analizar el código, creo que para que se muestre la flag se debe producir un salto a gimme_flag+108.
Para ello, pongo un punto de ruptura ('breakpoint') al inicio de la función 'main' (main+0) y otro en la función 'gimme_flag' (gimme_flag+84), ejecuto, cuando se detiene en el primer punto de ruptura salto al principio de la función 'gimme_flag' (gimme_flag+0), y cuando se detiene en el segundo punto de ruptura salto a gimme_flag+108:
Y ya puedo ver la flag: utc{a_l1ttle_h4rd3r_:)}.
Comentarios
Publicar un comentario