LinkVortex

LinkVortex es una máquina Linux de fácil dificultad con varias formas de aprovechar los archivos de enlaces simbólicos (symlinks). El punto de apoyo inicial consiste en descubrir un directorio .git expuesto que puede ser volcado para recuperar credenciales. Estas credenciales permiten acceder al sistema de gestión de contenidos Ghost vulnerable a CVE-2023-40028. Esta vulnerabilidad permite a los usuarios autenticados cargar enlaces simbólicos, permitiendo la lectura arbitraria de archivos dentro del contenedor de Ghost. Las credenciales expuestas en el archivo de configuración de Ghost pueden ser aprovechadas para obtener un shell como usuario en el sistema anfitrión. Por último, el usuario puede ejecutar un script con permisos sudo que son vulnerables a un ataque de condición de carrera symlink (TOCTOU). Esto presenta una oportunidad para escalar privilegios mediante la creación de enlaces a archivos sensibles en el sistema y, en última instancia, obtener acceso root.


Reconnaissance

Realizaremos un reconocimiento con Nmap para ver los puertos que están expuestos en la máquina LinkVortex. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. Verificamos que al parecer se trata de una máquina Ubuntu que dispone de una página de Nginx y del servicio SSH.

En el resultado obtenido, verificamos también en la página web está expuesto el archivo robots.txt en el cual también nos presentan algunas rutas de directorios.

Procederemos a transformar el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Procederemos a añadir la siguiente entrada en nuestro archivo /etc/hosts.

Web Enumeration

A través de la herramienta whatweb revisaremos las tecnologías que utiliza el sitio web.

Al ingresar a http://linkvortex.htb verificamos a través de Wappalyzer las tecnologías que utiliza el sitio web. Verificamos que utiliza un CMS de Ghost en una versión 5.58, esta información nos puede ser útil más adelante en busca de CVE.

Revisando las páginas que dispone el sitio web, verificamos que no logramos sacar ningún tipo de información relevante.

Tal como habíamos descubierto con el escaneo de Nmap, el archivo robots.txt se encuentra expuesto en el sitio web. En este archivo nos indican rutas de directorios que podemos investigar más adelante.

Al ingresar a http://linkvortex.htb/ghost/ verificamos que nos pide credenciales de acceso.

Revisaremos si el archivo sitemap.xml se encuentra público, en este archivo se encuentran las rutas de directorios y páginas edl sitio web. No logramos sacar ningún tipo de información interesante.

Subdomain Enumeration (fuzzing)

Procederemos a realizar una enumeración de posibles subdominios del sitio web, en este caso, el resultado obtenido nos muestran que todos los resultados nos devuelven 230 Chars, lo cual parece que no nos interese este resultado.

Volveremos a lanzar el fuzzing con wfuzz evitando que nos muestren aquellos resultados que tengan 230 CH, verificamos que logramos encontrar un subdominio llamado dev.

Procederemos a añadir esta nueva entrada en nuestro archivo /etc/hosts.

Procederemos a verificar el contenido del sitio web http://dev.linkvortex.htb y verificamos que nos encontramos con el siguiente resultado, aparentemente nada interesante.

A traves de la herramienta de dirsearch, procederemos a realizar una enumeración de directorios. Una vez finalizado el resultado de la enumeración, nos encontramos con el siguiente resultado.

Al parecer, parece haber en el sitio web un directorio de un proyecto de Git.

Git es un sistema de control de versiones distribuido, lo que significa que un clon local del proyecto es un repositorio de control de versiones completo. Estos repositorios locales plenamente funcionales permiten trabajar sin conexión o de forma remota con facilidad.

Los desarrolladores confirman su trabajo localmente y, a continuación, sincronizan la copia del repositorio con la del servidor. Este paradigma es distinto del control de versiones centralizado, donde los clientes deben sincronizar el código con un servidor antes de crear nuevas versiones.

Downloading a Git project with GitHack

Procederemos a descarganos todo el repositorio de /.git/ a través de la siguiente herramienta: GitHack.

Al verificar el resultado obtenido, comprobamos que disponemos de 2 archivos Dockerfile.ghost y authentication.test.js.

Verificando el archivo JS que parece ser un archivo de autenticaciones, probaremos de revisar el contenido y filtrar si hay algún campo donde almacene contraseñas. Verificamos que obtenemos el siguiente resultado.

Procederemos nuevamente a acceder a http://linkvortex.htb/ghost/#/signin y probaremos de autenticarnos con el usuario admin@linkvortex.htb y las credenciales OctopiFociPilfer45.

Verificamos que hemos logrado el acceso a la página web correctamente con las credenciales del usuario admin.

Initial Access

Ghost Arbitrary File Read Exploit (CVE-2023-40028)

En el resultado obtenido de la enumeración de las tecnologías del sitio web, verificamos que el sitio web utilizaba un CMS de Ghost 5.58.

Revisando posibles vulnerabilidades para esta versión, nos encontramos con el siguiente CVE-2023-40028.

Procederemos a clonarnos el repositorio en nuestro equipo atacante.

Revisaremos el funcionamiento del exploit desde el mismo repositorio de GitHub.

Al verificar como funciona el exploit, procederemos a explotar la vulnerabilidad y verificamos que hemos logrado leer el archivo /etc/passwd.

Teniendo en cuenta que podemos leer archivos locales del equipo víctima, después de revisar varios archivos típicos y no obtener ningún resultado esperado, volvimos al repositorio que nos descargamos de Git.

En este repositorio no revisamos en su momento el archivo Dockerfile.ghost. Verificamos que el contenido de este archivo indica que se ha realizado una copia de la configuración en la siguiente ruta /var/lib/ghost/config.production.json.

Probaremos de listar el contenido de este archivo de configuración explotando el CVE que hemos encontrado. Verificamos que el archivo contiene las credenciales del usuario bob@linkvortex.htb.

Procederemos a probar de conectarnos al equipo mediante SSH, verificamos que hemos logrado el acceso y obtenemos la flag de user.txt.

Privilege Escalation

Abusing sudoers privilege

Revisando si el usuario bob dispone de algún permiso de sudoers, verificamos que existe un binario inusual llamado /opt/ghost/clean_symlink.sh.

Al revisar el contenido del script de Bash, verificamos que este script podría ser parte de un proceso automatizado para monitorear enlaces simbólicos y aislar aquellos que apuntan a ubicaciones sensibles como /etc o /root, asegurando así que solo archivos seguros se dejen pasar.

Sabiendo el comportamiento del script, lo que realizaremos es crear un enlace simbólico del archivo /root/root.txt para un archivo gzzcoo.txt

Para obtener una shell como usuario root lo que realizamos es el mismo proceso anterior pero a través de la clave privada SSH del usuario root.

Guardamos el contenido de la clave en un fichero id_rsa, le damos los permisos adecuados y al conectarnos como usuario root, verificamos la flag de root.txt

Última actualización

¿Te fue útil?