Skip to main content

OvertheWire Walktrought

·786 words·4 mins

OverTheWire Bandit : mon parcours et mes notes
#

Après avoir terminé une bonne partie du parcours Bandit proposé par OverTheWire, j’ai décidé de regrouper mes notes dans un article plus propre et plus structuré.

L’objectif de Bandit est d’apprendre progressivement à utiliser Linux, comprendre le fonctionnement du shell et découvrir quelques concepts de sécurité informatique à travers une série de défis de difficulté croissante.

Je ne détaille pas les mots de passe des niveaux afin de préserver l’intérêt pédagogique du parcours.


Niveau 0
#

Objectif
#

Récupérer le mot de passe du niveau suivant.

Réflexion
#

Le fichier contenant le mot de passe est directement présent dans le répertoire personnel. Une simple lecture du fichier suffit.

Solution
#

cat readme

À retenir
#

  • cat permet d’afficher le contenu d’un fichier texte.

Niveau 1
#

Objectif
#

Lire un fichier dont le nom commence par un tiret (-).

Réflexion
#

Sous Linux, un nom commençant par - est généralement interprété comme une option de commande. Il faut donc préciser explicitement qu’il s’agit d’un fichier.

Solution
#

cat ./-

À retenir
#

  • Le préfixe ./ permet de désigner un fichier situé dans le répertoire courant.

  • Cela évite que le nom soit interprété comme une option.


Niveau 2
#

Objectif
#

Lire un fichier contenant des espaces dans son nom.

Réflexion
#

Les espaces ont une signification particulière dans le shell. Il faut soit les échapper, soit entourer le nom du fichier de guillemets.

Solution
#

cat ./--spaces\ in\ this\ filename--

Ou :

cat "./--spaces in this filename--"

À retenir
#

  • Un espace peut être échappé avec \.

  • L’autocomplétion avec la touche Tab simplifie souvent la saisie.


Niveau 3
#

Objectif
#

Trouver un fichier caché.

Réflexion
#

Les fichiers cachés sous Linux commencent par un point (.). La commande ls ne les affiche pas par défaut.

Solution
#

ls -la

Une fois le fichier identifié :

cat <nom_du_fichier>

À retenir
#

  • ls -a affiche les fichiers cachés.

  • ls -la ajoute les permissions, propriétaires et tailles.


Niveau 4
#

Objectif
#

Identifier un fichier lisible parmi plusieurs fichiers.

Réflexion
#

Le dossier contient plusieurs fichiers dont un seul est exploitable. La commande file permet d’identifier leur nature.

Solution
#

file ./*

Une fois le bon fichier trouvé :

cat <fichier>

À retenir
#

  • file détermine le type réel d’un fichier.

  • Très utile lorsqu’une extension est absente ou trompeuse.


Niveau 5
#

Objectif
#

Trouver un fichier répondant à des critères précis de taille.

Réflexion
#

Ma première idée était de parcourir tous les répertoires avec ls puis de filtrer les résultats.

ls -la */* | awk '{print $5, $9}' | grep 1033

Cette approche fonctionne partiellement mais ne prend pas en compte les fichiers cachés.

J’ai découvert que le caractère générique * ignore les fichiers commençant par un point.

Solution
#

Activer temporairement l’inclusion des fichiers cachés :

shopt -s dotglob

Puis relancer la recherche.

À retenir
#

  • Les globes (*) ignorent les fichiers cachés.

  • dotglob modifie ce comportement dans Bash.


Niveau 6
#

Objectif
#

Trouver un fichier spécifique dans l’ensemble du système.

Réflexion
#

Le fichier recherché possède plusieurs caractéristiques :

  • propriétaire spécifique ;

  • groupe spécifique ;

  • taille précise.

La commande find est parfaitement adaptée à ce type de recherche.

Solution
#

find / -size 33c -user bandit7 -group bandit6 2>/dev/null

Explication
#

2>/dev/null

redirige les erreurs vers la « poubelle » du système afin d’éviter d’être submergé par les messages de permission refusée.

À retenir
#

  • find est l’outil de référence pour rechercher des fichiers.

  • 2>/dev/null permet de masquer les erreurs.


Niveau 7
#

Objectif
#

Trouver une ligne particulière dans un gros fichier texte.

Réflexion
#

Le mot de passe se trouve sur la même ligne qu’un mot-clé spécifique.

Solution
#

cat data.txt | grep millionth

Version plus concise :

grep millionth data.txt

À retenir
#

  • grep permet de rechercher du texte dans un fichier.

  • Éviter les pipes inutiles lorsque la commande accepte déjà un fichier en entrée.


Niveau 8
#

Objectif
#

Trouver la seule ligne unique d’un fichier.

Réflexion
#

Toutes les lignes sont dupliquées sauf une.

Solution
#

sort data.txt | uniq -u

À retenir
#

  • uniq nécessite généralement un tri préalable.

  • uniq -u affiche uniquement les lignes uniques.


Niveau 9
#

Objectif
#

Extraire du texte lisible depuis un fichier binaire.

Réflexion
#

Le fichier contient principalement des données non textuelles.

Solution
#

strings data.txt | grep "="

À retenir
#

  • strings extrait les chaînes de caractères imprimables.

  • Très utile lors de l’analyse de binaires.


Niveau 10
#

Objectif
#

Décoder une chaîne encodée en Base64.

Solution
#

base64 -d data.txt

À retenir
#

  • Base64 est un encodage, pas un chiffrement.

  • N’importe qui peut décoder une donnée encodée en Base64.