Skip to content

OverTheWire – Bandit Solution 1/2

Over The Wire est un site de challenge type « wargame » proposant différentes thématiques, je vous propose dans cet article les solutions de la catégorie la plus simple et accessible : Bandit

Bandit est donc une suite de challenges autour du shell Linux, l’objectif de chaque niveau est d’obtenir un flag constituant le mot de passe pour le niveau supérieur. Les challenges Bandit sont un très bon moyen de commencer à aborder les problématiques de sécurité en environnement Linux. Les premiers niveaux sont relativement simples et permettent d’apprendre les commandes de base, les derniers niveaux sont eux plus intéressants et abordent notamment la manipulation des commandes permettant de gérer des connexions réseau.

Chaque niveau possède une énoncé pouvant vous guider à sa résolution, une  liste des outils devant être utilisés et nécessite de se connecter en SSH avec le nom d’utilisateur correspondant au niveau. Pour les intéressés, voici le lien : http://overthewire.org/wargames/bandit/

N’abandonnez pas trop vite ! La solution est souvent plus proche qu’on ne le croit, ne jeter un œil aux solutions qui si vous êtes réellement bloqué et que vous vous cognez la tête sur un niveau depuis plusieurs jours.

On commence donc dans cet article avec les niveaux 1 à 15, le challenge étant dédié aux débutants en sécurité, j’essaierai d’être le plus didactique possible, les mots de passe des solutions ne seront pas divulgués en entier, l’objectif de l’article étant la démarche et non le résultat.

Bandit – Niveau 0

Le premier niveau est assez basique, il consiste à lire le contenu du fichier contenant le flag grâce à la commande cat (http://www.linuxpedia.fr/doku.php/commande/cat)
Pour s’y connecter, on utilisera Putty sous Windows ou la commande ssh sous Linux. Toutes les connexions des niveaux supérieurs s’effectueront de la même façon :

ssh  bandit0@bandit.labs.overthewire.org -p 2220

Une fois connecté, on peut lister les fichiers grâce à la commande ls (https://linux.die.net/man/1/ls) :

bandit0@bandit:~$ ls
readme

La liste des fichiers disponibles dans le dossier dans lequel on se trouve est affichée, on peut alors afficher le contenu du fichier readme grâce à la commande cat :

bandit0@bandit:~$ cat readme
boJ9jbb[...]3MY1

Le mot de passe de l’utilisateur du niveau supérieur (bandit1) apparaît. Rien de bien difficile pour le moment.

Bandit – Niveau 1

On peut donc ensuite se connecter au même hôte, cette fois-ci avec l’utilisateur bandit1 et avec le mot de passe que nous venons de trouver (boJ9jbb[…]3MY1)

ssh  bandit1@bandit.labs.overthewire.org -p 2220

Même opération, on regarde ce qui se trouve dans notre répertoire actuel :

bandit1@bandit:~$ ls -al
total 24
-rw-r----- 1 bandit2 bandit1 33 Nov 13 15:58 -
drwxr-xr-x 2 root root 4096 Nov 13 15:58 .
drwxr-xr-x 29 root root 4096 Nov 13 15:57 ..
-rw-r--r-- 1 root root 220 Sep 1 2015 .bash_logout
-rw-r--r-- 1 root root 3771 Sep 1 2015 .bashrc
-rw-r--r-- 1 root root 655 Jun 24 2016 .profile

On remarque le fichier « – » (premier de la liste), ainsi que différents fichiers « par défaut » dans le répertoire utilisateur. Si l’on tente de faire un cat sur ce fichier, rien ne se passe, peut être que le nom du fichier « – » pose problème. On va donc passer par un autre moyen pour afficher son contenu, l’utilisation de l’astérisque.

bandit1@bandit:~$ cat ./*
CV1Dt[...]YA9

Dans un terminal Linux, l’astérisque permet de cibler un ensemble d’éléments, ici tous les fichiers du répertoire « ./ », qui est une manière de cibler le répertoire dans lequel on se trouve.

Bandit – Niveau 2

Le niveau 2 est similaire aux deux premiers mais apporte une difficulté supplémentaire, le nom du fichier contenant le mot de passe contient des espaces, un classique qui rendra fou tous les débutants sous Linux :

bandit2@bandit:~$ ls -l
total 4
-rw-r----- 1 bandit3 bandit2 33 Nov 13 15:58 spaces in this filename

Voila ce que donnera un cat sur ce fichier :

bandit2@bandit:~$ cat spaces in this filename
cat: spaces: No such file or directory
cat: in: No such file or directory
cat: this: No such file or directory
cat: filename: No such file or directory

En effet, Linux interprétera un espace entre deux mots comme étant des fichiers complètement différents. Si un répertoire contient un fichier readme et un fichier file.txt, il est possible d’afficher le contenu des deux fichiers en une seule commande la façon suivante :

cat readme file.txt

Ici, le système cherche un fichier spaces puis un fichier in, etc. Ceux-ci n’existent pas sur le système. Pour spécifier un nom de fichier contenant un mot de passe, il suffit de mettre se nom entre guillemets (également appelées double quote en anglais)

bandit2@bandit:~$ cat "spaces in this filename"
UmHa[...]RMb5luK

Bandit – Niveau 3

Le niveau trois nous apprendra à gérer les fichiers cachés sous Linux, un fichier est considéré comme étant un fichier caché si son nom commence par un point (exemple « .fichier »). Une commande ls standard n’affichera pas ces fichiers. On constate également la présence d’un répertoire nommé inhere contenant probablement le flag. Pour spécifier un répertoire, il suffit d’indiquer son nom à la commande ls.

bandit3@bandit:~$ ls
inhere
bandit3@bandit:~$ ls inhere/

On constate que le dossier est a priori vide. Cependant, l’option -a de la commande ls permet d’afficher les fichiers cachés

bandit3@bandit:~$ ls -a inhere/
. .. .hidden

L’option -l de la commande ls permet d’avoir une vue plus clair (un fichier par ligne) :

bandit3@bandit:~$ ls -a -l inhere/
total 12
drwxr-xr-x 2 root root 4096 Nov 13 15:58 .
drwxr-xr-x 3 root root 4096 Nov 13 15:58 ..
-rw-r----- 1 bandit4 bandit3 33 Nov 13 15:58 .hidden

On peut concaténer ces deux options pour avoir une écriture plus rapide :

bandit3@bandit:~$ ls -la inhere/
total 12
drwxr-xr-x 2 root root 4096 Nov 13 15:58 .
drwxr-xr-x 3 root root 4096 Nov 13 15:58 ..
-rw-r----- 1 bandit4 bandit3 33 Nov 13 15:58 .hidden

Il nous suffit donc ensuite d’afficher le contenu du fichier caché contenu dans le répertoire inhere avec la commande cat :

bandit3@bandit:~$ cat inhere/.hidden
pIwrPr[...]FoFgAB

Bandit – Niveau 4

Le niveau 4 contient également un dossier inhere, et plusieurs fichiers de file-01 à file-09. La plupart de ces fichiers contiennent des données non imprimables :

bandit4@bandit:~$ cat inhere/-file01
�0_܉�� ���5!���:!O}&�WW

L’affichage de caractères non imprimables indique souvent que la données provient d’un fichier binaire (par exemple un fichier .exe), un fichier compressé, ou d’une chaîne de caractère chiffrée. Nous cherchons depuis notre terminal un fichier texte, la commande file (https://linux.die.net/man/1/file ) est d’ailleurs indiquée dans l’énoncé du niveau 4. Cette commande permet d’afficher le type d’un fichier ciblé, par exemple :

bandit4@bandit:~$ file inhere/*
 inhere/-file00: Non-ISO extended-ASCII text, with CR line terminators, with escape sequences
 inhere/-file01: data
 inhere/-file02: data
 inhere/-file03: data
 inhere/-file04: data
 inhere/-file05: data
 inhere/-file06: data
 inhere/-file07: ASCII text
 inhere/-file08: data
 inhere/-file09: data

On remarque que le fichier -file07 ne possède pas le même type que les autres, cela peut être une première piste :

bandit4@bandit:~$ cat inhere/-file07
koReBOKu[...]dopnAYKh

Une autre méthode valable aurait été d’utiliser la commande cat sur tous les fichiers.

Bandit – Niveau 5

Le niveau 5 contient un dossier inhere qui renferme plusieurs dossier contenant eux même plusieurs fichiers, une analyse manuelle de tout ces fichiers serait trop longue, nous allons donc nous aider de quelques outils de recherche.

bandit5@bandit:~/inhere$ ls
maybehere00 maybehere03 maybehere06 maybehere09 maybehere12 maybehere15 maybehere18
maybehere01 maybehere04 maybehere07 maybehere10 maybehere13 maybehere16 maybehere19
maybehere02 maybehere05 maybehere08 maybehere11 maybehere14 maybehere17
bandit5@bandit:~/inhere$ ls maybehere00
-file1 -file2 -file3 spaces file1 spaces file2 spaces file3

La description du niveau 5 nous donne les indications suivantes :

The password for the next level is stored in a file somewhere under the inhere directory and has all of the following properties:

  • human-readabe
  • 1033 bytes in size
  • not executable

Cette même description nous oriente vers l’utilisation de la commande find (https://linux.die.net/man/1/find), qui permet d’effectuer une recherche sur des fichiers ou des dossiers avec des filtres tels que leur nom, taille, date de création, etc.

Nous savons donc grâce à l’énoncé que le fichier possède une taille de 1033 octets, nous pouvons commencer notre recherche par cela grâce à l’option -size  de la commande find.

bandit5@bandit:~/inhere$ find /home/ -type f -size 1033c -exec ls {} \;
/home/bandit5/inhere/maybehere07/.file2
bandit5@bandit:~/inhere$ cat /home/bandit5/inhere/maybehere07/.file2
DXjZPULL[...]btFemEgo7

Une autre méthode pouvant être utilisée consiste à utiliser l’option -a de la commande ls. Cette option permet d’afficher les détails de chaque fichier (droits, propriétaire, date de modification et taille). On peut ensuite effectuer un filtre sur la taille du fichier en octet grâce à la commande grep (https://linux.die.net/man/1/grep), que nous aurons l’occasion de réutiliser plus tard.

bandit5@bandit:~$ ls -al inhere/* |grep "1033" -B 8
inhere/maybehere07:
total 56
-rwxr-x--- 1 root bandit5 3663 Nov 13 15:58 -file1
-rw-r----- 1 root bandit5 2488 Nov 13 15:58 -file2
-rwxr-x--- 1 root bandit5 3362 Nov 13 15:58 -file3
drwxr-x--- 2 root bandit5 4096 Nov 13 15:58 .
drwxr-x--- 22 root bandit5 4096 Nov 13 15:58 ..
-rwxr-x--- 1 root bandit5 3065 Nov 13 15:58 .file1
-rw-r----- 1 root bandit5 1033 Nov 13 15:58 .file2

L’option -B permet d’afficher les x (8) lignes avant la chaine de caractère ciblée. Cela nous permet ici de retrouver le dossier contenant le fichier qui nous intéresse (.file02 fait ici 1033 octets).

bandit5@bandit:~$ cat inhere/maybehere07/.file2
DXjZPULL[...]tFemEgo7

Bandit – Niveau 6

Le niveau 6 va également nous amener à utiliser la commande find, avec un peu plus d’options cette fois-ci. L’énoncé de ce niveau nous donne les indications suivantes :

The password for the next level is stored somewhere on the server and has all of the following properties:

  • owned by user bandit7
  • owned by group bandit6
  • 33 bytes in size

Nous connaissons donc le propriétaire et le groupe propriétaire du fichier, la commande find nous permet déjà de faire un filtrage à partir de ces éléments :

bandit6@bandit:~$ find -group bandit6 -user bandit7
bandit6@bandit:~$

Aucun résultat n’est retourné. Par défaut, la commande find va rechercher les fichiers et dossiers à partir du chemin dans lequel on se trouve lors du lancement de la commande. Ici, le home de l’utilisateur (son répertoire par défaut, représentant son espace personnel sur le système). Pour rechercher des fichiers ou dossiers à partir d’un autre dossier, par exemple la racine du serveur, il est nécessaire d’ajouter le chemin de ce dossier (ici « / », la racine du système) au début de la commande (juste après le find) : 

bandit6@bandit:~$ find / -group bandit6 -user bandit7
[...]
find: '/var/lib/puppet': Permission denied
find: '/var/lib/apt/lists/partial': Permission denied
/var/lib/dpkg/info/bandit7.password
find: '/var/lib/polkit-1': Permission denied
[...]

On obtient alors un certain nombre de messages « Permission denied » car notre utilisateur n’a pas les droits de lecture sur tous les dossiers du système. En analysant les résultats, on retrouve le fichier qui semble nous intéresser (bandit7.password) :

bandit6@bandit:~$ cat /var/lib/dpkg/info/bandit7.password
HKBPTKQn[...]DQRKTzs

Bandit – Niveau 7

A nouveau, nous allons devoir utiliser une commande afin de nous aider à chercher une aiguille dans une botte de foin. La description de ce niveau nous indique que le flag est stocké dans le fichier data.txt sur la même ligne que le mot « millionth ». Également, on remarque un grand nombre de ligne dans le fichier « data.txt » dans le répertoire de l’utilisateur, ce qui rendrait une recherche manuelle fastidieuse. On va donc chercher la ligne en question à l’aide de la commande grep qui permet d’effectuer des recherches de mots et d’expressions régulières dans les fichiers, son utilisation est relativement simple :

bandit7@bandit:~$ grep "millionth" data.txt
millionth cvX2JJa4CF[...]BM9plV

Bandit – Niveau 8

Même problématique pour le niveau 8, le fichier data.txt contient un nombre de ligne trop important. De plus, toutes les lignes contiennent une chaîne de caractère pouvant être un flag. Cependant, la description du niveau nous indique que le flag qui nous intéresse est la seule ligne n’apparaissant qu’une seule fois dans le fichier.

Nous allons pour cela nous aider de trois commandes :

  • sort (https://linux.die.net/man/1/sort) : permet de trier les lignes d’un fichier, par exemple par ordre alphabétique;
  • grep : déjà vu précédemment, permet d’effectuer des recherches de mots ou expressions régulières dans un fichier;
  • uniq (https://linux.die.net/man/1/uniq) : permet de traiter les doublons dans une liste.

Nous allons donc dans un premier temps trier par ordre alphabétique notre liste :

cat data.txt | sort

Puis nous allons mettre en valeur les doublons et afficher le nombre d’occurrences pour chaque ligne :

bandit8@bandit:~$ cat data.txt |sort | uniq -c 
 10 SpjfhBmGmkZKdCrzj5RH2D51Tx6DxLXc
 10 TCMQbaMdafirVtxzFV7ogo2NMcQ0026u
 1 UsvVyFS[...]6jQQUhR
 10 Uv1z8HPXCQOTY6yD47DvAhpZBsAYj3Oc
 10 VFoSVIEBVCkk2cv9z72urOjTo48NKZc6
 10 Vq1UdXgIgrx9opczaFKcDLpNeeWitukP
 10 WcbHwjBDSblYnQj9zRBhoDQ5fkkd3Ea6

On remarque que la plupart des chaînes de caractères apparaissent dix fois, sauf une. Pour être parfaite, notre commande va effectuer un dernier tri sur le terme « 1  » (avec l’espace), ce qui permettra d’afficher uniquement les chaines de caractères n’apparaissant qu’une fois :

bandit8@bandit:~$ cat data.txt |sort | uniq -c |grep "1 "
 1 UsvVyFS[...]6jQQUhR

Bandit – Niveau 9

Pour ce niveau, un simple cat sur le fichier data.txt nous affiche une grande quantité de caractères non imprimables. Difficile de retrouver une information intéressante là dedans. Cependant, l’énoncé nous indique que les caractères compréhensibles par un humain commencent par un « = ». On peut donc utiliser la combinaison de commande strings (« chaine de caractère », en anglais https://linux.die.net/man/1/strings) et grep pour récupérer ces informations :

bandit9@bandit:~$ strings data.txt |grep "==="
 ========== the
 ========== password
 ========== is
 ========== truKLdjsb[...]HQJFuLk

La commande ne va afficher que les chaines de caractères composées de caractères human readable et la commande grep va nous permettre de faire ressortir uniquement les chaines de caractères contenant un « = ». Ce type de filtrage rapide est souvent utilisé pour chercher/trouver une information dans un fichier contenant un grand nombre d’informations.

Bandit – Niveau 10

Pour ce niveau, le mot de passe est contenu dans le fichier data.txt. Cependant, l’énoncé nous indique que ce mot de passe est encodé en base 64 (https://fr.wikipedia.org/wiki/Base64). L’utilisation de l’encodage base64 se reconnait en général par l’utilisation (non systématique) des caractères « == » ou « === » en fin de chaine :

bandit10@bandit:~$ cat data.txt
 VGhlIHBhc3N3b3JkIG[...]lSRnFyeEUxaHhUTkViVVBSCg==

On peut donc utiliser la commande suivante de l’outil base64 pour décoder son contenu :

bandit10@bandit:~$ cat data.txt |base64 -d
 The password is IFukwKGsF[...]E1hxTNEbUPR

Pour rappel, le base64 est une technique d’encodage (https://fr.wikipedia.org/wiki/Codage), et non de chiffrement. On le retrouve très souvent dans les environnements web car il permet de faire passer des données contenant des caractères qui pourraient causer des erreurs si transmises de façon non encodées. Par exemple des espaces, des caractères spéciaux ou des caractères non imprimables.

Bandit – Niveau 11

Ce niveau vise à nous familiariser avec une technique de « chiffrement » qui date de l’époque romaine dénommée le chiffrement de César (ou chiffrement par décalage – https://fr.wikipedia.org/wiki/Chiffrement_par_d%C3%A9calage).

bandit11@bandit:~$ cat data.txt
Gur cnffjbeq vf 5Gr8L4qetPEsP[...]K8XSP6x2RHh

Les cas de chiffrement par décalage ou substitution peuvent se reconnaitre en général rapidement car la taille et la disposition des mots fait penser à une vraie phrase. Par exemple ici, les mots « Gur cnffjbeq vf » font la même taille que les mots « The password is ».

Il est ici plus compliqué de trouver la commande one-line (commande en une seule ligne), en sachant que des sites de résolution en ligne existent, j’utilise la commande tr (http://www.linux-france.org/article/memo/node10.html) qui permet de résoudre le challenge via une commande Linux plutôt que via un site en ligne :

bandit11@bandit:~$ alias rot13="tr '[A-Za-z]' '[N-ZA-Mn-za-m]'"
 bandit11@bandit:~$ cat data.txt |rot13
 The password is 5Te8Y4dr[...]uEX8KFC6k2EUu

Bandit – Niveau 12

Le niveau 12 demande plus de patience que les précédents. L’énoncé nous indique que le fichier data.txt contient le mot de passe et que ce fichier est un hexdump d’un fichier qui a été compressé de multiple fois.

Un hexdump est, comme son nom l’indique, au format hexadécimal (https://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal) format qui n’est pas celui attendu par votre système de fichier ou vous en tant qu’utilisateur lorsque vous souhaitez lire un fichier.

bandit12@bandit:~$ cat data.txt
00000000: 1f8b 0808 ecf2 445a 0203 6461 7461 322e ......DZ..data2.
00000010: 6269 6e00 0149 02b6 fd42 5a68 3931 4159 bin..I...BZh91AY
00000020: 2653 5930 3e1b 4000 0014 ffff dde3 2b6d &SY0>.@.......+m
00000030: afff dd1e dfd7 ffbf bdfb 3f67 bfff ffff ..........?g....
00000040: bde5 bfff aff7 bfdb e5ff ffef b001 39b0 ..............9.
00000050: 480d 3400 0068 0068 1a00 0000 01a3 4000 H.4..h.h......@.
00000060: 0001 a643 4d34 0000 d00d 0698 800d 1934 ...CM4.........4
00000070: d0c4 d034 1a36 a343 646a 1c9a 3206 9a00 ...4.6.Cdj..2...
00000080: 3406 8000 068d 064f 51a3 4000 000f 5000 4......OQ.@...P.

Je vous conseille de travailler un répertoire créé dans le répertoire /tmp/ :

mkdir /tmp/test001;cp data.txt /tmp/test001; cd /tmp/test001

La première chose à faire est donc de convertir ce format hexadécimal en format binaire, format binaire qui finira peut être par donner un format plus compréhensible. On peut pour cela utiliser la commande xxd et son option -r :

bandit12@bandit:~$ xxd -r data.txt > data
 bandit12@bandit:~$ file data
 data: gzip compressed data, was "data2.bin", from Unix, last modified: Thu Sep 28 14:04:06 2017, max compression

On peut en effet voir qu’il s’agit d’une archive GZIP. La commande file utilisée ici est bien pratique sous Linux car elle permet d’afficher le type d’un fichier, en sachant que les extensions n’existent pas sous Linux. L’ensemble du challenge va donc consister à trouver/deviner le système de compression utilisé et à décompresser l’archive avec la bonne commande.

Une autre difficulté de challenge réside également dans le fait que certains outils refuseront de décompresser une archive qui n’a pas l’extension attendue (ce qui semble peu logique vu que les extensions sous Linux ne sont pas censées exister). Il faut donc renommer certaines archives correctement avant de les traiter. C’est par exemple le cas des archives GZIP :

bandit12@bandit:/tmp/test001$ mv data data.gz
bandit12@bandit:/tmp/test001$ gzip -d data.gz
bandit12@bandit:/tmp/test001$ ls
data data.txt
bandit12@bandit:/tmp/test001$ ls -al
total 724
drwxrwxr-x 2 bandit12 bandit12 4096 Mar 12 21:50 .
drwxrwx-wt 289 root root 724992 Mar 12 21:51 ..
-rw-rw-r-- 1 bandit12 bandit12 585 Mar 12 21:50 data
-rw-r----- 1 bandit12 bandit12 2646 Mar 12 21:49 data.txt
bandit12@bandit:/tmp/test001$ file data
data: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/test001$ bzip2 -d data
bandit12@bandit:/tmp/test001$ file data.out
data.out: gzip compressed data, was "data4.bin", last modified: Thu Dec 28 13:34:36 2017, max compression, from Unix
bandit12@bandit:/tmp/test001$ gzip -d data.gz
bandit12@bandit:/tmp/test001$ file data
data: POSIX tar archive (GNU)
bandit12@bandit:/tmp/test001$ tar xvf data.gz
data5.bin
bandit12@bandit:/tmp/test001$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/test001$ tar xvf data5.bin
data6.bin
bandit12@bandit:/tmp/test001$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/test001$ bzip2 -d data6.bin
bandit12@bandit:/tmp/test001$ bzip2 -d data6.bin
bzip2: Can't guess original name for data6.bin -- using data6.bin.out
bandit12@bandit:/tmp/test001$ file data6.bin.out
data6.bin.out: POSIX tar archive (GNU)
bandit12@bandit:/tmp/test001$ tar xvf data6.bin.out
data8.bin
bandit12@bandit:/tmp/test001$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Thu Dec 28 13:34:36 2017, max compression, from Unix
bandit12@bandit:/tmp/test001$ mv data8.bin data8.gz
bandit12@bandit:/tmp/test001$ gzip -d data8.gz
bandit12@bandit:/tmp/test001$ file data8
data8: ASCII text
bandit12@bandit:/tmp/test001$ cat data8
The password is 8ZjyCRi[...]wb2a1ORpYL

Bien qu’un peu répétitif, ce challenge permet de se familiariser avec la commande file, très utile sous Linux, et les différents méthodes de compression (avec leurs spécificités).

Bandit – Niveau 13

L’énoncé de ce niveau nous indique qu’il faut utiliser SSH pour se connecter en tant que l’utilisateur bandit14. On dispose pou cela de la clé privée de l’utilisateur bandit14. Si vous souhaitez avoir d’avantages d’informations sur l’utilisation des clés SSH sous Linux, je vous oriente vers cet article : Authentification SSH par clés

Rien de très compliqué donc, il nous suffit de lancer une connexion SSH en tant que bandit14, on utilisera l’option -i pour spécifier une clé SSH précise. Pour information, par défaut et sans l’utilisation de cette option, SSH ira chercher une clé dans le dossier ~/.ssh de l’utilisateur courant.

bandit13@bandit:~$ ssh bandit14@bandit.labs.overthewire.org -p 2220 -i sshkey.private
bandit14@bandit:~$ cat /etc/bandit_pass/bandit14
 4wcYUJFw0k0[...]qxU3b3e

Bandit – Niveau 14

Les niveaux commencent à présent à être intéressants, on va notamment commencer à essayer de discuter avec des ports réseaux. L’énoncé nous indique par exemple qu’il faut soumettre le mot de passe de l’utilisateur bandit14 sur le port 30000 du serveur. C’est l’occasion d’utiliser netcat (https://fr.wikipedia.org/wiki/Netcat), cet outil permet d’initier des connexions réseaux très simplement.

Nous allons donc utiliser la commande cat et rediriger sa sortie vers le port 30000 de la machine courante  (localhost) grâce à un pipe (« | ») :

bandit14@bandit:~$ cat /etc/bandit_pass/bandit14|nc localhost 30000
 Correct!
 BfMYroe2[...]eK5xNr

Si nous souhaitons envoyer « coucou » sur le même port, nous pouvons utiliser la commande suivante :

bandit14@bandit:~$ echo "coucou" | nc localhost 30000

Le système de pipe sous Linux permet d’envoyer le résultat d’une première commande (ici la commande echo) en tant que paramètre d’entrée pour une seconde commande (ici la commande nc). On peut ainsi chainer autant de commande que souhaité.

A noter que l’on peut également résoudre le challenge en initiant une connexion avec netcat, puis en saisissant le mot de passe de bandit14 manuellement :

bandit14@bandit:~$ nc localhost 30000
4wcYUJFw0[...]iqxU3b3e
Correct!
BfMYroe26[...]eK5xNr

Pour en savoir plus, je vous invite à utiliser netcat entre deux machines que vous maitrisez et à ouvrir wireshark pour voir ce qu’il se passe au niveau réseau.

Bandit – Niveau 15

Ici, même principe, sauf que le serveur ne discutera avec nous que si nous utilisons la couche de chiffrement SSL. Nous avons vu que netcat nous permettait de discuter facilement avec un port réseau car il se chargeait de gérer les couches inférieures jusqu’à l’UDP/TCP. On peut utiliser ncat et son option –-ssl pour faire de même et ajouter une couche de chiffrement SSL. pour information ncat est en quelque sorte la relève de netcat, il possède notamment des options supplémentaires (dont –ssl justement)  :

bandit15@bandit:~$ echo "BfMYro[...]9qh59eK5xNr" |ncat --ssl localhost 30001
 Correct!
 cluFn7[...]RcffSxQluehd

netcat, ainsi que ncat et son option –ssl sont très pratiques pour commencer à discuter avec des ports réseaux lorsque l’on ne sait pas quels services ils hébergent. Par exemple, la commande suivante me permet de demander la page d’accueil de Google sans avoir à gérer la partie SSL manuellement :

root@kali:~/Downloads# ncat --ssl www.google.fr 443
GET / HTTP/1.1
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: https://www.google.fr/?gfe_rd=cr&dcr=0&ei=YganWoncLqLC8gev_KHQCw
Content-Length: 269
Date: Mon, 12 Mar 2018 22:59:46 GMT
Alt-Svc: hq=":443"; ma=2592000; quic=51303431; quic=51303339; quic=51303335,quic=":443"; ma=2592000; v="41,39,35"

Nous avons vu les challenges de 0 à 15. Rendez-vous dans cet article pour les solutions des challenges de 16 à 25.

Partager :
Published inChallenges et CTFs

One Comment

  1. MjRK

    Bonsoir Mickael,
    Bravo pour ton boulot et merci pour les infos que tu transmets.
    J’aurai juste une petite correction à apporter concernant le LEVEL13. Le port utilisé pour la connexion SSH n’est pas 2220 mais 22.
    Peut être que des changements ont été apporté sur le site de overthewire.org..?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *