DVID Writeup 01 - Hardware - Find the Datasheet

Table des matières :

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 :

Boot screen

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
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
Minicom

Références