Skip to main content

Solución de Fetch the Flag CTF 2022: File Explorer

Escrito por
feature ctf 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.

Pantalla del desafío 304 File Explorer, etiquetada como node.js y Snyk Open Source, que describe archivos ocultos en una aplicación web

¿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.

Página del navegador que dice “Adelante, hackea m3”, “encuentra la bandera” y “Echa un vistazo a nuestros archivos aquí”.

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

Navegador que muestra un índice de directorio con carpetas de CSS, imágenes y JavaScript, además de archivos como about.html, favicon.ico y robots.txt.

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:

Postman muestra una solicitud GET exitosa a un sitio de explorador de archivos. La respuesta dice «Adelante, hackea m3», «encuentra la bandera» e incluye enlaces a archivos.

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/):

Postman muestra una solicitud GET exitosa a un explorador de archivos público que enumera archivos CSS, imágenes, JavaScript, HTML, favicon y robots.txt.

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.

Postman muestra una solicitud GET a un explorador de archivos público con un listado de archivos CSS, imágenes, JavaScript, HTML, favicon y robots.txt

¿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

Solicitud GET de Postman con una URL codificada que muestra una respuesta 200 OK exitosa con un listado de archivos.

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

Postman muestra una solicitud GET exitosa a una URL de explorador de archivos que devuelve una cadena con la bandera de SNYK.

¡Encontramos la bandera!

Cómo encontrar la bandera con Curl

Terminal que muestra listados de directorios con curl para un desafío de explorador de archivos, seguido de un comando que revela una bandera de Snyk CTF.

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/

Barra de direcciones del navegador que muestra una URL del explorador de archivos y la cadena del flag SNYK visible.

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.

Marketplace de extensiones de Visual Studio Code que muestra la página de la extensión Snyk Security, con controles de instalación y detalles del análisis de vulnerabilidades.

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.

Visual Studio Code muestra package.json con una advertencia de vulnerabilidad para la dependencia st@0.2.4 y dos vulnerabilidades de gravedad media.

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.

Visual Studio Code muestra un archivo de servidor Express de JavaScript con una advertencia sobre dependencias que señala dos vulnerabilidades.

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.

Editor de código que muestra una dependencia de npm con dos vulnerabilidades y una acción de Snyk para mostrar 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.

Ventana de VS Code con tema oscuro que muestra un informe de vulnerabilidad de Snyk OSS sobre un fallo de Directory Traversal en el paquete npm st.

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

Página de lección de Snyk Learn titulada «Recorrido de directorios», que explica la divulgación no intencional de archivos confidenciales e incluye una barra lateral con el progreso de la lección.

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.

Leer más

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Por qué los agentes de programación con IA siguen generando fallas de control de acceso

Los agentes de programación con IA pueden generar lógica de autorización que compila y supera la revisión, pero expone los datos de un inquilino a otro. Descubre por qué es difícil detectar el control de acceso roto y cómo prevenirlo.