Niveau 29

Niveau 29

Level Goal

There is a git repository at ssh://bandit28-git@localhost/home/bandit28-git/repo. The password for the user bandit28-git is the same as for the user bandit28.

Clone the repository and find the password for the next level.

Commands you may need to solve this level

git

Tout comme l'épreuve précédent, commençons par cloner le repository dans un dossier temporaire :

bandit28@bandit:~$ mkdir /tmp/repo28
bandit28@bandit:~$ cd /tmp/repo28
bandit28@bandit:/tmp/repo28$ git clone ssh://bandit28-git@localhost/home/bandit28-git/repo
Cloning into 'repo'...
Could not create directory '/home/bandit28/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit28/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit28-git@localhost's password: 
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (9/9), done.
Resolving deltas: 100% (2/2), done.

Regardons le contenu du repository :

bandit28@bandit:/tmp/repo28/repo$ cat README.md 
# Bandit Notes
Some notes for level29 of bandit.

## credentials

- username: bandit29
- password: xxxxxxxxxx

Comme l'on pouvait s'en douter, le mot de passe n'est pas accessible directement et il va falloir regarder les états antérieur du fichier pour le retrouver. À noter que cet exercice est représentatif d'une situation réelle : si l'on publie des credentials (mot de passe, token, clef privée etc) sur un repository, il ne faut surtout pas penser que supprimer ou modifier le fichier contenant le mot de passe dans un nouveau commit va résoudre le problème.

En effet, même si les informations ne sont plus présentes dans la dernière version du repository elles sont toujours présentes dans l'historique.

Ici commençons par lister les modifications effectuées sur le repository :

bandit28@bandit:/tmp/repo28/repo$ git log
commit edd935d60906b33f0619605abd1689808ccdd5ee
Author: Morla Porla <morla@overthewire.org>
Date:   Thu May 7 20:14:49 2020 +0200

    fix info leak

commit c086d11a00c0648d095d04c089786efef5e01264
Author: Morla Porla <morla@overthewire.org>
Date:   Thu May 7 20:14:49 2020 +0200

    add missing data

commit de2ebe2d5fd1598cd547f4d56247e053be3fdc38
Author: Ben Dover <noone@overthewire.org>
Date:   Thu May 7 20:14:49 2020 +0200

    initial commit of README.md

(on relèvera ou non le jeu de mots particulièrement subtil sur le nom de l'auteur d'origine)

Commençons par regarder l'historique de modifications ligne par ligne :

bandit28@bandit:/tmp/repo28/repo$ git blame README.md
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 1) # Bandit Notes
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 2) Some notes for level29 of bandit.
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 3) 
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 4) ## credentials
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 5) 
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 6) - username: bandit29
edd935d6 (Morla Porla 2020-05-07 20:14:49 +0200 7) - password: xxxxxxxxxx
^de2ebe2 (Ben Dover   2020-05-07 20:14:49 +0200 8)

On peut voir que la ligne qui nous intéresse a été modifiée par Morla Porla. Comparons son ancier commit avec le dernier pour obtenir le mot de passe :

bandit28@bandit:/tmp/repo28/repo$ git diff c086d11a00c0648d095d04c089786efef5e01264..edd935d60906b33f0619605abd1689808ccdd5ee
diff --git a/README.md b/README.md
index 3f7cee8..5c6457b 100644
--- a/README.md
+++ b/README.md
@@ -4,5 +4,5 @@ Some notes for level29 of bandit.
 ## credentials
 
 - username: bandit29
-- password: bbc96594b4e001778eee9975372716b2
+- password: xxxxxxxxxx

Par curiosité nous pouvons aussi comparer le premier commit de Morla Porla avec celui de Ben Dover, mais malheureusement il n'y a rien de bien intéressant :

bandit28@bandit:/tmp/repo28/repo$ git diff de2ebe2d5fd1598cd547f4d56247e053be3fdc38..c086d11a00c0648d095d04c089786efef5e01264
diff --git a/README.md b/README.md
index 7ba2d2f..3f7cee8 100644
--- a/README.md
+++ b/README.md
@@ -4,5 +4,5 @@ Some notes for level29 of bandit.
 ## credentials
 
 - username: bandit29
-- password: <TBD>
+- password: bbc96594b4e001778eee9975372716b2