Hedgehog
DockerLabs · Web hint → Hydra invertido → tails:3117548331 → sudo tails→sonic→root
// ruta
Nmap→
Web "tails"→
tac rockyou→
Hydra→
SSH tails→
sudo sonic→
sudo root→
ROOT ✓
01
// Planificación & objetivo
paso 01
Objetivo del ejercicio
Hedgehog es una máquina de dificultad Muy Fácil en DockerLabs, basada en Ubuntu 24.04 LTS. Expone SSH en el puerto 22 y un servidor web Apache en el 80.
Esta máquina introduce una técnica de pensamiento lateral en fuerza bruta: cuando el ataque convencional con rockyou.txt no da resultado en un tiempo razonable, invertir el diccionario con
Esta máquina introduce una técnica de pensamiento lateral en fuerza bruta: cuando el ataque convencional con rockyou.txt no da resultado en un tiempo razonable, invertir el diccionario con
tac puede revelar contraseñas que están al final del wordlist. La escalada introduce una cadena de pivoting de usuario: tails → sonic → root, todos mediante permisos sudo encadenados.
paso 02
Resumen de fases
| Fase | Técnica / Herramienta | Resultado |
|---|---|---|
| Reconocimiento | Nmap -sV -sC | Puertos 22 y 80, Ubuntu 24.04 |
| Enum. Web | curl / navegador | Página muestra solo "tails" → usuario |
| Preparación | tac + sed (rockyou invertido) | rockyou_reversed.txt sin espacios |
| Fuerza bruta | Hydra + rockyou_reversed.txt | tails : 3117548331 |
| Acceso inicial | SSH | Shell como tails |
| PrivEsc paso 1 | sudo -u sonic /bin/bash | Shell como sonic |
| PrivEsc paso 2 | sudo -u root /bin/bash | Shell root ✓ |
02
// Reconocimiento & despliegue
paso 03
Despliegue de la máquina
Desplegamos con auto_deploy.sh. IP asignada: 172.29.0.2.
captura — despliegue● ● ●
03
// Escaneo & análisis
paso 04
Escaneo de puertos — Nmap
Lanzamos Nmap con detección de versiones y scripts NSE. Resultado: SSH en el 22 (OpenSSH 9.6p1 Ubuntu) y HTTP en el 80 (Apache 2.4.58 Ubuntu). El sistema operativo es Ubuntu 24.04 LTS.
Nmap
# nmap -sV -sC 172.29.0.2
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu
80/tcp open http Apache httpd 2.4.58 (Ubuntu)
|_http-title: Site doesn't have a title (text/html)
captura — nmap output● ● ●
paso 05
Inspección web — pista del usuario
Accedemos al puerto 80 en el navegador. La página muestra una única palabra: tails. Sin más contenido, sin links, sin formularios. Esta palabra es la pista directa del nombre de usuario del sistema — el creador de la máquina lo expone explícitamente en la web para guiar el vector de ataque hacia fuerza bruta SSH con ese usuario.
captura — web mostrando "tails"● ● ●
// usuario identificado
La web expone directamente el nombre de usuario: tails. Vector: fuerza bruta SSH contra este usuario.
04
// Explotación & acceso inicial
paso 06
Primer intento — Hydra con rockyou normal
Lanzamos Hydra con rockyou.txt en orden estándar. Tras más de 15 minutos sin resultado, detenemos el ataque. DockerLabs tiene como norma que la contraseña debe estar entre las primeras 5000 líneas de rockyou — este comportamiento inusual sugiere que la contraseña está al final del wordlist, no al principio.
Hydra normal
# hydra -l tails -P /usr/share/wordlists/rockyou.txt ssh://172.29.0.2 -t 4
# +15 minutos sin resultado → contraseña al final del diccionario
# Solución: invertir rockyou.txt con tac
captura — hydra normal sin resultado tras largo tiempo● ● ●
paso 07
Preparación del diccionario invertido — tac + sed
La solución es invertir el orden de rockyou.txt para que las contraseñas del final pasen al principio. Usamos dos comandos encadenados:
—
—
El resultado es
—
tac: invierte el orden de líneas de un archivo (lo opuesto a cat)—
sed 's/ //g': elimina los espacios en blanco que pueden generar líneas vacías o problemas de parsing en HydraEl resultado es
rockyou_reversed.txt — el mismo diccionario pero de abajo hacia arriba.
Invertir diccionario
# Paso 1: invertir el orden de líneas
# tac /usr/share/wordlists/rockyou.txt > rockyou_reversed.txt
# Paso 2: eliminar espacios que pueden romper Hydra
# cat rockyou_reversed.txt | sed 's/ //g' rockyou_reversed.txt > temp.txt && mv temp.txt rockyou_reversed.txt
captura — tac invirtiendo rockyou● ● ●
captura — sed eliminando espacios● ● ●
paso 08
Hydra con diccionario invertido — Credenciales obtenidas
Relanzamos Hydra con el diccionario invertido y aumentamos los hilos a 64 para acelerar el proceso. En menos de 2 minutos Hydra encuentra la contraseña: 3117548331 — un número que efectivamente estaba en la parte final de rockyou.txt, lo que explica por qué el ataque normal no la encontraba en tiempo razonable.
Hydra invertido
# hydra -l tails -P rockyou_reversed.txt ssh://172.29.0.2 -t 64
[22][ssh] host: 172.29.0.2 login: tails password: 3117548331
1 of 1 target successfully completed, 1 valid password found
captura — hydra con -t 4 y reversed (inicio)● ● ●
captura — hydra encontrando tails:3117548331● ● ●
Usuariotails
Contraseña3117548331
ServicioSSH / 22
paso 09
Conexión SSH — Acceso como tails
Nos conectamos por SSH con las credenciales obtenidas. El servidor es Ubuntu 24.04 LTS. Obtenemos shell como tails.
SSH
# ssh tails@172.29.0.2
tails@172.29.0.2's password: 3117548331
tails@462530a48527:~$ ← acceso inicial obtenido
captura — shell SSH como tails● ● ●
// acceso inicial conseguido
Shell como tails. Iniciamos enumeración de escalada.
05
// Post-Explotación & privesc
paso 10
sudo -l — Cadena de pivoting tails → sonic → root
Ejecutamos
Desde sonic, ejecutamos de nuevo
sudo -l. El resultado revela que tails puede ejecutar cualquier comando como sonic sin contraseña (NOPASSWD: ALL). Pivotamos a sonic con sudo -u sonic /bin/bash.Desde sonic, ejecutamos de nuevo
sudo -l (implícito en la captura) — sonic puede ejecutar cualquier comando como root. Un segundo sudo -u root /bin/bash nos da la shell final.
PrivEsc encadenado
# Como tails — verificamos permisos sudo
tails@host:~$ sudo -l
(sonic) NOPASSWD: ALL
# Pivotamos a sonic
tails@host:~$ sudo -u sonic /bin/bash
sonic@host:/home/tails$
# Desde sonic — escalamos a root
sonic@host:~$ sudo -u root /bin/bash
root@host:/home/tails# whoami
root
captura — sudo -l mostrando sonic NOPASSWD● ● ●
captura — pivot tails → sonic● ● ●
// root obtenido ✓
Cadena completada: tails → sonic → root via permisos sudo NOPASSWD encadenados.
06
// Reporte & conclusiones
vulnerabilidades
Vectores explotados
| Vulnerabilidad | Impacto | Mitigación |
|---|---|---|
| Information disclosure en web (usuario expuesto) | Usuario SSH identificado sin autenticación | No exponer usuarios del sistema en webs públicas |
| Contraseña débil SSH (en rockyou.txt) | Acceso inicial via fuerza bruta | Contraseñas largas y aleatorias. Usar solo autenticación por clave pública |
| sudo NOPASSWD tails → sonic (ALL) | Movimiento lateral a sonic sin credenciales | Limitar comandos específicos en sudoers, nunca usar ALL |
| sudo NOPASSWD sonic → root (ALL) | Escalada completa a root | Auditar /etc/sudoers, eliminar permisos innecesarios |
lecciones
Lecciones aprendidas
Hedgehog enseña que el pensamiento lateral es clave en pentesting. Cuando una técnica no da resultado en tiempo razonable, hay que cambiar el enfoque — en este caso invertir el diccionario fue la solución. La lección metodológica: si rockyou.txt en orden normal no encuentra la contraseña rápido, vale la pena probar el orden inverso, una wordlist diferente, o mutaciones de contraseña antes de rendirse.
La escalada refuerza que sudo ALL sin restricciones es siempre un riesgo crítico, especialmente en cadena. Cada usuario del sistema con
La escalada refuerza que sudo ALL sin restricciones es siempre un riesgo crítico, especialmente en cadena. Cada usuario del sistema con
NOPASSWD: ALL es un peldaño hacia root.
07
// Glosario
tac — inversor de líneas
Comando Unix que imprime un archivo en orden inverso — última línea primero. Es literalmente
cat al revés, tanto en nombre como en función. tac archivo.txt muestra las líneas de abajo hacia arriba. En pentesting es útil para invertir wordlists cuando se sospecha que la contraseña objetivo está al final del diccionario, convirtiéndola en la primera candidata del ataque.sed — Stream Editor
Herramienta de procesamiento de texto en Unix que aplica transformaciones a streams de datos. El patrón
s/buscar/reemplazar/flags es la sintaxis más común. En este writeup se usó sed 's/ //g' para eliminar todos los espacios del diccionario invertido — el flag g indica reemplazo global (todas las ocurrencias de la línea, no solo la primera).sudo -u usuario comando
La flag
-u de sudo permite ejecutar un comando como un usuario específico distinto de root. sudo -u sonic /bin/bash abre una shell con la identidad de sonic. Si el usuario actual tiene permiso sudo sobre ese usuario (definido en /etc/sudoers), la ejecución se realiza sin contraseña cuando está marcado como NOPASSWD. Es un vector de escalada cuando los permisos están mal configurados en cadena.Pivoting de usuarios (sudo chaining)
Técnica de escalada donde se encadenan múltiples saltos de usuario mediante permisos sudo. En lugar de ir directamente a root, el atacante sigue una cadena: usuario_inicial → usuario_intermedio → root. Cada salto requiere que el usuario actual tenga permiso sudo sobre el siguiente. Es especialmente peligroso cuando se usa
ALL en lugar de restringir comandos específicos en /etc/sudoers.