OverTheWire | Bandit 0 à 10
OverTheWire propose des wargames, des jeux où l'on apprend la sécurité informatique en résolvant des défis. Bandit est le parcours d'initiation : chaque niveau donne accès à un compte, et le mot de passe du compte suivant se trouve quelque part sur la machine. On avance donc en se connectant en SSH, puis en trouvant et en lisant le bon fichier.
Bandit 0
On se connecte sous le compte bandit0 avec le port SSH 2220.
ssh -p 2220 bandit0@bandit.labs.overthewire.org

Le site indique que le mot de passe du niveau suivant se trouve dans le fichier readme, dans le répertoire personnel. cat affiche directement le contenu d'un fichier dans le terminal. La première commande visible dans la capture, ls, sert à repérer le nom du fichier ; le mot de passe est ensuite lu avec cat readme.
cat readme

Le mot de passe affiché permet de se connecter sous le compte bandit1.
Pour info : OverTheWire recommande
ls,cd,cat,file,duetfind.
Bandit 1
On se connecte sous le compte bandit1 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit1@bandit.labs.overthewire.org

Le mot de passe est dans un fichier dont le nom est un simple tiret : -. Un tiret seul est souvent utilisé par les commandes pour désigner l'entrée standard. En écrivant ./-, on indique explicitement que l'on veut lire le fichier - situé dans le répertoire courant.
cat ./-

Le contenu de - est le mot de passe du compte bandit2.
Pour info : OverTheWire recommande
ls,cd,cat,file,duetfind.
Bandit 2
On se connecte sous le compte bandit2 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit2@bandit.labs.overthewire.org

Le fichier s'appelle --spaces in this filename--. Les espaces séparent normalement les arguments d'une commande ; les guillemets permettent de transmettre le nom complet comme un seul argument. Le préfixe ./ précise qu'il s'agit d'un chemin relatif, même si le nom commence par des tirets.
cat './--spaces in this filename--'

La sortie contient le mot de passe du compte bandit3.
Pour info : OverTheWire recommande
ls,cd,cat,file,duetfind.
Bandit 3
On se connecte sous le compte bandit3 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit3@bandit.labs.overthewire.org

Le site indique que le fichier se trouve dans inhere et qu'il est caché. Dans la capture, cd inhere ouvre ce répertoire et ls -all affiche aussi les fichiers cachés. Le nom repéré est ...Hiding-From-You. On peut alors le lire avec cat.
cat ...Hiding-From-You

Le contenu du fichier est le mot de passe du compte bandit4.
Pour info : OverTheWire recommande
ls,cd,cat,file,duetfind.
Bandit 4
On se connecte sous le compte bandit4 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit4@bandit.labs.overthewire.org

Le site précise que le mot de passe est dans le seul fichier lisible par un humain du répertoire inhere. Dans la capture, file ./* examine les fichiers de ce répertoire et en indique le type. ./* sélectionne les entrées courantes en ajoutant ./ devant leurs noms, ce qui évite que les noms commençant par un tiret soient pris pour des options. La sortie montre que -file07 est du texte ASCII : c'est celui qu'il faut lire.
file ./*
cat ./-file07

Le texte affiché contient le mot de passe du compte bandit5.
Pour info : OverTheWire recommande
ls,cd,cat,file,duetfind.
Bandit 5
On se connecte sous le compte bandit5 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit5@bandit.labs.overthewire.org

Le mot de passe est dans un fichier quelque part sous inhere. Le site donne trois critères : le fichier doit être lisible par un humain, faire 1033 octets et ne pas être exécutable. find parcourt les sous-répertoires et ne retient ici que les fichiers ordinaires (-type f) qui font exactement 1033 octets (-size 1033c) et ne sont pas exécutables (! -executable). Le c indique une taille en octets, et ! inverse le test d'exécution.
find . -type f -size 1033c ! -executable
La recherche retourne ./maybehere07/.file2. La commande cat affiche son contenu.
cat ./maybehere07/.file2


Le fichier contient le mot de passe du compte bandit6.
Pour info : OverTheWire recommande
ls,cd,cat,file,duetfind.
Bandit 6
On se connecte sous le compte bandit6 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit6@bandit.labs.overthewire.org

Le site indique que le fichier peut se trouver n'importe où sur le serveur. Il appartient à l'utilisateur bandit7, au groupe bandit6 et fait 33 octets. find / démarre la recherche à la racine. Les options -user et -group filtrent respectivement le propriétaire et le groupe ; -size 33c sélectionne les fichiers de 33 octets. Enfin, 2>/dev/null masque les messages d'erreur de permission produits pendant le parcours.
find / -type f -user bandit7 -group bandit6 -size 33c 2>/dev/null
Le résultat donne /var/lib/dpkg/info/bandit7.password. On lit ce chemin avec cat.
cat /var/lib/dpkg/info/bandit7.password

Le contenu du fichier est le mot de passe du compte bandit7.
Pour info : OverTheWire recommande
ls,cd,cat,file,du,findetgrep.
Bandit 7
On se connecte sous le compte bandit7 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit7@bandit.labs.overthewire.org

Le fichier data.txt contient beaucoup de lignes. grep filtre le fichier pour ne conserver que celle où apparaît le mot millionth.
cat data.txt | grep 'millionth'

Sur cette ligne, le mot de passe est placé à côté de millionth.
Pour info : OverTheWire recommande
man,grep,sort,uniq,strings,base64,tr,tar,gzip,bzip2etxxd.
Bandit 8
On se connecte sous le compte bandit8 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit8@bandit.labs.overthewire.org

Le site indique que le mot de passe est la seule ligne de data.txt qui n'apparaît qu'une fois. sort trie les lignes pour placer les doublons côte à côte. Le pipe | transmet le résultat à uniq -u, qui ne conserve que les lignes uniques.
sort data.txt | uniq -u

La ligne retournée est le mot de passe du compte bandit9.
Pour info : OverTheWire recommande
grep,sort,uniq,strings,base64,tr,tar,gzip,bzip2etxxd.
Bandit 9
On se connecte sous le compte bandit9 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit9@bandit.labs.overthewire.org

Le site indique que le mot de passe se trouve dans une des quelques chaînes lisibles de data.txt, précédée de plusieurs signes =. strings extrait les séquences de caractères lisibles du fichier. Le pipe envoie ces séquences à grep, qui filtre celles contenant au moins deux signes =. Dans l'expression ={2,}, {2,} signifie « deux fois ou plus ».
strings data.txt | grep -E '={2,}'

La sortie contient plusieurs fragments de texte ; la ligne avec les signes = suivis du mot de passe permet de passer au compte bandit10.
Pour info : OverTheWire recommande
grep,sort,uniq,strings,base64,tr,tar,gzip,bzip2etxxd.
Bandit 10
On se connecte sous le compte bandit10 avec le mot de passe obtenu au niveau précédent.
ssh -p 2220 bandit10@bandit.labs.overthewire.org

Le site indique que data.txt contient des données encodées en Base64. La commande base64 décode ce format avec l'option -d, puis affiche le texte obtenu dans le terminal.
base64 -d data.txt

Le texte décodé contient le mot de passe du compte bandit11.
Pour info : OverTheWire recommande
grep,sort,uniq,strings,base64,tr,tar,gzip,bzip2etxxd.
Conclusion
Bandit est un jeu amusant et éducatif pour se familiariser avec Linux. J’ai trouvé dommage que les commandes recommandées soient si nombreuses alors que dans plusieurs niveaux, la solution tient finalement à une commande bien choisie.