Trame HTTP & Basic Auth
Dans ce write-up complet, nous allons décortiquer une trame brute, identifier une requête HTTP,
localiser l’en-tête Authorization et décoder les identifiants cachés derrière un
encodage Base64. Une mise en situation réelle de renseignement réseau.
Présentation du Challenge
L’énoncé est le suivant :
« Retrouvez les données normalement confidentielles contenues dans cette trame. »
00 05 73 a0 00 00 e0 69 95 d8 5a 13 86 dd 60 00 00 00 00 9b 06 40 26 07 53 00 00 60 2a bc 00 00 00 00 ba de c0 de 20 01 41 d0 00 02 42 33 00 00 00 00 00 00 00 04 96 74 00 50 bc ea 7d b8 00 c1 d7 03 80 18 00 e1 cf a0 00 00 01 01 08 0a 09 3e 69 b9 17 a1 7e d3 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a 41 75 74 68 6f 72 69 7a 61 74 69 6f 6e 3a 20 42 61 73 69 63 20 59 32 39 75 5a 6d 6b 36 5a 47 56 75 64 47 6c 68 62 41 3d 3d 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 49 6e 73 61 6e 65 42 72 6f 77 73 65 72 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 6d 79 69 70 76 36 2e 6f 72 67 0d 0a 41 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a
Le but est d’extraire de cette trame des informations sensibles. L’énoncé parle de « données confidentielles », ce qui nous oriente vers des identifiants de connexion, des tokens ou des clés.
Décryptage de la trame brute
La trame est donnée en notation hexadécimale, octet par octet (deux caractères hexadécimaux par octet). Pour comprendre son contenu, nous devons interpréter cette suite d’octets selon les protocoles réseaux.
Commençons par repérer les premiers octets : 00 05 73 a0 00 00 ... cela ressemble à
une adresse MAC Ethernet. Les en-têtes Ethernet et IP occupent les premières lignes.
On peut utiliser un outil comme Wireshark ou un analyseur en ligne pour
décoder la trame, mais nous allons procéder manuellement pour l’apprentissage.
En observant la trame, on voit apparaître plus tard les octets 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31
qui correspondent à la chaîne ASCII GET / HTTP/1.1.
C’est une requête HTTP simple.
47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31
G E T / H T T P / 1 . 1
Nous avons donc une requête HTTP. Le reste de la trame après cette ligne contient les en-têtes HTTP, qui sont également en ASCII.
La ligne suivante (après 0d 0a qui est le retour à la ligne CRLF) commence par
41 75 74 68 6f 72 69 7a 61 74 69 6f 6e soit Authorization.
C’est l’en-tête qui nous intéresse.
Identification de la requête HTTP
La requête HTTP est une méthode GET sur la racine (/) avec la version
HTTP/1.1. Les en-têtes suivants sont :
- Authorization — contient les identifiants encodés.
- User-Agent —
InsaneBrowser(un navigateur fictif). - Host —
www.myipv6.org(le serveur cible). - Accept —
*/*(accepte tout type de contenu).
L’en-tête Authorization est utilisé pour transmettre des informations d’authentification
au serveur. Dans le cas présent, il utilise le schéma Basic.
Authorization: Basic Y29uZmk6ZGVudGlhbA==
Le mot-clé Basic indique l’utilisation de l’authentification HTTP Basic, qui
consiste à envoyer un nom d’utilisateur et un mot de passe concaténés par un deux-points (:)
et encodés en Base64. C’est un mécanisme simple mais non sécurisé si la connexion
n’est pas chiffrée (HTTPS).
L’en‑tête Authorization et son importance
Basic <base64-credentials>. Les identifiants sont le nom d’utilisateur suivi
de deux-points puis du mot de passe, le tout encodé en Base64. Il n’offre aucune confidentialité
ni intégrité à moins d’utiliser TLS/HTTPS. C’est un standard ancien mais encore utilisé dans
des API internes ou des interfaces d’administration.
Dans notre trame, la partie encodée est :
Y29uZmk6ZGVudGlhbA==
Cette chaîne est un encodage Base64 d’une chaîne en clair. Le Base64 est un codage qui permet de représenter des données binaires en utilisant un alphabet de 64 caractères (A-Z, a-z, 0-9, +, /). Il est souvent utilisé pour transporter des données dans des contextes textuels (comme les en-têtes HTTP).
Décodage Base64
Pour obtenir les identifiants, nous devons décoder la chaîne Base64. Plusieurs méthodes sont possibles :
- En ligne de commande Linux :
echo "Y29uZmk6ZGVudGlhbA==" | base64 -d - En Python :
import base64; base64.b64decode("Y29uZmk6ZGVudGlhbA==").decode() - Sur le web : des outils en ligne comme base64decode.org.
Décodons-la mentalement : la chaîne se décode en confi:dential.
En effet :
confi:dential
Le deux-points sépare l’identifiant (confi) du mot de passe (dential).
confi. Cela peut être un nom d’utilisateur, un compte, etc.dential. Le secret associé.Résultat final
Le challenge est résolu : nous avons extrait les identifiants de connexion
confi:dential. Ces données étaient effectivement confidentielles et
n’auraient pas dû transiter en clair, même encodées en Base64.
Cette extraction illustre l’importance de la surveillance réseau et de la protection des identifiants. Un attaquant qui capture une trame HTTP non chiffrée peut facilement récupérer ces informations.
Enjeux de sécurité et recommandations
Ce challenge met en lumière plusieurs bonnes pratiques de sécurité :
-
01
Utiliser HTTPS / TLS — toute communication sensible (identifiants, tokens) doit être chiffrée pour éviter l’écoute sur le réseau. L’en-tête Authorization en clair est inacceptable.
-
02
Ne pas se fier au Base64 — le Base64 n’est pas une protection, c’est un encodage. Il ne doit pas être considéré comme un mécanisme de sécurité.
-
03
Privilégier des schémas d’authentification plus robustes — comme
Beareravec des tokens JWT, ou OAuth, qui peuvent inclure des signatures et des durées de vie limitées. -
04
Surveiller les flux réseau — les administrateurs doivent utiliser des outils (IDS, Wireshark) pour détecter les fuites de données.
Dans un contexte de test d’intrusion, la capture de trafic et l’analyse des en-têtes HTTP sont des techniques fondamentales pour découvrir des failles de sécurité.
Quiz – Validation des acquis
Clique sur une question pour révéler la réponse.