
Colección de herramientas de esteganografía - ayuda con desafíos CTF
Este proyecto es una imagen Docker útil para resolver desafíos de esteganografía como los que puedes encontrar en plataformas CTF como hackthebox.eu.
La imagen viene preinstalada con muchas herramientas populares (ver lista abajo) y varios scripts de cribado que puedes usar para verificar cosas simples (por ejemplo, ejecuta check_jpg.sh imagen.jpg para obtener un informe de un archivo JPG).
Primero asegúrate de tener Docker instalado (cómo hacerlo).
Luego puedes usar los scripts de shell bin/build.sh y bin/run.sh en este repositorio para construir la imagen y ejecutar el contenedor.
Te llevará a una shell bash dentro del contenedor.
Tendrá montada la carpeta data, en la que puedes poner los archivos a analizar.
Si no usas los scripts, sigue estos pasos:
docker build -t <nombre_imagen> .) o descárgala desde Docker Hub (docker pull dominicbreuker/stego-toolkit)/data (docker run -it <nombre_imagen> -v /ruta/local/con/datos:/data /bin/bash)check_jpg.sh imagen.jpg para crear un informe rápido, o brute_jpg.sh imagen.jpg wordlist.txt para intentar extraer datos ocultos con varias herramientas y contraseñasstart_ssh.sh y conéctate a tu contenedor con redirección X11start_vnc.sh y conéctate al escritorio del contenedor a través de tu navegadorConsulta las siguientes secciones para más información:
Inicia con docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash.
Serás llevado a una shell del contenedor en el directorio de trabajo /data.
Tu carpeta host $(pwd)/data estará montada y las imágenes dentro serán accesibles.

Muchas herramientas de Linux y Windows están instaladas. Las herramientas de Windows son compatibles con Wine. Algunas herramientas se pueden usar en la línea de comandos, mientras que otras requieren soporte GUI.
Estas herramientas se pueden usar en la línea de comandos. Todo lo que tienes que hacer es iniciar un contenedor y montar los archivos de esteganografía que deseas verificar.
Herramientas para ejecutar al principio. Te permiten obtener una idea amplia de con qué estás tratando.
Herramientas diseñadas para detectar esteganografía en archivos. La mayoría realizan pruebas estadísticas. Revelarán mensajes ocultos solo en casos simples. Sin embargo, pueden dar pistas sobre qué buscar si encuentran irregularidades interesantes.
Herramientas que puedes usar para ocultar mensajes y luego revelarlos. Algunas cifran los mensajes antes de ocultarlos. Si lo hacen, requieren una contraseña. Si tienes una pista de qué tipo de herramienta se usó o cuál podría ser la contraseña, prueba estas herramientas. Algunas herramientas son compatibles con los scripts de fuerza bruta disponibles en esta imagen Docker.
Todas las herramientas a continuación tienen interfaces gráficas de usuario y no se pueden usar desde la línea de comandos. Para ejecutarlas, debes hacer que un servidor X11 esté disponible dentro del contenedor. Se admiten dos formas:
start_ssh.sh para iniciar un servidor SSH. Conéctate después con redirección X11. Requiere un servidor X11 en tu host.start_vnc.sh para iniciar un servidor VNC + cliente. Conéctate después con tu navegador al puerto 6901 y obtendrás un escritorio Xfce. Sin dependencias en el host.Alternativamente, encuentra otras formas de hacer que X11 esté disponible dentro del contenedor. Muchas formas diferentes son posibles (por ejemplo, montar sockets UNIX).
Muchas de las herramientas anteriores no requieren interacción con una GUI. Por lo tanto, puedes automatizar fácilmente algunos flujos de trabajo para realizar un cribado básico de archivos que potencialmente contengan mensajes ocultos. Dado que las herramientas aplicables difieren según el tipo de archivo, cada tipo de archivo tiene diferentes scripts.
Para cada tipo de archivo, hay dos tipos de scripts:
XXX_check.sh <archivo-estego>: ejecuta herramientas de cribado básicas y crea un informe (+ posiblemente un directorio con informes en archivos)XXX_brute.sh <archivo-estego> <wordlist>: intenta extraer un mensaje oculto de un archivo estego con varias herramientas usando una wordlist (cewl, john y crunch están instalados para generar listas; manténlas pequeñas).Los siguientes tipos de archivo son compatibles:
check_jpg.h y brute_jpg.sh (fuerza bruta ejecutando steghide, outguess, outguess-0.13, stegbreak, stegoveritas.py -bruteLSB)check_png.h y brute_png.sh (fuerza bruta ejecutando openstego y stegoveritas.py -bruteLSB)Los scripts de fuerza bruta anteriores necesitan wordlists. En mi opinión, muy probablemente no ayudará usar wordlists estándar enormes como rockyou. Los scripts son demasiado lentos para eso y los desafíos de estego no parecen estar diseñados para esto. Un escenario más probable es que tengas una corazonada sobre cuál podría ser la contraseña, pero no la sabes exactamente.
Para estos casos, se incluyen varias herramientas para generar wordlists:
john para crear muchas variantes de ellas. Usa john -wordlist:/ruta/a/tu/wordlist -rules:Single -stdout > /ruta/a/wordlist/expandida para aplicar reglas extensas (~x1000) y john -wordlist:/ruta/a/tu/wordlist -rules:Wordlist -stdout > /ruta/a/wordlist/expandida para un conjunto de reglas reducido (~x50).crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984 que generará las 26 * 26 = 676 contraseñas aa1984, ab1984, ... hasta zz1984. El formato es crunch <longitud-min> <longitud-max> <conjunto-caracteres> <opciones> y hemos usado la opción de plantilla. Consulta less /usr/share/crunch/charset.lst para ver los conjuntos de caracteres que incluye crunch.cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump si sospechas que una imagen de Donald Trump contiene un mensaje oculto cifrado. El comando extrae el sitio y extrae cadenas de al menos 8 caracteres.La imagen contiene una imagen de muestra y un archivo de audio en diferentes formatos:
/examples/ORIGINAL.jpg/examples/ORIGINAL.png/examples/ORIGINAL.mp3/examples/ORIGINAL.wavTambién contiene un script /examples/create_examples.sh que puedes ejecutar para incrustar un mensaje oculto ("¡Este es un mensaje muy secreto!") en estos archivos con muchos métodos diferentes.
Después de ejecutar este script, encontrarás estos archivos en /examples/stego-files con sus nombres indicando qué herramienta se usó para incrustar el mensaje.
Puedes ejecutar los scripts de cribado para ver si encuentran algo en ellos o intentar descifrarlos de otra manera.
Por defecto, no se pueden ejecutar herramientas GUI en un contenedor Docker ya que no hay un servidor X11 disponible. Para ejecutarlas, debes cambiar eso. Lo que se requiere para hacerlo depende de tu máquina host. Si:
brew install Xquartz)Usa la redirección X11 a través de SSH si quieres ir por este camino. Ejecuta start_ssh dentro del contenedor para iniciar el servidor, asegúrate de exponer el puerto 22 al iniciar el contenedor: docker run -p 127.0.0.1:22:22 ..., luego usa ssh -X ... al conectarte (el script imprime la contraseña).
Para no depender de X11, la imagen incluye un servidor TigerVNC y un cliente noVNC.
Puedes usarlo para abrir una sesión VNC HTML5 con tu navegador para conectarte al escritorio Xfce del contenedor. Para hacerlo, ejecuta start_vnc.sh dentro del contenedor para iniciar servidor y cliente, asegúrate de exponer el puerto 6901 al iniciar el contenedor docker run -p 127.0.0.1:6901:6901 ... y ve a localhost:6901/?password=<la_contraseña> (el script imprime la contraseña).

Comandos del GIF para copiar y pegar:
# en la 1ª shell del host
docker run -it --rm -p 127.0.0.1:22:22 dominicbreuker/stego-toolkit /bin/bash
# dentro de la shell del contenedor
start_ssh.sh
# en la 2ª shell del host (úsala para lanzar aplicaciones GUI después)
ssh -X -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost

Comandos del GIF para copiar y pegar:
# en la 1ª shell del host
docker run -it --rm -p 127.0.0.1:6901:6901 dominicbreuker/stego-toolkit /bin/bash
# dentro de la shell del contenedor
start_vnc.sh
# en el navegador, conéctate con: http://localhost:6901/?password=<contraseña_de_start_vnc>
Esta es una colección de enlaces útiles sobre esteganografía:
Los siguientes archivos multimedia de ejemplo están incluidos en este repositorio:
| Herramienta | Descripción | Cómo usar |
|---|
| file | Comprueba qué tipo de archivo tienes | file stego.jpg |
| exiftool | Comprueba los metadatos de archivos multimedia | exiftool stego.jpg |
| binwalk | Comprueba si hay otros archivos incrustados/anexados | binwalk stego.jpg |
| strings | Comprueba si hay caracteres legibles interesantes en el archivo | strings stego.jpg |
| foremost | Extrae archivos incrustados/anexados | foremost stego.jpg |
| pngcheck | Obtén detalles de un archivo PNG (o descubre si realmente es otra cosa) | pngcheck stego.png |
| identify | Herramienta de GraphicMagick para comprobar qué tipo de imagen es un archivo. También verifica si la imagen está corrupta. | identify -verbose stego.jpg |
| ffmpeg | ffmpeg se puede usar para verificar la integridad de archivos de audio y hacer que reporte información y errores | ffmpeg -v info -i stego.mp3 -f null - para recodificar el archivo y descartar el resultado |
| Herramienta | Tipos de archivo | Descripción | Cómo usar |
|---|
| stegoVeritas | Imágenes (JPG, PNG, GIF, TIFF, BMP) | Una amplia variedad de verificaciones simples y avanzadas. Consulta stegoveritas.py -h. Verifica metadatos, crea muchas imágenes transformadas y las guarda en un directorio, aplica fuerza bruta LSB, ... | stegoveritas.py stego.jpg para ejecutar todas las verificaciones |
| zsteg | Imágenes (PNG, BMP) | Detecta varios métodos LSB, también openstego y la herramienta Camouflage | zsteg -a stego.jpg para ejecutar todas las verificaciones |
| stegdetect | Imágenes (JPG) | Realiza pruebas estadísticas para encontrar si se usó una herramienta de estego (jsteg, outguess, jphide, ...). Consulta man stegdetect para más detalles. | stegdetect stego.jpg |
| stegbreak | Imágenes (JPG) | Crackeador por fuerza bruta para imágenes JPG. Afirma que puede descifrar outguess, jphide y jsteg. | stegbreak -t o -f wordlist.txt stego.jpg, usa -t o para outguess, -t p para jphide o -t j para jsteg |
| Herramienta | Tipos de archivo | Descripción | Cómo ocultar | Cómo recuperar |
|---|
| AudioStego | Audio (MP3 / WAV) | Detalles sobre cómo funciona en esta entrada de blog | hideme cover.mp3 secret.txt && mv ./output.mp3 stego.mp3 | hideme stego.mp3 -f && cat output.txt |
| jphide/jpseek | Imagen (JPG) | Herramienta bastante antigua de aquí. Aquí se instala la versión de aquí ya que la original fallaba todo el tiempo. ¡Solicita una frase de contraseña de forma interactiva! | jphide cover.jpg stego.jpg secret.txt | jpseek stego.jpg output.txt |
| jsteg | Imagen (JPG) | Herramienta LSB. No cifra el mensaje. | jsteg hide cover.jpg secret.txt stego.jpg | jsteg reveal cover.jpg output.txt |
| mp3stego | Audio (MP3) | Programa antiguo. Cifra y luego oculta un mensaje (¡cifrado 3DES!). Herramienta de Windows ejecutada con Wine. Requiere entrada WAV (puede arrojar errores para ciertos archivos WAV. Lo que funciona para mí es por ejemplo: ffmpeg -i audio.mp3 -flags bitexact audio.wav). Importante: ¡usar solo rutas absolutas! | mp3stego-encode -E secret.txt -P password /ruta/a/cover.wav /ruta/a/stego.mp3 | mp3stego-decode -X -P password /ruta/a/stego.mp3 /ruta/a/out.pcm /ruta/a/out.txt |
| openstego | Imágenes (PNG) | Varios algoritmos LSB (consulta este blog). Todavía se mantiene. | openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png | openstego extract -sf openstego.png -p abcd -xf output.txt (¡omite -xf para crear archivo con el nombre original!) |
| outguess | Imágenes (JPG) | Utiliza "bits redundantes" para ocultar datos. Viene en dos versiones: antigua=outguess-0.13 tomada de aquí y nueva=outguess de los repositorios de paquetes. Para recuperar, debes usar la que se usó para ocultar. | outguess -k password -d secret.txt cover.jpg stego.jpg | outguess -r -k password stego.jpg output.txt |
| spectrology | Audio (WAV) | Codifica una imagen en el espectrograma de un archivo de audio. | TODO | Usa la herramienta GUI sonic-visualiser |
| stegano | Imágenes (PNG) | Oculta datos con varios métodos (basados en LSB). También proporciona algunas herramientas de cribado. | stegano-lsb hide --input cover.jpg -f secret.txt -e UTF-8 --output stego.png o stegano-red hide --input cover.png -m "mensaje secreto" --output stego.png o stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATOR --output stego.png para varios generadores (stegano-lsb-set list-generators) | stegano-lsb reveal -i stego.png -e UTF-8 -o output.txt o stegano-red reveal -i stego.png o stegano-lsb-set reveal -i stego.png -e UTF-8 -g $GENERATOR -o output.txt |
| Steghide | Imágenes (JPG, BMP) y Audio (WAV, AU) | Herramienta versátil y madura para cifrar y ocultar datos. | steghide embed -f -ef secret.txt -cf cover.jpg -p password -sf stego.jpg | steghide extract -sf stego.jpg -p password -xf output.txt |
| cloackedpixel | Imágenes (PNG) | Herramienta LSB para imágenes | cloackedpixel hide cover.jpg secret.txt password crea cover.jpg-stego.png | cloackedpixel extract cover.jpg-stego.png output.txt password |
| LSBSteg | Imágenes (PNG, BMP, ...) en formatos sin comprimir | Herramientas LSB simples con código Python muy limpio y legible | LSBSteg encode -i cover.png -o stego.png -f secret.txt | LSBSteg decode -i stego.png -o output.txt |
| f5 | Imágenes (JPG) | Algoritmo esteganográfico F5 con información detallada sobre el proceso | f5 -t e -i cover.jpg -o stego.jpg -d 'mensaje secreto' | f5 -t x -i stego.jpg 1> output.txt |
| stegpy | Imágenes (PNG, GIF, BMP, WebP) y Audio (WAV) | Programa de esteganografía simple basado en el método LSB | stegpy secret.jpg cover.png | stegpy _cover.png |
| Herramienta | Tipos de archivo | Descripción | Cómo iniciar |
|---|
| Steg | Imágenes (JPG, TIFF, PNG, BMP) | Maneja muchos tipos de archivo e implementa diferentes métodos | steg |
| Steganabara (El enlace original está roto) | Imágenes (???) | Transforma imágenes interactivamente hasta que encuentres algo | steganabara |
| Stegsolve | Imágenes (???) | Transforma imágenes interactivamente, visualiza esquemas de color por separado, ... | stegsolve |
| SonicVisualiser | Audio (???) | Visualización de archivos de audio en forma de onda, muestra espectrogramas, ... | sonic-visualiser |
| Stegosuite | Imágenes (JPG, GIF, BMP) | Puede cifrar y ocultar datos en imágenes. Activamente desarrollado. | stegosuite |
| OpenPuff | Imágenes, Audio, Video (muchos formatos) | Herramienta sofisticada con larga historia. Todavía se mantiene. Herramienta de Windows ejecutada con wine. | openpuff |
| DeepSound | Audio (MP3, WAV) | Herramienta de audio estego confiable según el propio Mr. Robot. Herramienta de Windows ejecutada con wine (muy inestable, requiere VNC y se ejecuta en escritorio virtual, MP3 roto debido a falta de DLL). | deepsound solo en sesión VNC |
| cloackedpixel-analyse | Imágenes (PNG) | Visualización LSB para PNGs: úsalo para detectar valores LSB sospechosamente aleatorios en imágenes (valores cercanos a 0.5 pueden indicar que hay datos cifrados incrustados) | cloackedpixel-analyse image.png |