Squashed - HackTheBox

Featured image

⚔️En esta máquina Linux de nivel easy tendremos que montar directorios compartidos nfs, obtener reverse shell a través de la subida de un archivo malicioso y escalaremos privilegios a través del fichero .Xauthority⚔️

🎥Canal Writeups Youtube🎬 –> https://www.youtube.com/channel/UCllewdxU0OQudNp9-1IVJYQ

HTBadge

Un pequeño INDICE

  1. Reconocimiento.
  2. Enumeración.
  3. Escalada de Privilegios.

Reconocimiento #

Reconocimiento de Puertos 🔍

Como de costumbre comienzo con el reconocimiento, pero antes de lanzar la utilidad nmap, lanzo el script Whichsystem.py que me sirve para identificar el sistema operativo de la máquina a la que me voy a enfrentar.

Esta heramienta creada por s4vitar se basa en el ttl (time to live) para identificar si es una máquina que corre un sistema operativo Linux o Windows.

TTL Sistema Operativo
64 Linux
128 Windows

En este caso me arroja un TTL de 63, por lo que al acercarse más a 64 que a 128 ya sé que es una máquina Linux.

Una vez que ya se que es una máquina Linux puedo proceder al reconocimiento de puertos.

# Primer escaneo para sacar los puertos abiertos de la máquina
nmap -p- -Pn -n --min-rate 5000 10.10.11.191 --open -vvv

# Segundo escaneo para sacar la versión de lo que se ejecuta en cada puerto y lanzamiento de una serie de scripts básicos de nmap contra dichos puertos.
nmap -p80,22,111 -sCV -n 10.10.11.191

Por el momento tengo la siguiente información:

Puerto Servicio Versión
22 ssh OpenSSH 8.2p1 Ubuntu
80 http Apache httpd 2.4.41
111 rpcbind rpcbind 2-4

En el puerto 111 (rpcbind) hay varias comparticiones nfs.

Iré por partes, comenzando por la enumeración del puerto 80 en el que reside un servidor web.

Enumeración #

Puerto 8️⃣0️⃣ 🔢

Accedo a la url desde el navegador para ver que me encuentro.

Aparentemente no hay nada útil a primera vista, en el código fuente tampoco.

Procedo a fuzzear para ver que rutas existen en el servidor…

Pero no encuentro nada útil… Busqué vhosts pero tampoco había nada por lo que decido pasar al puerto 111.

Puerto 1️⃣1️⃣1️⃣ 🔢

En el escaneo nmap encontré varias comparticiones o montajes nfs que podría intentar montar en mi máquina.

Os dejo un recurso muy útil para que puedan entenderlo bien y explotarlo.

https://hacktricks.boitatech.com.br/pentesting/nfs-service-pentesting

Existen varios scripts de nmap para enumerar nfs así como un módulo de mestaploit.

Primeramente he de averiguar que rutas puedo montar.

# Primero he de averiguar que carpetas tiene el servidor disponibles para montar
> showmount -e 10.10.11.191
Export list for 10.10.11.191:
/home/ross *
/var/www/html *

Puedo montar esas dos rutas, por lo que creo dos directorios en /tmp para montar cada directorio de servidor en cada carpeta creada en /tmp.

# Creo los directorios
mkdir /tmp/ross
mkdir /tmp/www
# Monto los directorios en cada carpeta
sudo mount 10.10.11.191:/home/ross /tmp/ross
sudo mount 10.10.11.191:/var/www/html /tmp/www

Una vez montados accedo al directorio home del usuario ross y echo un vistazo a ver que encuentro…

Veo que existe un archivo llamado Passwords.kdbx que es básicamente el archivo de la base de datos que usa keepass para almacenar las contraseñas.

Intento obtener el hash de la contraseña para posteriormente intentar crackearlo con john o hashcat.

# Con la herramienta keepas2john intento sacar el hash con el siguiente comando.
keepass2john Passwords.kdbx > /home/elc4br4/HTB/Squashed/hashkdbx

Pero al intentarlo me arroja un error.

Tras investigar durante un buen rato llego a la conclusión de que es un rabbit hole y que he de ir por otro camino…

Aún tengo el directorio /var/www/html por investigar, asique una vez montado intento acceder pero no tengo permisos.

Como vemos solo tiene acceso al directorio el usuario www-data y su uid es 2017, por lo que podría intentar algo…

Crearé un usuario en mi máquina llamado www-data con el uid 2017.

Una vez creado ya consigo acceder al directorio.

Recordemos que estoy dentro de la ruta del servidor web, por lo que podría crearme una reverse shell y subirla al propio servidor.

De la siguiente forma:

Usaré la reverse shell de pentest monkey.

# Servidor python3 
python3 -m http.server 8081

Y ya tengo acceso al sistema como el usuario alex.

Pero antes de continuar actualizo la tty para tener una shell estable e interactiva.

> script /dev/null -c bash

> Ctrl+z

> stty raw -echo; fg 
        reset
    terminal type? xterm

export TERM=xterm
export SHELL=bash

Ahora ya tengo una shell más estable e interactiva.

Escalada de Privilegios #

.Xauthority ☣️

Toca escalar privilegios, y para ello en primer lugar lanzo el script linpeas.sh

Peeeerooo no encuentro nada útil, asique recuerdo que en el directorio que montamos anteriormente /home/ross había archivos que no podíamos leer, por lo que podría realizar lo mismo que anteriormente para poder leerlos.

Creo el usuario ross y le asigno el uid 1001.

Ahora veo que puedo leer aquellos archivos que antes no podía y veo que un posible vector de escalada puede ser a través de .Xauthority.

Buscando información al respecto encuentro lo siguiente.

https://blog.stderror.net/post/hijack-a-xsession/

Para conseguir la escalada de privilegios sigo estos pasos:

XAUTHORITY=/tmp/.Xauthority
export XAUTHORITY

# Realizo la captura de pantalla de la sesión
xwd -root -screen -silent -display :0 -out /tmp/captura.xwd
xwud -in captura.xwd

Y ya tenemos la password del usuario root para loguearnos por ssh.

Me logueo y ya puedo leer la flag de usuario root.