Solucionario retos DeepCTF

El pasado 4 y 5 de abril se llevó a cabo el DeepCTF, en esta oportunidad no tuve que jugar sólo y estuve acompañado de un equipo de lujo compuesto por @4lexaG, @andreamarin y @Jexus909. No nos fue tan bien como queríamos pero ocupamos el lugar #48 entre más de 250 equipos.

En esta entrada les compartiré las soluciones de las categorías Forense y Reversing, las otras categorías que solucionamos con el equipo están en un repositorio de github de @4lexaG https://github.com/4lexaG/DeepCTF

Forense

WarmUp (50 pts)

Descargamos el archivo y al abrirlo se trata de una imagen de Death Note

xdg-open note.jpg

Ejecutamos el comando strings note.jpg y obtenemos la primera bandera de la categoría

d33p{Alw4y5_ch3ck_5tr1ng5}

findme (90 pts)

El reto nos indica que hay algo oculto, que necesitamos una llave y que el autor puede ayudar.

ejecutamos steghide y le pasamos como salvoconducto el nombre del autor del reto “D3v1LaL”

steghide extract -sf matrix.jpeg

Una vez ingresamos el salvoconducto nos notifica la extracción del archivo flag.txt

Leemos el archivo y obtenemos la bandera

cat flag.txt

d33p{st3gh1d3_1s_fUn}

MindYou (90pts)

Descargamos y analizamos el contenido del archivo fsociety.zip

unzip -l fsociety.zip

El archivo contiene un archivo PNG con el nombre de mrrobot

Descomprimimos el archivo y abrimos el archivo png xdg-open mrrobot.png, sin embargo nos arroja el siguiente error:

Analizamos las cabeceras con el comando xxd mrrobot.png | more allí observamos que las cabeceras no corresponden a las de un archivo PNG

Buscamos la documentación de referencia de PNG y observamos los valores que debe tener la cabecera del archivo

Editamos el archivo con un editor hexadecimal, en mi caso utilizo hexedit

hexedit mrrobot.png

Sobre escribimos los primeros 4 bytes

Presionamos las teclas ctrl + s para salvar

Visualizamos nuevamente la imagen xdg-open mrrobot.png y encontramos la bandera.

d33p{M1nd_Y0ur_h34d3r5}

Cr4ckm3 (120 pts)

Este reto nos presentaba dos archivos flag.zip y secretconversation.pdf

Evalúo los archivos para saber a que nos enfrentamos.

unzip -l flag.zip

El archivo flag.zip contine un archivo llamado flag.txt

Sin embargo al intentar extraer el archivo nos solicita una contraseña

unzip flag.zip

El archivo pdf pide una contraseña para poder ser visualizado

xpdf secretconversation.pdf

Al inicio opté por intentar obtener la contraseña del .zip, una ruta bastante desasertada ya que por horas dejé ejecutando herramientas de cracking junto con una serie de diccionarios sin éxito alguno.

Tardíamente se me ocurrió evaluar el PDF, así que ejecuto la herramienta pdfid

pdfid secretconversation.pdf

Luego ejecuto la herramienta pdf-parser para conocer un poco más a que archivo nos enfrentamos

pdf-parser -s /Encrypt "secretconversation.pdf"

Intenté encontrar la contraseña con John the Ripper sin éxito alguno, así que opté por la herramienta pdfcrack y un diccionario común

pdfcrack -f secretconversation.pdf -w /usr/share/wordlists/rockyou.txt

Después de unos segundos obtenemos el password del pdf

Abrimos el pdf con el comando xpdf secretconversation.pdf -upw melisateamo y obtenemos el siguiente texto

En este texto debe estar la clave para abrir el PDF y luego de varios minutos, comienza el desespero y pruebo con otro visor de PDFs para ver otras opciones del PDF y con algo de suerte al seleccionar el texto obtengo la contraseña “f0ur4nds1x”

Descomprimimos el archivo con la contraseña y obtenemos la flag

cat flag.txt

d33p{Att3nt10n_h4ck3r_4rr1v3d}

Reversing

Nested Rev (150 pts)

Descargamos el archivo Cr4ckm3 y verificamos que tipo de archivo es:

file Cr4ckm3

Se trata de un ELF de 64-bits, otorgamos permisos de ejecución y ejecutamos el binario para entender la lógica del reto.

chmod u+x Cr4ckm3 && ./Cr4ckm3

El ejecutar el binario observamos que este requiere de la flag:

Abrimos nuestro binario en IDA, y cargamos el archivo con las opciones por defecto.

El siguiente paso es analizar los strings, vamos al menú View / Open Subviews / Strings, y allí observamos la cadena que aparecería si le entregamos la flag correcta al binario

Damos doble clic sobre el string y allí encontraremos la función aVoilaYouGotIt la cuál se imprime esta cadena

Seleccionamos la función y presionamos la tecla x para ver las referencias cruzadas, aparece solo un llamado así que damos OK.

La función se encuentra en el la dirección 0000000000001295, alli vemos una serie de comparaciones y saltos, en cada operación compara el registro al con un caracter

Visualizamos la función en modo gráfico (presionamos la barra espaciadora) y observamos que se trata de una serie de IFs y ELSEs

Vemos como la primera parte muestra las letras “d”, “3”, “3”, “p” (deep), si seguimos el flujo del código completamos nuestra flag.

d33p{y0u_r3v3rs3d_1t_w3ll}

SkipMe (200 pts)

Al igual que en el reto anterior tenemos un binario ELF de 64 bits

Deja un comentario