Solución de Fetch the Flag CTF 2022: File Explorer
9 de noviembre de 2022
0 minutos de lectura¡Gracias por jugar Fetch con nosotros! Felicitaciones a los miles de jugadores que participaron en Fetch the Flag CTF. Y muchísimas gracias a los Snykers que crearon, probaron y documentaron los desafíos.
Si participaste en Fetch the Flag 2022 de Snyk y buscas la respuesta al desafío File Explorer, estás en el lugar indicado. ¡Veamos la solución juntos!
Empecemos con la fase de reconocimiento
En esta fase del desafío, un atacante identifica un objetivo vulnerable y explora cómo explotarlo. En nuestro caso, tenemos un enlace a un sitio web y otro a un repositorio público en GitHub. Solo necesitamos un punto de entrada para comenzar.

¿Qué tenemos?
Primero revisamos el enlace y vamos a http://file-explorer.c.ctf-snyk.io/. Nos encontramos con unas líneas de texto y una indicación para revisar los archivos haciendo clic en un enlace.

Hacemos clic en el enlace y vamos a la carpeta /public/, donde vemos que tenemos acceso a algunos archivos de la aplicación.

Podemos deducir que tendremos que realizar un recorrido de directorios por el nombre y la descripción del desafío, y por el enlace /public/.
¿Qué es un recorrido de directorios?
Un ataque de recorrido de directorios (también conocido como recorrido de rutas) busca acceder a archivos y directorios almacenados fuera de la carpeta prevista. Al manipular archivos con secuencias de punto-punto-barra (../) y sus variantes, o al usar rutas de archivo absolutas, es posible acceder a archivos y directorios arbitrarios del sistema de archivos, incluidos el código fuente de la aplicación, la configuración y otros archivos críticos del sistema.
Las vulnerabilidades de recorrido de directorios pueden provocar filtraciones de información que permiten al atacante conocer la estructura de las carpetas o leer el contenido de archivos sensibles del sistema.
Cómo encontrar la bandera con Postman
Los CTF consisten en usar todas las herramientas disponibles, así que usemos Postman para realizar el ataque de recorrido de rutas. Empezamos con una solicitud GET sencilla (http://file-explorer.c.ctf-snyk.io) para acceder al sitio web. Obtenemos el mismo resultado que en el navegador:

También obtenemos el mismo resultado al agregar /public al final de la URL con esta solicitud GET (http://file-explorer.c.ctf-snyk.io/public/):

La secuencia punto-punto-barra (../) nos redirige a la página de inicio del sitio web. Probemos una variante de la secuencia mediante la codificación de URL.

¿Qué es la codificación de URL?
La codificación de URL reemplaza los caracteres ASCII no seguros por un signo "%" seguido de dos dígitos hexadecimales. En nuestro caso, usaremos %2e para . y %2f para /.
Veamos qué obtenemos con esta solicitud GET (http://file-explorer.c.ctf-snyk.io/public/%2e

Vemos un archivo de bandera. Naveguemos hasta él con esta solicitud GET (http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag):

¡Encontramos la bandera!
Cómo encontrar la bandera con Curl

Intentémoslo de nuevo, esta vez usando solo curl. Seguiremos la misma lógica y empezaremos consultando las carpetas del sitio web con este comando:
curl http://file-explorer.c.ctf-snyk.io/public/
Luego usamos la vulnerabilidad de recorrido de rutas y consultamos con curl la carpeta superior a la carpeta public con este comando:
curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/
Por último, consultamos con curl la bandera con el siguiente comando:
curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag
Cómo encontrar la bandera con el navegador
También podemos hacerlo directamente en el navegador. Escribe la siguiente URL en el navegador para ver la página que nos permite acceder a la bandera:
http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/

Cómo encontrar la bandera con la extensión de Snyk para IDE
Para hacerlo, empezamos por clonar el repositorio público y abrirlo en Visual Studio Code. Instalamos la extensión Snyk Security para IDE desde el marketplace escribiendo "Snyk" para encontrarla. Luego, reinicia el IDE después de la instalación y ejecuta npm install.

La primera vez que hagas clic en el ícono de Patch (nuestra mascota) en la barra lateral izquierda, no verás las vulnerabilidades de seguridad de código abierto del proyecto hasta que te autentiques. Puedes hacerlo con una cuenta gratuita de Snyk. Después de autenticarte, ¡puedes iniciar tu primer análisis!
También puedes revisar el archivo package.json, donde vemos un par de vulnerabilidades en el paquete st.

st es un módulo para servir archivos estáticos en páginas web y contiene una vulnerabilidad de este tipo. En nuestro ejemplo, vemos en el archivo app.js que servimos archivos desde la ruta public.

Al volver al archivo package.json, pasamos el cursor sobre el paquete st y hacemos clic en la bombilla amarilla para ver la vulnerabilidad más grave.

Se te redirigirá a la vulnerabilidad de recorrido de directorios. En esta página puedes obtener más información sobre la vulnerabilidad, qué versión la introduce, cómo corregirla y ver una prueba de concepto.

También puedes obtener más información sobre esta vulnerabilidad haciendo clic en Learn about this vulnerability.

Resumen de File Explorer
Pensemos en cuántas líneas de código escribimos nosotros frente a la cantidad de componentes o paquetes que importamos en nuestro código. No queremos reinventar la rueda ni perder tiempo reescribiendo algo que probablemente ya exista como paquete en nuestro ecosistema.
Este desafío era un ejemplo de ello. Tenemos un sitio web sencillo en el que implementamos el paquete st para servir archivos estáticos. Pero al usar una versión antigua del paquete, incorporamos una vulnerabilidad a nuestro proyecto. Esto le da a un posible atacante la oportunidad de encontrar archivos sensibles, credenciales o contraseñas. ¡Asegúrate de mantener actualizados los componentes de tus proyectos para reducir la superficie de ataque!
Espero que hayas disfrutado File Explorer y los demás desafíos del CTF :)
¿Quieres saber cómo encontramos las demás banderas? Visita nuestra página de soluciones de Fetch the Flag para ver cómo lo hicimos.



