Un mot de passe intercepté en direct sur le réseau
Pas besoin de le craquer : parfois, il suffit de regarder passer les données
Petite vérification
Avant de commencer, vérifiez si vous savez encore réaliser ces 3 actions très simples, sur la séance précédente consacrée au craquage de mots de passe :
- depuis
~/tp-craquage, relancertime python3 craquage.pyet vérifier que le mot de passe retrouvé pouramelieest toujoursMediatheque2024 - vérifier que, pour
direction, le script affiche toujours qu'aucun mot de passe de la liste ne correspond - citer la commande utilisée pour mesurer la durée d'exécution du script
📌 Réponse attendue
TP pour réfléchir et résoudre des problèmes
Votre défi pour aujourd'hui consiste à observer, depuis une position de simple témoin sur le réseau, un mot de passe envoyé à un formulaire de connexion
Le formulaire utilisé dans ce TP est un formulaire minimal, créé pour l'exercice : il ne représente pas le vrai site de la médiathèque Jules Verne.
Ce TP se déroule entièrement sur votre propre machine (interface lo, c'est-à-dire la boucle
locale). Capturer le trafic réseau de quelqu'un d'autre, sans son autorisation explicite, est
interdit par la loi, quel que soit le réseau.
Étape 1 — Démarrer un petit serveur de connexion
Créez un dossier tp-sniffing, puis le fichier serveur.py :
from http.server import BaseHTTPRequestHandler, HTTPServer
class Connexion(BaseHTTPRequestHandler):
def do_POST(self):
longueur = int(self.headers['Content-Length'])
self.rfile.read(longueur) # le corps de la requête est reçu, mais jamais affiché ici
self.send_response(200)
self.end_headers()
self.wfile.write(b"Connexion recue")
HTTPServer(('localhost', 8000), Connexion).serve_forever()
Dans un premier terminal, lancez-le et laissez-le tourner :
cd ~/tp-sniffing
python3 serveur.py
Question : ce serveur affiche-t-il, à un seul endroit de son code, le contenu reçu (pseudo, mot de passe) ?
📌 Réponse attendue
Étape 2 — Se placer en position d'observateur, avant toute connexion
Dans un deuxième terminal, démarrez la capture avant d'envoyer la moindre connexion :
sudo tcpdump -i lo -A -s 0 'tcp port 8000'
-i lo: observer la boucle locale (le trafic reste sur votre machine pour cet exercice).-A: afficher le contenu de chaque paquet en texte lisible.-s 0: capturer chaque paquet en entier, sans le tronquer.
Laissez ce terminal ouvert et visible : c'est lui qui joue le rôle de l'observateur du réseau.
Étape 3 — Envoyer une connexion, comme le ferait un formulaire Web
Dans un troisième terminal, simulez l'envoi du formulaire de connexion :
curl -s -X POST -d "pseudo=amelie&mot_de_passe=Mediatheque2024" http://localhost:8000/connexion
Étape 4 — Lire ce que l'observateur a capturé
Revenez au deuxième terminal (celui qui exécute tcpdump).
- Repérez, dans le texte affiché, la ligne qui contient
pseudo=amelie&mot_de_passe=Mediatheque2024. - Cette ligne apparaît-elle en clair, ou sous une forme chiffrée illisible ?
serveur.pya-t-il eu besoin d'afficher quoi que ce soit pour que ce mot de passe devienne visible dans le deuxième terminal ?
📌 Réponse attendue
Arrêtez la capture avec Ctrl+C dans le deuxième terminal.
Étape 5 — Réagir à un cas pratique
Le responsable informatique de la médiathèque propose : « il suffit de choisir une adresse de
connexion compliquée et difficile à deviner (par exemple
http://localhost:8000/x7f-connexion-secrete), personne ne la trouvera pour l'espionner ». Que lui
répondez-vous ?
Restitution orale
Un étudiant (ou un binôme) vient présenter au tableau ce qui a été observé dans le terminal de capture à l'étape 4 et sa réponse au responsable informatique de l'étape 5.
- Durée : 5 minutes de présentation + 2 à 3 minutes de questions.
- Qui passe : un(e) étudiant(e) (ou un binôme) désigné(e) par l'enseignant.
- Support : le travail réalisé pendant le TP, aucune préparation supplémentaire n'est nécessaire.
- Ce qui est attendu :
- rappeler ce qui a été vu passer en clair dans le terminal de capture ;
- expliquer pourquoi ni le code du serveur ni celui du client n'ont besoin d'afficher le mot de passe pour qu'il soit observable ;
- répondre aux questions de la classe.
Cet exercice entraîne à l'oral technique court exigé par plusieurs épreuves du BTS (notamment E5 et E6) : clarté, structure, capacité à répondre à l'improviste.
📌 Une solution
Notions théoriques
Vous venez d'observer, sans toucher ni au client ni au serveur, un mot de passe circuler en clair sur le réseau. C'est ce qu'on appelle le sniffing.
Qu'est-ce que le sniffing ?
Le sniffing (écoute réseau) consiste à observer le trafic qui circule sur un réseau, sans le modifier ni s'y faire passer pour quelqu'un d'autre. C'est une attaque passive : rien ne distingue, pour le client ou le serveur, une connexion observée d'une connexion qui ne l'est pas.
Le sniffing que vous venez de pratiquer est passif. Une attaque plus avancée, appelée attaque de l'homme du milieu (Man in the Middle, MITM), va plus loin : l'attaquant se place activement entre les deux parties, au point de pouvoir modifier ou rediriger leurs échanges. Cette attaque active sera étudiée en détail dans une séance à venir.
Pourquoi HTTP expose tout en clair
Le protocole HTTP, utilisé par défaut par de nombreux formulaires Web, transmet ses données sans aucun chiffrement : chaque caractère envoyé (identifiant, mot de passe, contenu d'un formulaire) circule tel quel dans les paquets réseau.
| Protocole | Contenu visible pour un observateur du réseau |
|---|---|
| HTTP | En clair, lisible directement (ce que vous venez de constater) |
| HTTPS (HTTP + TLS) | Chiffré : seules des données illisibles sans la clé de déchiffrement sont visibles |
Ce problème ne concerne pas que les formulaires de connexion : toute donnée envoyée en HTTP (un message, un fichier, un numéro de carte) est exposée de la même façon à qui observe le réseau.
Qui peut sniffer un réseau, en pratique ?
Dans ce TP, vous observiez votre propre machine. En situation réelle, quiconque partage le même segment réseau peut faire la même chose, avec les mêmes outils :
- un autre appareil connecté au même réseau Wi-Fi public (café, gare, hôtel) ;
- un équipement réseau mal sécurisé, entre l'utilisateur et le serveur ;
- toute personne ayant un accès légitime à une partie du réseau traversé.
C'est pour cette raison précise qu'un réseau Wi-Fi public est considéré comme un environnement à risque pour toute connexion non chiffrée. L'usage d'un VPN pour s'en protéger sera étudié dans une séance à venir.