// 01
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.
// 02
Reconocimiento
// 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.
// 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.
// 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.
// 03
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.
// 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.
// 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.
// 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.
// 04
Acceso y escalada
// 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".
// 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.
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.
// 05
Referencia de comandos
- -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.
- nmap.xsl → Hoja de estilo oficial que da formato al informe.
- Description / Title → Campos de texto donde el autor dejó el usuario.
- extract → Saca el contenido embebido del archivo.
- -sf → "stego file": la imagen que contiene los datos.
- -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).
- 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.
// 06
Glosario
// 07
Curiosidades
- El archivo oculto
secreto.txtes 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. 123456lleva 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/bashaparece 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.
// 08
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.