Recursos CTF

Uno de los trucos de esteganografía más comunes es ocultar un archivo dentro de una imagen. El archivo se abrirá normalmente como una imagen, pero también guardará archivos ocultos dentro, comúnmente zip, texto e incluso otros archivos de imagen.

La razón por la que esto funciona es porque cuando se lee un archivo de imagen, tiene bytes de inicio y final que dictan el tamaño de la imagen. El visor de imágenes que utilice utilizará la información entre estos bytes para presentarle una imagen, ignorando cualquier cosa después del byte de terminación.

Por ejemplo, el byte de terminación para un JPEG es FF D9 en hexadecimal, por lo que utilizando un visor hexadecimal (xxd es bueno para Linux, o algo como HxD para Windows) puede averiguar dónde termina la imagen. Sin embargo, estos bytes a veces son difíciles de encontrar en un mar de números, por lo que mirar el volcado del hexadecimal (el texto que representa los bytes hexadecimales) también puede ayudarlo a encontrar ocultos .txt or .archivos zip.

Ejemplo

En el ejemplo se utiliza una implementación muy simple de esta estrategia.archivo jpg en este directorio. Si lo guarda en su computadora y lo abre con un visor de imágenes, se le presentará una imagen jpg simple.

Ahora intentemos encontrar la bandera. Abra la imagen en su editor hexadecimal favorito y comience a buscar algo extraño (Puede encontrar la bandera en sí desde el volcado en este punto, pero por ejemplo, intente extraerla). Cerca de la parte inferior del archivo, debería ver el byte de terminación de un jpg ffd9:

01e17a0: 685c 7fab 8eb4 5b32 61f1 c4ff d950 4b03 h\....[2a....PK.

Otra parte importante de esta línea es PK cerca del final. PK son las iniciales de Phil Katz, el inventor del archivo zip, e indican que un archivo zip comienza en ese punto.

Usando esta información podemos usar otra herramienta útil para Linux, dd). El comando dd es muy versátil y permite copiar y convertir multitud de archivos. En nuestro caso, vamos a usarlo para extraer el archivo zip.

Sabemos dónde está la ubicación del archivo zip, pero dd solo toma valores decimales, por lo que convertimos la ubicación hexadecimal 0x01e17ad de hexadecimal a decimal para obtener 1972141.

Introduciendo esto en dd:

dd if=example.jpg bs=1 skip=1972141 of=foo.zip

Esto toma el ejemplo de la imagen.jpg, el archivo’ in ‘ if, lee un bloque a la vez,’ block size ‘bs, salta al bloque 1972141, salta y lo escribe en el zip’ out file ‘ que llamamos foo.Postal. Cuando esto se complete, debería tener un archivo zip que pueda descomprimir fácilmente para acceder al archivo de texto que contiene.

Este es el largo camino para resolver un problema de esteganografía simple, pero muestra cómo funciona la estrategia. En la sección de Resolución se describen métodos más concisos y eficientes.

Detectar

Estos desafíos se presentan generalmente como una imagen simple sin otras instrucciones, y depende del competidor ejecutarla a través de un editor hexadecimal para averiguar si involucra esteganografía. Si se le presenta una imagen y no hay instrucciones, su apuesta más segura es que tiene algo oculto después de las etiquetas de cierre de la imagen.

Resolver

Aunque es posible y a veces práctico resolver estas tareas utilizando herramientas de linux como dd, hay algunas herramientas que lo hacen mucho más fácil. Binwalk es una herramienta inmensamente útil que detecta y extrae automáticamente archivos ocultos con herramientas de esteganografía

Ejemplo CTF

La esteganografía de este tipo generalmente no tiene una puntuación muy alta, pero está ampliamente extendida. BackdoorCTF 2014 creó uno que generalmente es sencillo, ejemplo ctf.jpg, pero involucra múltiples capas.

XXD

HxD

DD,

Binwalk

Leave a Reply

Tu dirección de correo electrónico no será publicada.