Aujourd’hui, j’ai décidé de parler d’un outil que j’utilise au quotidien dans ma vie professionnelle, le système de gestion de version git.
Avec cet outil j’utilise certaines commandes très utiles. Mais je n’avais pas d’idée de comment contextualiser ces commandes pour vous en parler. Cet alors que je me suis souvenu d’un projet grace auquel j’avais pu un peu monter en compétence : gitstery.
Ce dépot est disponible à cette adresse : https://github.com/nivbend/gitstery.
Le fichier README du projet, visible sur la racine du projet présente déjà deux commandes git.
La première, est la commande de base si vous voulez récupérer un projet sur votre machine, git clone
.
Cette commande, sous sa forme la plus basique, se présente comme ceci : git clone <url_du_projet>
. Par défaut, le contenu sera placé dans un dossier portant comme nom la dernière partie de l’URL dans notre cas gitstery.
git clone https://github.com/nivbend/gitstery
Après s’être déplacé dans ce nouveau dossier, il faut lire le contenu du fichier instructions.txt présent dans ce dossier. Pour cela, on pourrait utiliser la commande Unix de base cat. Mais, comme indiqué dans le README, git dispose de sa propre commande : git cat-file
.
Cette commande se décompose comme suit : git cat-file <type_objet> <hash>:chemin/vers/objet
.
Dans notre cas, ce que nous voulons, c’est le contenu du fichier instructions.txt, à l’endroit où nous nous trouvons (HEAD).
git cat-file blob HEAD:instructions.txt
Comme indiqué à la fin de ce fichier, je vais par la suite vous présenter des commandes permettant de faire notre enquête sans quitter la branche actuelle (avec la commande git checkout).
Première étape de l’enquête
La première étape consiste à trouver, à l’aide de la commande git log
, dans la branche ‘gtpd-archive’, des rapports d’enquêtes soumis par Kyle Pumbinner dans les 7 jours après le 20 juillet.
Pour filter par auteur, il suffit d’utiliser l’option --author
, ce qui dans notre cas donne --author='pumbinner’
.
Pour pouvoir utiliser les filtres de date, il nous faut la date au complet. Dans notre cas, il nous manque l’année.
Un rapide coup d’œil à l’historique de la branche ‘gtpd-archive’ (git log origin/gtpd-archive
) nous permet de se rendre compte que l’année est 2019.
Maintenant que nous connaissons l’année, nous pouvons correctement utiliser les filtres de date.
Pour préciser la date à partir de laquelle nous voulons voir les commits, on utilise l’option --after
. Et pour préciser la date jusqu’à laquelle on veut voir les commits, il s’agit de l’option --until
.
La commande permettant de trouver dans la branche ‘gtpd-archives’ les commits soumis par l’utilisateur Kyle Pumbinner entre le 20 et le 27 juillet est donc la suivante :
git log origin/gtpd-archive --author='pumbinner' --after='2019-07-20' –until='2019-07-27'
Avec cette commande, un seul commit remonte, et son message nous apprend que notre enquêteur a stocké les journaux d’accès dans une branche ‘detectives/kpumbinner’ et que nous devons retrouver les personnes ayant inscrit « BACKDOOR_332 » dans ces journaux d’accès.
Deuxième étape, trouver des suspects
Ici nous voulons donc pouvoir filtrer le contenu des commits. Pour cela, il existe l’option -G
de la commande git log
. Dans notre cas, pour retrouver dans la branche ‘detectives/kpumbinner’ les commits comportant la chaîne de caractères « BACKDOOR_332 », cela donne:
git log origin/detectives/kpumbinner -G ‘BACKDOOR_332’
Nous voyons donc que trois personnes ont accédé à la fameuse backdoor 332.
Troisième étape, aller interroger ces suspects
Maintenant que nous avons des noms, il nous faut interroger ces personnes.
Le fichier instructions.txt nous indique que un nom de rue correspond à un tag, et que le numéro correspond au x-ième ancêtre de ce tag. Pour inspecter les alentours, le contenu du commit contient un hash, qu’il suffit d’aller inspecter.
Pour voir la liste des tags:
git tag --list
Nous voyons donc que les rues sont accessibles dans un “dossier” ‘street’, et que chaque rue y est inscrite tout en minuscules et avec les espaces remplacés par des underscores.
Pour trouver l’adresse d’un suspect, il suffit de chercher son nom dans le repo à l’état actuel. Cela se fait en utilisant la commande:
git grep ‘<nom_de_la_personne>’
Pour notre premier suspect, cela donne:
git grep ‘Brock Stuickard’
Nous apprenons donc que notre Monsieur Stuickard habite au numéro 9 de la rue ‘Beaconside’. Pour aller l’interroger, il faut utiliser la commande git show
, sur le 9e ancêtre du tag street/beaconside. Cela donne:
git show tags/street/beaconside~9
Bon, ce n’est pas notre homme, mais il nous a donné un indice important.
Par acquis de conscience, jetons un œil aux alentours. Nous voyons après le message de commit les modifications apportées par ce commit. Ici, ce qui nous intéresse, c’est le contenu ajouté, ce qui correspond à la ligne précédée d’un signe “+”. Il suffit ensuite d’utiliser la commande git show sur ce hash:
git show d1278ebc164050fe1e5526fbba6a8cfbe763f1d2
Pour aller interroger les autres suspects, il suffit de réutiliser git grep
avec les autres noms et d’à nouveau utiliser git show pour atteindre l’adresse trouvée et examiner les alentours.
Dernière étape, la vérification
Pour vérifier si la personne que vous soupçonnez est bien coupable, la série de commandes et présentée dans le fichier instructions.txt.
J’espère que les commandes que je vous ai présentées vous aideront dans vos projets actuels et futur.
À bientôt pour de nouveaux messages à caractères informatifs très intéressants 👋