DockerLabs Muy Fácil Linux Debian

Trust

DockerLabs · Gobuster → Hydra SSH → sudo vim PrivEsc

// ruta Nmap Gobuster secret.php Hydra SSH sudo vim ROOT ✓
01

// Planificación & objetivo

paso 01
Objetivo del ejercicio
Trust es una máquina de la plataforma DockerLabs con dificultad Muy Fácil, basada en Linux Debian. Expone únicamente dos servicios: SSH en el puerto 22 y un servidor web Apache en el puerto 80.

El objetivo es comprometer completamente el sistema — obtener acceso inicial como usuario no privilegiado y escalar hasta conseguir una shell como root. La cadena de ataque pasa por enumeración web, extracción de un nombre de usuario expuesto, fuerza bruta de credenciales SSH y abuso de permisos sudo mal configurados.
paso 02
Resumen de fases
FaseTécnica / HerramientaResultado
Despliegueauto_deploy.shMáquina activa 172.22.0.3
ReconocimientoNmap -p- -sVPuertos 22 y 80 abiertos
Enum. WebGobuster dirsecret.php descubierto
OSINT pasivocurl / navegadorUsuario: mario
Acceso inicialHydra + rockyou.txtmario : chocolate
Post-explotaciónsudo -lvim ejecutable como root
Escaladasudo vim -c ':shell'Shell root ✓
02

// Reconocimiento & despliegue

paso 03
Despliegue de la máquina
Desplegamos la máquina con el script auto_deploy.sh de DockerLabs. Levanta el contenedor, asigna la IP interna de la red Docker y mantiene la máquina activa hasta que se para con Ctrl+C. Requiere sudo para gestionar interfaces de red Docker.
Deploy
$ sudo bash auto_deploy.sh trust.tar Máquina desplegada, su dirección IP es ——> 172.22.0.3 Presiona Ctrl+C cuando termines para eliminar la máquina
captura — despliegue● ● ●
Despliegue de la máquina Trust
captura — entorno kali-pentesting● ● ●
Entorno kali-pentesting activo
03

// Escaneo & análisis

paso 04
Escaneo de puertos — Nmap
Lanzamos Nmap con detección de versiones sobre todos los puertos TCP. El resultado identifica dos servicios: SSH en el 22 (OpenSSH 9.2p1 Debian) y HTTP en el 80 (Apache 2.4.57 Debian). Superficie de ataque mínima — todo el reconocimiento se centra en el servidor web.
Nmap
# nmap -p- -sV 172.22.0.3 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 80/tcp open http Apache httpd 2.4.57 ((Debian)) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
captura — nmap output● ● ●
Output de nmap
// puertos descubiertos
Puerto 22 (SSH) — OpenSSH 9.2p1 Debian. Puerto 80 (HTTP) — Apache 2.4.57. Sin FTP, sin SMB. El vector de entrada estará en el servidor web.
paso 05
Inspección web — Apache Default Page
Accedemos al puerto 80 en el navegador. Encontramos la página por defecto de Apache2 en Debian — no hay contenido útil visible. Esto nos indica que hay recursos no enlazados que hay que descubrir mediante fuzzing.
captura — apache default page● ● ●
Apache2 Debian Default Page
paso 06
Fuzzing de directorios — Gobuster
Aplicamos fuzzing con Gobuster usando la wordlist DirBuster medium de SecLists y extensiones php, html, txt. Gobuster prueba sistemáticamente cada entrada contra el servidor y reporta los códigos de respuesta. El objetivo es encontrar recursos ocultos no enlazados desde la página principal.
Gobuster
# gobuster dir -u http://172.22.0.3 -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-lowercase-2.3-medium.txt -x php,html,txt index.html (Status: 200) [Size: 10701] secret.php (Status: 200) [Size: 927] server-status (Status: 403) [Size: 275]
captura — gobuster output● ● ●
Output de gobuster
// hallazgo crítico
secret.php con Status 200 — recurso accesible no enlazado desde la web principal. Hay que inspeccionarlo.
paso 07
Inspección de secret.php — OSINT pasivo
Accedemos a http://172.22.0.3/secret.php. La página muestra el mensaje "Hola Mario, Esta web no se puede hackear." — el desarrollador dejó expuesto el nombre de un usuario real del sistema. Confirmamos con curl que el nombre mario está hardcodeado en el HTML. Ya tenemos el primer factor de las credenciales SSH.
captura — secret.php en navegador● ● ●
secret.php revelando usuario mario
curl
# curl http://172.22.0.3/secret.php <h1>Hola Mario,</h1> <p>Esta web no se puede hackear.</p>
captura — curl secret.php (fuente HTML)● ● ●
curl secret.php mostrando usuario en HTML
// usuario obtenido
Information disclosure en secret.php — nombre de usuario del sistema expuesto: mario.
04

// Explotación & acceso inicial

paso 08
Fuerza bruta SSH — Hydra
Con el usuario mario confirmado, lanzamos Hydra para un ataque de diccionario contra SSH usando rockyou.txt — el wordlist de contraseñas estándar en CTFs con millones de contraseñas reales filtradas. El flag -t 4 lanza 4 hilos paralelos.
Hydra
# hydra -l mario -P /usr/share/wordlists/rockyou.txt ssh://172.22.0.3 -t 4 [22][ssh] host: 172.22.0.3 login: mario password: chocolate 1 of 1 target successfully completed, 1 valid password found
captura — hydra encontrando credenciales● ● ●
Hydra encontrando usuario mario con contraseña chocolate
Usuariomario
Contraseñachocolate
ServicioSSH / 22
paso 09
Conexión SSH — Acceso inicial
Nos conectamos por SSH con las credenciales obtenidas. Al ser la primera conexión a esta IP, SSH pide confirmación para almacenar el fingerprint del host — respondemos yes. Obtenemos shell como mario.
SSH
# ssh mario@172.22.0.3 Are you sure you want to continue connecting? yes mario@172.22.0.3's password: chocolate mario@03b08966f532:~$ ← acceso inicial obtenido
captura — shell SSH como mario● ● ●
Shell SSH obtenida como usuario mario
// acceso inicial conseguido
Shell obtenida como mario. Iniciamos enumeración post-acceso para escalar a root.
05

// Post-Explotación & privesc

paso 10
Enumeración — sudo -l
El primer comando tras obtener acceso es sudo -l — lista qué binarios puede ejecutar el usuario actual con privilegios elevados. El resultado muestra que mario puede ejecutar vim como cualquier usuario del sistema, incluyendo root, sin restricciones.
sudo -l
mario@03b08966f532:~$ sudo -l User mario may run the following commands on 03b08966f532: (ALL) /usr/bin/vim
captura — sudo -l● ● ●
Output de sudo -l mostrando vim como root
// vector identificado
vim ejecutable como root via sudo sin restricciones → escalada via GTFOBins.
paso 11
Consulta GTFOBins — vim sudo
Consultamos GTFOBins para ver cómo abusar de vim con permisos sudo. En el momento de hacer esta máquina, la entrada de vim en GTFOBins tenía la sección Shell en recuadro discontinuo sin información — versión incompleta. La solución: buscar vi en GTFOBins, ya que vim es una extensión directa de vi y comparten exactamente los mismos vectores de escalada. El exploit :shell funciona igual en ambos.
captura — gtfobins vim sudo● ● ●
GTFOBins mostrando exploit de vim con sudo
captura — búsqueda de referencia● ● ●
Búsqueda de referencia escalada privilegios vim
paso 12
Escalada de privilegios — sudo vim
Ejecutamos vim con sudo y el flag -c que lanza un comando Ex al arrancar. :shell abre una shell interactiva desde dentro de vim. Como vim corre con sudo, la shell heredada es de root. Verificamos con whoami.
PrivEsc
mario@03b08966f532:~$ sudo vim -c ':shell' root@03b08966f532:/home/mario# whoami root
captura — shell root obtenida● ● ●
Shell root obtenida via sudo vim
// root obtenido ✓
Escalada completada. Shell como root (uid=0) obtenida via sudo vim -c ':shell'.
06

// Reporte & conclusiones

vulnerabilidades
Vectores explotados
VulnerabilidadImpactoMitigación
Information disclosure en secret.phpUsuario del sistema expuestoEliminar archivos con datos internos del servidor web
Contraseña débil SSH (chocolate)Acceso inicial via fuerza brutaContraseñas fuertes + deshabilitar autenticación por password
sudo vim sin restriccionesEscalada completa a rootAuditar /etc/sudoers, eliminar permisos innecesarios
lecciones
Lecciones aprendidas
Trust demuestra cómo una cadena de vulnerabilidades simples puede comprometer completamente un sistema. La enumeración web exhaustiva fue clave — sin Gobuster, secret.php nunca hubiera aparecido. El segundo aprendizaje importante es que cualquier editor de texto con permisos sudo es un vector de escalada: vim, nano, less, more... todos están en GTFOBins. Siempre auditar sudo -l tras obtener acceso inicial.
07

// Glosario

Nmap
Escáner de red de código abierto. Detecta hosts activos, puertos abiertos, versiones de servicio y sistema operativo. En pentesting es la herramienta de reconocimiento activo más utilizada. El flag -sV activa la detección de versiones; -p- escanea los 65535 puertos TCP.
Gobuster
Fuzzer de directorios y archivos web escrito en Go. Prueba sistemáticamente rutas de una wordlist contra un servidor web para descubrir recursos ocultos: paneles de admin, archivos de configuración, backups o páginas no enlazadas. Más rápido que DirBuster gracias a la concurrencia nativa de Go.
Hydra
Herramienta de fuerza bruta para múltiples protocolos: SSH, FTP, HTTP, SMB, RDP y más. Paraleliza los intentos con múltiples hilos (-t). rockyou.txt es el wordlist estándar en CTFs — contiene millones de contraseñas reales filtradas del breach de RockYou en 2009.
GTFOBins
Referencia curada (gtfobins.github.io) de binarios Unix/Linux que pueden ser abusados para escalar privilegios, leer/escribir archivos arbitrarios o ejecutar código cuando tienen permisos especiales (SUID, sudo, capabilities). Primer recurso a consultar tras encontrar un binario interesante en sudo -l.
sudo y escalada de privilegios
sudo permite ejecutar comandos con los privilegios de otro usuario (normalmente root). sudo -l lista los permisos del usuario actual. Una regla (ALL) /usr/bin/vim significa que el usuario puede ejecutar vim como cualquier usuario del sistema. Si ese binario permite invocar comandos de shell, se convierte en vector de escalada inmediato.
Information Disclosure
Vulnerabilidad por la cual un sistema expone información sensible de forma no intencionada — nombres de usuario, rutas internas, versiones de software, credenciales o datos de configuración. En Trust, el archivo secret.php expone el nombre de un usuario real del sistema, reduciendo el ataque SSH a un simple diccionario de contraseñas.