Dump de la mémoire flash du TP-Link MR6400 V5

Après mon premier article sur mon initiation à l’UART, j’ai décidé d’aller un peu plus loin en utilisant mon programmateur T48 pour extraire la mémoire flash du TP-Link MR6400 V5.

Utilisation du T48 et de Xgpro

Xgpro est l’outil logiciel associé au programmateur T48. Il permet de manipuler une grande variété de puces, notamment en lisant ou écrivant leur contenu.

Pour extraire la mémoire flash, la procédure est relativement simple :

Lire la puce

Une fois la puce correctement placée dans l’adaptateur SOP8, la lecture peut commencer. Le logiciel extrait alors le contenu et génère un fichier .bin correspondant à l’intégralité de la mémoire flash.

Identifier la puce

Il est essentiel de rechercher la référence exacte de la puce (généralement une SOP8 dans ce type de routeur). Une recherche sur Google avec la référence de la puce permet de trouver rapidement la datasheet.

Configurer Xgpro

Dans Xgpro, il suffit de sélectionner le modèle exact de la puce.

Analyse du fichier avec Binwalk

Une fois le fichier .bin extrait, j’ai utilisé binwalk pour analyser son contenu. Binwalk est un outil open-source très prisé pour l’analyse des firmwares, car il permet d’identifier et d’extraire automatiquement les différentes sections du fichier.

Commande :

binwalk -e EN25QH64A@SOP8.BIN

Résultat de Binwalk :

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
82496         0x14240         U-Boot version string, "U-Boot 1.1.3 (Aug  3 2021 - 15:11:15)"
131584        0x20200         LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 3754524 bytes

Interprétation des résultats

Ligne 1 – U-Boot

La première ligne indique la présence de U-Boot, un bootloader couramment utilisé pour initialiser le matériel et charger le système d’exploitation embarqué. C’est une partie essentielle du firmware.

Ligne 2 – Image LZMA compressée
La seconde ligne correspond à des données compressées au format LZMA. Ce type de compression est souvent utilisé pour réduire la taille des firmwares.

Cette section peut contenir :

  • Le noyau Linux (vmlinuz)
  • Un système de fichiers racine (rootfs) en squashfs
  • Ou d’autres composants critiques du firmware

Binwalk a automatiquement extrait ces sections et créé des dossiers squashfs-root.

Qu’est-ce que le dossier squashfs-root ?

Le dossier squashfs-root est le résultat de l’extraction d’un système de fichiers compressé au format SquashFS. Ce format est très utilisé dans les firmwares des appareils embarqués tels que :

  • Routeurs
  • Caméras IP
  • Dispositifs IoT

Que contient squashfs-root ?

En explorant le dossier squashfs-root, on trouve généralement :

  • /bin : Les binaires essentiels du système (busybox, sh, etc.)
  • /etc : Les fichiers de configuration (dont /etc/passwd où sont stockés les mots de passe hachés)
  • /lib : Les bibliothèques partagées
  • /usr : Des utilitaires et programmes utilisateur
  • /www : L’interface web de gestion du routeur

Extraction et attaque de mots de passe

En analysant le contenu du dossier « etc », un fichier attire tout de suite mon attention. Il s’agit de passwd.bak ! Je l’ouvre avec un éditeur :

admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh

  • admin – Nom de l’utilisateur.
  • $1$$iC.dUsGpxNNJGeOm1dFio/ – Hash du mot de passe (chiffré avec MD5).
    • $1$ indique que c’est du MD5.
  • 0:0 – L’UID (User ID) et le GID (Group ID). 0 signifie super-utilisateur (root).
  • root – Nom complet de l’utilisateur.
  • / – Dossier home (racine /).
  • /bin/sh – Shell utilisé (généralement ash ou bash).

Ce compte a tous les droits sur le système car l’UID et le GID sont à 0.


Déchiffrer le hash MD5

Pour découvrir le mot de passe, deux solutions :

  • Une petite recherche Google (quelqu’un l’a sûrement déjà publié !)
  • Un petit coup de hashcat

Pour le fun, j’ai utilisé hashcat.

echo 'iC.dUsGpxNNJGeOm1dFio/' > hash.txt
hashcat -m 500 hash.txt ./rockyou.txt

Et boum ! Mot de passe trouvé !

1234.

Ce qui s’est passé en coulisses :

  1. Hashcat a pris chaque mot de passe dans rockyou.txt (par exemple, « password123 », « 123456 », etc.).
  2. Pour chaque mot de passe, Hashcat a calculé le hash MD5 et l’a comparé avec le hash que je lui ai donné.
  3. Lorsque Hashcat a trouvé une correspondance (en générant le même hash pour un mot de passe de sa liste), il affiche le mot de passe en clair.

Commentaires

Laisser un commentaire

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