Cyber 2021/2022 G3

De Wiki d'activités IMA
Révision datée du 20 janvier 2022 à 12:55 par Lwadbled (discussion | contributions) (Déjà vu)


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()