Récemment, j’ai voulu voir ce qu’une caméra Tattou avait dans le ventre. Comme souvent avec l’IoT, le chemin vers l’accès root n’est pas pavé de bonnes intentions, mais d’une interface série..
Voici comment je suis passé d’une boîte noire à un dump du firmware en exploitant le bootloader.
1. Le setup hardware

La première étape est toujours physique. Il faut trouver les ports de communication série (UART) sur la carte mère. Une fois les pads TX, RX et GND localisés, pas question de souder à la barbare. J’ai utilisé des sondes PCBite pour un maintien parfait sans abîmer le PCB.
- Connexions : RX sur TX, TX sur RX, et la Masse (GND).
- Interface : Un adaptateur USB-TTL standard.
- Outil : Putty sur le port COM3, réglé à 115200 bauds (le standard pour les puces HiSilicon).
2. Bootloop et login inconnu
Qu’est-ce qu’un bootloader ?
Un bootloader est généralement le premier code à s’exécuter sur un processeur. Il a pour tâche d’initialiser le matériel et d’exécuter le micrologiciel. Sur les systèmes complexes, un bootloader ROM important est stocké de manière permanente dans l’appareil afin d’appeler un deuxième bootloader.
Une fois connecté, je mets la caméra sous tension. Les logs défilent. Je constate deux problèmes majeurs :
- Le spam : L’application principale (
ipc_server) plante et redémarre en boucle, rendant la console inutilisable. - La porte fermée : J’aperçois un prompt
IPCamera login:, mais je ne connais pas le mot de passe (et les classiquesroot/123456/adminne fonctionnent pas).
Impossible de taper quoi que ce soit calmement. Il fallait intervenir avant le chargement de l’OS.
3. L’attaque U-Boot
La faille se situe au démarrage. Juste avant de charger Linux, le chargeur de démarrage (U-Boot) laisse une fenêtre de 1 seconde pour l’interrompre.
J’ai redémarré la caméra et spammé la touche Entrée jusqu’à obtenir le graal :

4. L’injection : « init=/bin/sh »
L’objectif : dire au noyau Linux de démarrer, mais sans lancer l’application buggée et sans demander de mot de passe. Pour ça, il faut modifier les arguments de boot (bootargs) pour lancer directement un shell Bash.
J’ai injecté cette configuration :
setenv bootargs mem=44M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:512K(boot),1536K(kernel),14M(rootfs) init=/bin/sh
La partie clé est init=/bin/sh : au lieu de lancer l’init standard, on lance un terminal administrateur.
5. Le démarrage manuel
C’est là que ça s’est corsé. La commande standard boot n’existait pas sur cette version minimaliste de U-Boot. J’ai dû charger le noyau « à la main » en copiant les données de la puce Flash vers la RAM.
J’ai exécuté cette séquence :
- Initialisation de la Flash :
sf probe 0 - Copie du Kernel en RAM :
sf read 0x82000000 0x80000 0x200000(Lecture de 2Mo vers la RAM). - Lancement :
bootm 0x82000000
Le noyau démarre, et le défilement s’arrête net sur un prompt #. Accès Root obtenu !

6. L’exfiltration : La méthode de la carte SD

J’ai essayé de dumper le firmware via le câble série (UART), mais c’est trop lent et instable. Heureusement, la caméra possède un slot SD.
Le problème : en mode « hack » (/bin/sh), Linux est nu. Pas de drivers chargés, pas de points de montage. Il faut tout faire à la main.
A. Réveiller le système : J’ai dû monter les systèmes de fichiers virtuels et peupler /dev pour que la carte SD soit détectée :
Bash
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
mdev -s est crucial : il scanne le matériel et crée les fichiers périphériques (comme mmcblk0).
B. Monter la carte SD :
Bash
mkdir /tmp/sdcard
mount -t vfat /dev/mmcblk0p1 /tmp/sdcard
C. Le Dump (Copie du firmware) : J’ai utilisé dd pour copier la partition système directement sur la carte SD :
Bash
# Copie du Bootloader
dd if=/dev/mtdblock0 of=/tmp/sdcard/boot.bin
# Copie du Kernel
dd if=/dev/mtdblock1 of=/tmp/sdcard/kernel.bin
# Copie du Système de fichiers
dd if=/dev/mtdblock2 of=/tmp/sdcard/rootfs.bin
# Force l'écriture sur la carte (sinon les fichiers seront vides)
sync
# Démonte la carte pour pouvoir la retirer sans danger
umount /tmp/sdcard
Résultat

En remettant la carte SD dans mon PC, j’ai récupéré un fichier rootfs.bin parfait de 14 Mo. Prochaine étape : analyse du binaire avec binwalk pour explorer les scripts de configuration et trouver les vulnérabilités !
Laisser un commentaire