DVID Writeup 01 - Hardware - Find the Datasheet
Si vous n’êtes pas encore familiarisé avec le projet Damn Vulnerable Iot Device (DVID), je vous encourage à lire la page de présentation du projet.
Objectif du challenge
Lire le mot de passe transmis sur le pin du microcontrôleur PD1
de la carte DVID.
Identification du microcontrôleur
Tout d’abord, nous allons voir à quoi ressemble la carte. Nous pouvons le faire en regardant les fichiers Gerber dans le dossier DVID/build du projet github. Ces fichiers contiennent les schémas de la carte.
Sur les schémas de la carte, nous pouvons voir un socket PDIP
pour une puce ATmega328p
. En cherchant la datasheet en ligne pour cette puce, nous constatons qu’il s’agit d’un microcontrôleur AVR 8 bits avec 32 Ko dans le système Flash programmable.
Comme nous pouvons le voir sur le schéma de brochage de la puce ATmega328p
, le port PD1
est situé sur le troisième port, en commençant en haut à gauche de la puce. Sur la carte DVID, cette broche est connectée au port SoftFlah TX
(également appelé Custom Port #3
selon la carte).
Maintenant que nous avons identifié le port utilisé pour transmettre le drapeau, nous allons flasher le firmware sur la carte.
Flash du firmware sur la carte DVID
Tout d’abord, nous allons flasher le firmware de ce challenge sur la carte DVID. Pour ce faire, nous utiliserons avrdude
et un programmeur USB AVR.
avrdude options |
|
---|---|
-F |
Override invalid signature check. |
-v |
Verbose mode |
-p atmega328p |
Target microcontroller type, here we have an ATmega328p |
-P /dev/ttyUSB0 |
Specify connection port, in this case the device /dev/ttyUSB0 |
-c usbasp |
Specify programmer type to use. |
-u |
Disable safemode, default when running from a script. |
-U flash:w:firmware.hex |
Memory operation specification <memtype>:r\|w\|v:<filename>[:format] . Here we write (w ) on the flash the file firmware.hex |
Pour résumer tout cela, j’ai réalisé ce super script flash.sh :
#!/bin/bash
if [[ ! -d "./DVID/" ]]; then
git clone https://github.com/vulcainreo/DVID
fi
pushd ./DVID/trainings/hardware/findTheDatasheet/
avrdude -F -v -p atmega328p -P /dev/ttyUSB0 -c usbasp -u -U flash:w:findTheDatasheet.ino.arduino_standard.hex
popd
Maintenant, nous allons connecter la carte DVID à notre ordinateur à l’aide du programmeur USB AVR et lancer le script. Lorsque la programmation de l’AVR est terminée, la carte doit redémarrer et vous devriez voir ceci :
Résolution du challenge
Afin de lire le mot de passe, nous connecterons une broche de lecture RX
de l’UART USB à la broche PD1
de la puce. Comme nous l’avons vu précédemment, nous allons connecter la broche de lecture RX
de l’UART USB au port personnalisé # 3
.
DVID board side connection | USB UART reader side connection |
---|---|
Afin de lire les données provenant du lecteur USB UART, nous pouvons soit écrire un script python, soit utiliser des outils comme minicom
. Nous allons essayer avec un bitrate classique de 9600 bps
.
Python script :
Le script Python ci-dessous permet de lire les valeurs de l’UART :
#!/usr/bin/env python3
import serial
s = serial.Serial("/dev/ttyUSB0", 9600)
while True:
print(s.read())
Nous pouvons aussi utiliser minicom
:
Minicom :
minicom -D /dev/ttyUSB0 -b 9600 |
---|
Références
- DVID Project on Github : https://github.com/Vulcainreo/DVID
- DVID Project site : http://dvid.eu/
- http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf