Skip to content

PICOCTF 2017 – FORENSIC LVL 02 – Just Keyp Trying – Write-up

Dans cet article je vais exposer la solution à l’un des challenges du PicoCTF 2017, un CTF en ligne qui a eu lieu durant une quinzaine de jours début avril.

Il s’agit d’un challenge de niveau basic/intermédiaire de la partie Forensic. Le challenge se nomme « Just Keyp Trying« , comprendre « Just Keep Trying » avec une référence à « Key » (clé ou touche de clavier par exemple, cela a surement une importance).

Le challenge est constitué d’un unique fichier .pcapng à télécharger. Pour un challenge Forensic, rien d’étonnant pour l’instant. Le format pcapng est le format des captures réseaux, que les outils comme tcpdump, wireshark ou tshark peuvent traiter, enregistrer ou ouvrir. J’utilise donc dans un premier temps Wireshark. Voici ce que l’on peut voir en ouvrant ce fichier.
Premier fait notable, il ne s’agit pas de paquets réseau comme l’on pourrait s’y attendre, il s’agit d’un enregistrement de « flux » USB, ce qu’une recherche sur les moteurs de recherche pour « URB_INTERRUPT » permet rapidement de déterminer. En effet, Wireshark prend en charge l’enregistrement des échanges USB depuis sa version 2 (il me semble).

Il s’agit maintenant d’identifier quels types de flux, dorénavant, tout peut être branché via USB, souris, clavier, transfert de fichier, adaptateur divers.. C’est ici que le titre de l’épreuve est important, la notion de « Key » peut faire réference aux touches d’un clavier.

L’objectif est donc certainement de retrouver les touches sasies au clavier pendant l’enregistrement. Nous voyons dans le contenu de chaque paquet un champ « Leftover Capture Data » qui est quasiment le seul à changer d’un paquet à l’autre, l’information se trouve forcément à l’intérieur.

D’un paquet à l’autre, peu d’éléments semblent changer. Une analyse avec tshark s’impose afin d’obtenir rapidement la partie intéressante de chaque « paquet ».

Extrait d’un seul paquet analysé avec tshark

Je repère ici à nouveau le champ « Leftover Capture Data », puis je fait un filtre dessus pour tous les paquets du fichier.

Extraction de tous les « Leftover Capture Data » de tous les paquets

Voila, on distingue alors une valeur avec uniquement des « 0 » suivie d’une valeur avec une donnée variable, elles semblent donc fonctionner par paire. On obtient ici une liste de « champs » en hexadécimal. Encore faut il comprendre la valeur de chacun.
Ce document peut alors nous aider : http://www.usb.org/developers/hidpage/Hut1_12v2.pdf, le chapitre 10 « Keyboard/Keypad Page » à la page 53, référence les valeurs en hexa de chaque touche clavier :
On peut alors comprendre que « 0000090000.. » est à simplifier en « 09 » qui est donc la touche « f » ou « F ».

On peut donc manuellement retrouver chaque correspondance et reconstituer ainsi le flag (je n’ai pas cherché à savoir si les touches étaient saisies en majuscule ou minuscule dans un premier temps).

Reconstitution du flag à partir des touches clavier capturées

Il est ici intéressant de voir l’utilisation qui est faite de wireshark/tshark, qui deviennent alors de simples keylogger qui enregistrent des touches clavier. On peut dans le même style imaginer devoir reconstituer le parcours du curseur de la souris et de retrouver un fichier transféré depuis une clé USB.

Partager :
Published inChallenges et CTFs

Be First to Comment

Laisser un commentaire

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