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
Contenido
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