Rappel : L’article qui va suivre contient des techniques et méthodes qui peuvent s’avérer être illégales et dangereuses si elles sont utilisées à mauvais escient. Ce tutoriel ne doit en aucun cas être utilisé contre un particulier, une entreprise, une organisation à but non lucratif ou une administration publique de quelconque pays. Je me dédouane de toute responsabilité en cas de problèmes ou d’incidents de quelque nature que ce soit après le visionnage de cet article.

**FOR EDUCATIONAL PURPOSES ONLY**

Les droits, les droits, toujours les droits. Git est un merveilleux outil de versionning, encore faut-il ne pas oublier d’appliquer les bons droits et d’empêcher le directory listsing de son application.

Dans cet article, nous allons voir comment il est possible à partir des fichiers/dossiers présents dans le répertoire .git/ de pouvoir « ressusciter » le code source d’une application. Ce genre de méthode est possible uniquement si vous pouvez accéder en lecture à un répertoire .git/.

Pour vérifier si le dossier .git d’une application est exposé, accédez simplement au répertoire racine de l’application, par exemple project.com et ajoutez /.git à l’URL. Il y a trois possibilités qui peuvent se produire lorsque vous naviguez vers le répertoire /.git :

  • ❌ Si vous obtenez une erreur 404, cela signifie que le répertoire .git de l’application n’est pas mis à la disposition du public et que vous ne pourrez pas divulguer des informations de cette façon.
  • ❌ Si vous obtenez une erreur 403, le répertoire .git est disponible sur le serveur, mais vous ne pourrez pas accéder directement à la racine du dossier, et ne pourrez donc pas lister tous les fichiers contenus dans le répertoire.
  • ✔️ Si vous n’obtenez pas d’erreur et que le serveur répond avec l’arborescence de documents du répertoire .git, vous pouvez directement parcourir le contenu du dossier et récupérer toutes les informations qu’il contient.

II. Téléchargement du dossier .git/

Dans le contexte de cet article, j’ai volontairement laissé un repository .git/ accessible en lecture depuis mon serveur web.

  • Lien de la racine de mon application : http://localhost/target/

Après avoir essayé d’accéder au dossier sous-jacent git/ de cette application, je me rend compte que celui-ci est accessible en lecture.

Je vais donc procéder au téléchargement de ce dossier à l’aide de la commande wget.

Comme vous avez pu le constater, vous n’avez accès au dossier .git/ uniquement et pas au code source parent à ce dossier. Si vous essayez d’exécuter git status, vous verrez uniquement les logs vous stipulant que vous n’avez pas accès au fichier du projet.

Afin de reconstruire ce code source, il vous faut exécuter la commande :

git checkout -- .

Dans le but de se baser sur la dernière version de celui-ci versionné par git

Le code source a bien été ressuscité ! Il ne vous reste plus qu’à ouvrir ce code source dans un éditeur de code comme par exemple VS code 🙂

code . 

Voilà, vous avez donc accès à tout le code source de l’application. La prochaine étape pourrait être d’essayer de « Reverse » (Reverse Engineering) l’application afin d’en comprendre son fonctionnement et potentiellement ses failles.

III. Bonus – Analyse de l’historique des modifications et des messages de commits

Si le projet que vous avez trouvé dâte un peu, il est fort probable que certainnes informations confidentiel (token,mdp,id, message de commit trop descriptif..) traine dans l’historique des modifications. En effet, la mouvance DevSecOps est relativement jeune (sécurisation du code, et de l’infra hébergeant le code) et n’est clairement pas pratiqué par tous les développeurs ^^ . Afin de faire une rapide investigation, vous pouvez utiliser le dictionnaire de mot clé suivant avec la commande ci-après (liste non exhaustive) :

Mots clés permettant de découvrir des informations sensible dans le code (ou pas ^^) :

  • token
  • secret
  • key
  • jeton
  • password
  • passwd
  • pass
  • user
  • admin
  • api
  • json
  • xml

Un petite exemple :

git log -p | grep "token ="

J’espère que cet article vous aura plus !

D’autres ressources sympathique (mais pas forcement utilse en fonction du contexte) :

https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/git

++

Geoffrey


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"