Skip to main content

Compte rendu du CTF Fetch the Flag 2022 : File Explorer

Écrit par
feature ctf file explorer

9 novembre 2022

0 minutes de lecture

Merci d’avoir participé à Fetch avec nous ! Félicitations aux milliers de joueurs qui nous ont rejoints pour le CTF Fetch the Flag. Un grand merci également aux Snykers qui ont créé, testé et documenté les défis !

Si vous avez participé à Fetch the Flag de Snyk en 2022 et que vous cherchez la solution du défi File Explorer, vous êtes au bon endroit. Découvrons ensemble la solution !

Commençons par la phase de reconnaissance

Lors de cette phase du défi, un attaquant identifie une cible vulnérable et cherche comment l’exploiter. Ici, nous avons un lien vers un site web et un lien vers un dépôt public sur GitHub. Un seul point d’entrée nous suffit pour commencer.

Écran du défi File Explorer 304, portant les mentions node.js et Snyk Open Source et décrivant des fichiers cachés dans une application web

De quoi disposons-nous ?

Nous commençons par vérifier le lien et accédons à http://file-explorer.c.ctf-snyk.io/. Quelques lignes s’affichent, ainsi qu’une invitation à consulter les fichiers en cliquant sur un lien.

Page du navigateur affichant « Allez-y, piratez m3 », « trouvez le flag » et « Consultez nos fichiers ici. »

Nous cliquons sur le lien et accédons au dossier /public/, où nous constatons que nous avons accès à certains fichiers de l’application.

Navigateur affichant l’index d’un répertoire contenant des dossiers CSS, images et JavaScript, ainsi que des fichiers comme about.html, favicon.ico et robots.txt.

Le nom du défi, sa description et le lien /public/ nous laissent penser qu’il faudra effectuer un traversal de répertoires. 

Qu’est-ce qu’une traversée de répertoires ?

Une attaque par traversal de répertoires (également appelée traversal de chemin) vise à accéder à des fichiers et des répertoires situés en dehors du dossier prévu. En manipulant les fichiers à l’aide de séquences point-point-barre oblique (../) et de leurs variantes, ou en utilisant des chemins de fichiers absolus, il peut être possible d’accéder à des fichiers et répertoires arbitraires du système de fichiers, notamment au code source de l’application, à sa configuration et à d’autres fichiers système critiques.

Les vulnérabilités de traversal de répertoires peuvent entraîner des fuites d’informations et permettre à un attaquant de découvrir la structure des dossiers ou de lire le contenu de fichiers sensibles sur le système. 

Trouver le flag avec Postman

Les CTF consistent à utiliser tous les outils à votre disposition. Utilisons donc Postman pour effectuer l’attaque par traversal de chemin. Commençons par une simple requête GET (http://file-explorer.c.ctf-snyk.io) pour accéder au site web. Le résultat est le même que dans le navigateur :

Postman affiche une requête GET réussie vers un site d’exploration de fichiers. La réponse indique « Go ahead hack m3 », « find the flag » et propose des liens vers des fichiers.

Nous obtenons le même résultat en ajoutant /public à la fin de l’URL avec cette requête GET (http://file-explorer.c.ctf-snyk.io/public/) :

Postman affiche une requête GET réussie vers un explorateur de fichiers public, qui répertorie des fichiers CSS, des images, JavaScript, HTML, un favicon et un fichier robots.txt.

La séquence point-point-barre oblique (../) redirige vers la page d’accueil du site web. Essayons une variante de cette séquence en utilisant l’encodage d’URL.

Postman affichant une requête GET vers un explorateur de fichiers public avec un index répertoriant des fichiers CSS, des images, JavaScript, HTML, favicon et robots.txt

Qu’est-ce que l’encodage d’URL ?

L’encodage d’URL remplace les caractères ASCII non sécurisés par un « % » suivi de deux chiffres hexadécimaux. Ici, nous utiliserons %2e pour le caractère . et %2f pour le caractère /.

Voyons le résultat de cette requête GET (http://file-explorer.c.ctf-snyk.io/public/%2e

Requête GET dans Postman utilisant une URL encodée et affichant une réponse 200 OK ainsi que le contenu d’un répertoire de fichiers.

Nous voyons un fichier flag. Accédons-y avec cette requête GET (http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag) :

Postman affiche une requête GET réussie vers l’URL d’un explorateur de fichiers, qui renvoie une chaîne correspondant à un flag SNYK.

Nous avons trouvé le flag !

Trouver le flag avec Curl

Terminal affichant des listes de répertoires avec curl pour un défi File Explorer, puis une commande révélant un flag du CTF Snyk.

Réessayons, cette fois en utilisant simplement curl. Nous allons suivre la même logique et commencer par interroger les dossiers du site web avec cette commande :

curl http://file-explorer.c.ctf-snyk.io/public/

Nous exploitons ensuite la vulnérabilité de traversal de chemin et interrogeons le dossier situé au-dessus du dossier public avec cette commande :

curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/

Enfin, nous interrogeons le fichier flag avec la commande suivante :

curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag

Trouver le flag avec le navigateur

Nous pouvons aussi le faire directement dans le navigateur. Saisissez l’URL suivante dans votre navigateur pour afficher la page qui permet d’accéder au flag :

http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/

Barre d’adresse du navigateur affichant une URL d’explorateur de fichiers et la chaîne du drapeau SNYK.

Trouver le flag avec l’extension IDE de Snyk

Pour cela, nous commençons par cloner le dépôt public et l’ouvrons dans Visual Studio Code. Nous installons l’extension de sécurité Snyk pour IDE depuis la marketplace en recherchant « Snyk ». Rechargez ensuite votre IDE après l’installation et exécutez npm install.

Marketplace des extensions Visual Studio Code affichant la page de l’extension Snyk Security, avec les commandes d’installation et des informations sur l’analyse des vulnérabilités.

La première fois que vous cliquez sur la petite icône de Patch (notre mascotte) dans la barre latérale gauche, vous ne verrez pas les vulnérabilités de sécurité open source du projet tant que vous ne vous serez pas authentifié. Pour cela, vous pouvez créer un compte Snyk gratuit. Une fois authentifié, vous pourrez lancer votre premier scan !

Vous pouvez également consulter le fichier package.json : nous y voyons quelques vulnérabilités dans le package st.

Visual Studio Code affiche le fichier package.json avec un avertissement de vulnérabilité pour la dépendance st@0.2.4 et deux vulnérabilités de gravité moyenne.

st est un module qui sert des fichiers statiques sur des pages web et contient une vulnérabilité de ce type. Dans notre exemple, le fichier app.js montre que nous servons des fichiers depuis la route public.

Visual Studio Code affiche un fichier de serveur Express en JavaScript avec un avertissement sur une dépendance signalant deux vulnérabilités.

Retournez au fichier package.json, survolez le package st et cliquez sur l’ampoule jaune pour afficher la vulnérabilité la plus grave.

Éditeur de code affichant une dépendance npm avec deux vulnérabilités et une action Snyk permettant d’afficher la vulnérabilité la plus grave

Vous serez redirigé vers la vulnérabilité de traversal de répertoires. Cette page vous en apprendra davantage sur la vulnérabilité, la version qui l’introduit, la manière de la corriger et une preuve de concept.

Fenêtre VS Code en thème sombre affichant un rapport de vulnérabilité Snyk OSS pour une faille de traversée de répertoires dans le package npm st.

Vous pouvez également en savoir plus sur cette vulnérabilité en cliquant sur En savoir plus sur cette vulnérabilité. 

Page de leçon Snyk Learn intitulée « Traversée de répertoires », expliquant la divulgation involontaire de fichiers sensibles, avec une barre latérale indiquant la progression de la leçon.

Récapitulatif de File Explorer

Réfléchissons au nombre de lignes de code que nous écrivons nous-mêmes par rapport au nombre de composants ou de packages que nous importons dans notre base de code. Inutile de réinventer la roue et de perdre du temps à réécrire quelque chose qui existe probablement déjà sous forme de package dans notre écosystème. 

C’était le cas dans ce défi. Nous avons un site web simple qui utilise le package st pour servir des fichiers statiques. Mais en utilisant une ancienne version de ce package, nous avons introduit une vulnérabilité dans notre projet. Un attaquant potentiel peut ainsi découvrir des fichiers sensibles, des identifiants ou des mots de passe. Veillez à maintenir à jour les composants de vos projets afin de réduire votre surface d’attaque !

J’espère que vous avez apprécié File Explorer et les autres défis du CTF :)

Vous voulez savoir comment nous avons trouvé tous les autres flags ? Consultez notre page Solutions de Fetch the Flag pour découvrir comment nous avons procédé.