Datos del reto
| Campo | Valor |
|---|---|
| CTF | Batman's Kitchen CTF |
| Reto | MyFirstBlog |
| Categoría | Web |
| Flag | bkctf{k3ys_in_th3_l0ck5} |
Descripción del reto
El reto es un blog personal en el que, por un comentario HTML dejado en una entrada "borrada" y un path traversal en el endpoint de adjuntos, se puede leer /flag.txt usando una API key expuesta.
Reconocimiento
- En la página principal hay enlaces a
/blog/1,/blog/2y/blog/4. - El CSS usa
/attachment?file=kidpix-index.png, lo que indica un endpoint de descarga de archivos controlado por el parámetrofile→ posible LFI / path traversal.
Endpoint /attachment
- Probar directamente
file=/flag.txtofile=../../../flag.txtdevuelve 403 (acceso prohibido). - El servidor parece validar rutas y no permite leer archivos arbitrarios sin más.
Blog 3
- Probar la ruta no enlazada
/blog/3muestra una entrada "[DELETED] Blog 3: Hire Me!!" con un comentario HTML:- "for documents in the 'other' folder only people with the API key has access"
- En la misma página se ve un
<object>que carga un PDF con API key en la URL:/attachment?file=resume.pdf&apiKey=906392d25b3bd7d3af491799f89f6620
Análisis de la vulnerabilidad
- Con la API key, el endpoint permite acceder a la carpeta
other(por ejemplo,resume.pdfresponde 200). - El valor del parámetro
fileno se restringe correctamente cuando se usa la API key: se puede usar../para salir del directorio permitido y leer archivos como/flag.txt.
Explotación
Uso de la API key + path traversal:
- Con la API key, desde la carpeta
otherse intenta path traversal para subir al directorio raíz y leer la flag:file=../../../flag.txt&apiKey=906392d25b3bd7d3af491799f89f6620
- La respuesta del servidor es el contenido de
/flag.txt: bkctf{k3ys_in_th3_l0ck5}.
Comando para reproducir
curl -s "http://34.186.135.240:30000/attachment?file=../../../flag.txt&apiKey=906392d25b3bd7d3af491799f89f6620"
Salida: bkctf{k3ys_in_th3_l0ck5}
Flag
bkctf{k3ys_in_th3_l0ck5}
Lecciones aprendidas
- Exposición de información sensible: API key en comentario HTML y en la URL del
<object>(no debes "post certain info on the interwebs"). - Path traversal: Con la API key no se restringe correctamente el valor de
file, permitiendo../y salir del directorio permitido hasta llegar a/flag.txt.