
De l'UART au Root : Pénétrer dans la Xiaomi C200 via U-Boot
Dans ce dépôt, je montre comment j'ai obtenu un accès à l'interface UART même sans l'ensemble habituel
de broches exposées / pastilles de test, en utilisant U-Boot et des astuces pour obtenir root à un stade précoce et
finalement extraire le firmware
Quelques points clés sont clairs sur le PCB
Tout d'abord, je me suis intéressé aux candidats évidents pour un accès UART direct,
il y a 4 pastilles de test alignées qui semblent être Tx, Rx, la masse et l'alimentation,
mais les tester avec un multimètre a donné de mauvaises mesures comme on le voit sur l'image.
J'ai essayé la plupart des autres pastilles de test et je n'ai toujours pas trouvé la bonne mesure, j'ai donc dû
changer de stratégie
Comme il ne reste aucun connecteur sur la carte ni aucune pastille de test utile,
j'ai décidé de passer par la source, de me connecter aux broches du processeur et d'obtenir
un shell UART de cette façon. J'ai récupéré la datasheet de ce processeur et identifié
les broches du protocole UART

Maintenant, il suffit de trouver la masse sur la carte et de connecter
J'ai utilisé des sondes PCBite et un adaptateur USB 2 TTL pour ce montage

Maintenant, nous pouvons utiliser picocom pour obtenir le shell UART que nous recherchons
sudo picocom -b 115200 /dev/ttyUSB0
Si rien n'est fait, je n'obtiens que les journaux de démarrage et aucun shell à la fin du processus de démarrage,
j'ai donc dû interrompre U-Boot en appuyant immédiatement sur Entrée.
Lorsque j'ai obtenu un shell U-Boot, j'ai d'abord affiché les variables d'environnement

Les éléments importants pour nous sont
Pour obtenir rapidement un accès root, je peux utiliser l'astuce consistant à modifier la commande init avec setenv
afin d'obtenir un shell au lieu d'exécuter le binaire linuxrc, puis je peux charger la mémoire
manuellement et démarrer le dispositif (en copiant essentiellement la commande bootcmd)

Maintenant, lorsque le démarrage se terminera, je serai placé dans un shell de démarrage avec pratiquement rien en cours d'exécution
sur le système, je vais donc exécuter le binaire linuxrc d'origine en arrière-plan et vérifier
s'il y a des ports ouverts sur ce système

Pas de chance ! La caméra ne communique avec son cloud que sur " 47.237.75.249 ", aucune interface web exposée
avec laquelle bricoler.
Comme la rétro-ingénierie du binaire de communication avec le cloud est hors du cadre de ma recherche,
c'est là que j'ai décidé de terminer ma recherche :)
Un petit bonus pour ceux qui souhaitent jouer avec le firmware, voici
comment l'obtenir.
Même configuration que précédemment avec l'UART, mais cette fois en sondant et en chargeant uniquement la
mémoire de la flash vers la RAM sans démarrer dessus.
Ensuite, vous pouvez imprimer les données de la mémoire RAM et enregistrer la sortie
de votre terminal (avec minicom cette fois) pour la sauvegarder dans un fichier, la nettoyer un peu avec python et obtenir
le firmware, en vous aidant de binwalk et des indications de bootargs pour nommer chaque section.
