Cyber 2021/2022 G3 : Différence entre versions
(→Déjà vu) |
|||
Ligne 90 : | Ligne 90 : | ||
Avec le <code>GET DESCRIPTOR Response DEVICE</code> (taille 82), on trouve l'idVendor (Mad Catz) et avec le <code>GET DESCRIPTOR Response CONFIGURATION</code> (taille 98), on voit que le périphérique utilisé est une souris. On exporte tous les paquets ayant une <code>frame.len==71</code> car ce sont eux qui contiennent des HID DATA. Dans les HID DATA, on trouve les boutons appuyés par la souris ainsi que ses déplacements. Avec un script python sur ces données, on peut trouver le dessin du flag. | Avec le <code>GET DESCRIPTOR Response DEVICE</code> (taille 82), on trouve l'idVendor (Mad Catz) et avec le <code>GET DESCRIPTOR Response CONFIGURATION</code> (taille 98), on voit que le périphérique utilisé est une souris. On exporte tous les paquets ayant une <code>frame.len==71</code> car ce sont eux qui contiennent des HID DATA. Dans les HID DATA, on trouve les boutons appuyés par la souris ainsi que ses déplacements. Avec un script python sur ces données, on peut trouver le dessin du flag. | ||
+ | |||
+ | import itertools | ||
+ | import json | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | def main(): | ||
+ | packets_export_file = open('test.json') | ||
+ | packets = json.load(packets_export_file) | ||
+ | |||
+ | x_offsets = [int(p["_source"]["layers"]["usbhid.data_tree"]["usbhid.data.axis.x"]) | ||
+ | for p in packets] | ||
+ | |||
+ | y_offsets = [-int(p["_source"]["layers"]["usbhid.data_tree"]["usbhid.data.axis.y"]) | ||
+ | for p in packets] | ||
+ | |||
+ | x_positions = list(itertools.accumulate(x_offsets)) | ||
+ | y_positions = list(itertools.accumulate(y_offsets)) | ||
+ | |||
+ | plt.plot(x_positions, y_positions) | ||
+ | plt.title("Mouse position") | ||
+ | plt.xlabel("X") | ||
+ | plt.ylabel("Y") | ||
+ | plt.show() | ||
+ | |||
+ | main() |
Version du 20 janvier 2022 à 12:55
Sommaire
Equipe : Louis WADBLED, Clement GODET
Flocons
Espion dans le bus
On télécharge le fichier et sur wireshark, application du filtre : ((usb.transfer_type == 0x01) && (frame.len==72)) && !(usb.capdata == 00:00:00:00:00:00:00:00)
. Grâce à ce filtre, on trouve tous les paquets contenant des "Leftover Capture Data", ce sont les touches du clavier qui ont été utilisées (et non pas les caractères ASCII). Il faut maintenant trouver les caractères selon les touches utilisées. Et on prend le 4ème caractère sur chaque ligne pour trouver le flag.
Travail de serrurerie
On désarchive le .zip puis on déchiffre le fichier à l'aide des commandes suivantes :
$ modprobe nbd
permet de créer un fichier /dev/nbd0
$ qemu-nbd -c /dev/nbd0 data --format=raw
génère les partitions /dev/nbd0p1 et /dev/nbd0p2
On monte ensuite les partitions :
$ mkdir /mnt/data1 /mnt/data2 $ mount /dev/nbd0p1 /mnt/data1 $ mount /dev/nbd0p2 /mnt/data2
En inspectant les dossiers fraichement montés, on trouve une archive qui nous demande un mot de passe. Le mot de passe se trouve dans un fichier qui n'apparait pas, même en faisant 'ls -la' Le fichier a probablement été masqué grâce à la commande 'rm' On utilise l'utilitaire photorec pour retrouver le fichier supprimé :
$ photorec /dev/nbd0
En spécifiant /dev/nbd0, on permet à l'utilitaire de retrouver uniquement les fichiers appartenant à ce disque, ce qui est quand même plus rapide que de scanner toute la zabeth. On trouve alors le MDP pour ouvrir l'archive
Spécialiste des écoutes
A une certaine vitesse d'écoute, on peut entendre une autre mélodie. En cherchant un peu la mélodie sur internet, on peut trouver la personne que l'on entend.
Perçage de coffre
On désarchive l'archive. Il s'agit d'un fichier que l'on peut décrypter avec crytsetup en mode "plain" en spécifiant un mot de passe. On teste ensuite la valeur de retour de "mount". Si il y a une erreur, la clé utilisée par cryptsetup est érronée. On efface alors le fichier créé avec cryptsetup close.
On utilise le script suivant pour forcer le coffre :
#!/bin/sh i=0 while [ $i -lt 10000 ] do
echo $i | cryptsetup plainOpen chiffre chiffre if [ $? -ne 0 ]; then echo "Erreur lors du crytpsetup" exit fi
mount /dev/mapper/chiffre /mnt/chiffre if [ $? -eq 0 ]; then echo "Succes: $i" exit else cryptsetup close chiffre chiffre fi
i=$(( i+1 ))
done
Une fois le code trouvé, on a un dossier monté. A partir des infos fournies dans le dossier, on reconstitue l'IBAN au complet
Déchiffrer le manuscrit
OK
Dessiner avec des sons
Encore une image en musique
On affiche le fichier .wav dans le terminal, on trouve un bloc un peu bizarre très bien arrangé pour un fichier de ce type. On trouve sur internet de quel type de donnée il s'agit pour le bloc, que l'on peut convertir en image. L'image nous donne ensuite le flag (avec un peu de recherche sur l'image aussi).
Clef à la loupe
Filsss fait un sssssomme
Voir le cours.
Existe-t-il encore de vraies brutes ?
OK
Déjà vu
Avec le GET DESCRIPTOR Response DEVICE
(taille 82), on trouve l'idVendor (Mad Catz) et avec le GET DESCRIPTOR Response CONFIGURATION
(taille 98), on voit que le périphérique utilisé est une souris. On exporte tous les paquets ayant une frame.len==71
car ce sont eux qui contiennent des HID DATA. Dans les HID DATA, on trouve les boutons appuyés par la souris ainsi que ses déplacements. Avec un script python sur ces données, on peut trouver le dessin du flag.
import itertools import json import matplotlib.pyplot as plt def main(): packets_export_file = open('test.json') packets = json.load(packets_export_file) x_offsets = [int(p["_source"]["layers"]["usbhid.data_tree"]["usbhid.data.axis.x"]) for p in packets] y_offsets = [-int(p["_source"]["layers"]["usbhid.data_tree"]["usbhid.data.axis.y"]) for p in packets] x_positions = list(itertools.accumulate(x_offsets)) y_positions = list(itertools.accumulate(y_offsets)) plt.plot(x_positions, y_positions) plt.title("Mouse position") plt.xlabel("X") plt.ylabel("Y") plt.show() main()