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.
Reconocimiento
Iniciamos con el reconocimiento de puertos abiertos de la maquina victima
Luego de tener los puertos abiertos procederemos a enumerar los servicios que corren en dichos puertos
Observamos que en el servicio web tenemos un dominio, por lo que lo agregaremos a /etc/hosts. Luego de agregarlo observamos el siguiente sitio web.

Enumerando los subdominios del sitio web, encontraremos que existe uno dev
Agregando al nuestro /etc/hosts y revisando desde nuestro navegador encontraremos con el servicio de gitea.

sub dominio - dev
Luego procederemos a enumerar directorios y archivos en el subdominio
Observamos que existe un directorio .git. Para obtener los archivos y detalles del repositorio de git, usaremos git-dumper.

Ahora, para ver los cambios que se realizo ejecutaremos
Observamos que se modifico parte de un archivo en la que se cambia credenciales.

Haciendo uso de las credenciales y el usuario admin@linkvortex.htb podemos iniciar sesión el cms

Shell - bob
CVE-2023-40028
Recordemos que estamos ante un cms

Al investigar un poco sobre la versión del cms encontré que este tiene una vulnerabilidad, el que permite leer archivos del sistema. Para esta vulnerabilidad necesitamos credenciales, las cuales ya tenemos.
https://github.com/0xDTC/Ghost-5.58-Arbitrary-File-Read-CVE-2023-40028
Ejecutante, podemos observar que leemos exitosamente le archivo /etc/passwd del servidor

Enumerando encontraremos un archivo /var/lib/ghost/config.production.json, el que pudimos ver que fue modificado anteriormente.

En este encontraremos unas credenciales para bob y las cuales nos permitirán iniciar sesión por el servicio ssh.

Enumerando los privilegios del usuario encontramos que el usuario en cuestión tiene permisos para ejecutar
Shell - root
el usuario bob puede ejecutar /opt/ghost/clean_symlink.sh, el cual tiene el siguiente codigo:

Entendamos un poco de lo que hace el script.
Si CHECK_CONTENT es true se ejecuta /usr/bin/cat $QUAR_DIR/$LINK_NAME 2>/dev/null, pero antes valida si este existe al ejecutarse, por lo que al inicio ejecutaremos: CHECK_CONTENT=true .....
En esta parte del código, valida que este tenga la extensión .png y si este no lo tiene termina el programa.
Luego el script hace una validación, en las cuales se obtiene el nombre del archivo LINK_NAME y obtiene el link o a donde apunta LINK_TARGET
Luego hace una validación, en este se valida que el link simbólico no apunte a los directorio etc y root
Para poder bypasear los filtros y las validaciones, lo que haremos será un doble link simbólico.
Entendamos bien como explotarlo. Primero nos creamos un archivo test_passwd
Luego creamos un link simbólico al archivo:
y para b también:
Por lo que si hacemos cat a a.png podremos leer el archivo test_passwd

Esto nos permitirá bypasear la validación del directorio root y etc, porque al ejecutar un /usr/bin/readlink nos devolverá b

Para automatizar nos crearemos un archivo en la que aplicaremos todo lo anterior:
Ahora, dando permisos de ejecución chmod +x read_file.sh podemos leer archivos con permisos root


Luego de de leer el archivo id_rsa podemos iniciar sesión como root

Last updated