Cyber 2021/2022 G1 : Différence entre versions

De Wiki d'activités IMA
(Encore une image en musique)
(Reverse engineering d'un thermomètre bluetooth)
 
(13 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
= Challenges ctf =
 
= Challenges ctf =
 +
 +
Pour valider les challenges nous utilisons le login axel.chemin@polytech-lille.net dans l'équipe "achemin1" .
  
 
== Flocons ==
 
== Flocons ==
 +
 +
Il faut lire les petits points descendeant sur les deux côtés de l'image
  
 
== Espion dans le bus ==
 
== Espion dans le bus ==
  
Ce challenge était simple : solution à mettre sur le Wiki après le CTF.
+
https://blog.stayontarget.org/2019/03/decoding-mixed-case-usb-keystrokes-from.html
 +
utiliser cette partie du lien
 +
Leftover Capture Data as a column (by right-clicking on one of the entries, and selecting "Apply as Column") then File -> Export Packet Dissections -> As CSV, open the resulting file,
 +
cut the capture data column out and the double-quotes, and the first line that says "Leftover Capture Data"
 +
-or-
 +
I learned a much easier way when researching this write-up was to use tshark to extract the leftover capture data (be sure to pipe to tr -d : to get rid of the colons in the output.
 +
Redirect output to a text file, once you've confirmed it looks good.
 +
taper dans le shell :
 +
tshark -r capture-myst1.pcap -T fields -e usb.capdata | tr -d : | grep "\S" >prkeycodes.txt
 +
car nous voulons récupérer la partie Leftover Capture Data
 +
Nous avons rajouté ceci | grep "\S" pour ne pas avoir des lignes entre les résulats et nous avons redirigé (stocké) les résultats dans un fichier prkeycodes.txt
 +
Nous avons tapé ceci :
 +
cat prkeycodes.txt
 +
pour vérifier que le fichier a mis les résultats à la suite (1 résultat par ligne).
 +
créer le fichier decodeusbkeypress.py et mettre le script donné dans le lien (il a fallu faire quelques modif dans le script car dans le dictionnaire il manque 83 d'où le key error 83)
 +
Taper dans le shell :
 +
python3 decodeusbkeypress.py prkeycodes.txt
 +
on obtient le code dans le shell.
  
 
== Travail de serrurerie ==
 
== Travail de serrurerie ==
  
Ce challenge était simple : solution à mettre sur le Wiki après le CTF.
+
ans l'archive data.zip, il y a un fichier "data" .
 +
 
 +
Ce fichier est un binaire, dont la commande "file" le décrit comme :
 +
 
 +
    data: DOS/MBR boot sector; partition 1 : ID=0xb, start-CHS (0x0,32,33), end-CHS (0xc,223,19), startsector 2048, 204800 sectors; partition 2 : ID=0x83, start-CHS (0xc,223,20), end-CHS (0x41,69,4), startsector 206848, 841728 sectors
 +
 
 +
Mais l'astuce proposé est d'utiliser les Network Block Device.
 +
 
 +
=== Installation et démarrage du serveur et du client NBD ===
 +
 
 +
Ajout dans le fichier /etc/nbd-server/config :
 +
 
 +
    [export]
 +
      exportname = /home/pifou/Axel_NBD/data
 +
      port = 2000
 +
 
 +
Et le lancer avec
 +
 
 +
    nbd-server
 +
 
 +
Pour le client :
 +
 
 +
    nbd-client 127.0.0.1 /dev/nbd0 -name export
 +
 
 +
Il y a ces fichiers qui ont apparu
 +
 
 +
    # ls /dev/nbd
 +
    nbd0    nbd0p2  nbd10  nbd12  nbd14  nbd2    nbd4    nbd6    nbd8
 +
    nbd0p1  nbd1    nbd11  nbd13  nbd15  nbd3    nbd5    nbd7    nbd9
 +
 
 +
=== Recherche dans les NBD devices ===
 +
 
 +
Ensuite il faut monter les 2 périphériques :
 +
 
 +
    mkdir /tmp/axelNbd1
 +
    mount /dev/nbd0p1 /tmp/axelNbd1
 +
    mkdir /tmp/axelNbd2
 +
    mount /dev/nbd0p2 /tmp/axelNbd2
 +
 
 +
Le premier système de fichier présente un seul fichier "code" avec comme contenu "TROPFACILE"
 +
 
 +
Le second système de fichier est composé d'un dossier lost+found et d'une archive zip "secret.zip" .
 +
 
 +
"TROPFACILE" n'est pas le mot de passe. Les variations de casse non plus. A ce moment là, il n'y a plus de mot de passe disponible, il est décidé de lancer une bruteforce avec
 +
 
 +
    fcrackzip --charset aA1 --use-unzip secret.zip
  
 
== Spécialiste des écoutes ==
 
== Spécialiste des écoutes ==
  
Ce challenge était simple : solution à mettre sur le Wiki après le CTF.
+
Le fichier téléchargé extrait.wav est bien un fichier audio, extrait a priori de l'extrait d'un candidat à la présidentielle. Son nom n'est pas le drapeau.
 +
 
 +
On entend tout de suite des sons aigues, le drapeau se trouve donc sûrement dans le flux audio. On repère très bien dans le spectre la partie haute fréquence, qui répète un motif plusieurs fois.
 +
 
 +
C'est en baissant la fréquence d'échantillonage de la piste à 48kHz que l'on retrouve l'audio caché (par effet repliement de spectre) : Potemkine - Jean Ferrat
  
 
== Perçage de coffre ==
 
== Perçage de coffre ==
  
Ce challenge était simple : solution à mettre sur le Wiki après le CTF.
+
"file" ne donne pas d'information sur le fichier, à supposer que c'est un système de fichier chiffré avec cryptsetup (on m'a un petit peu aidé, c'est vrai) :
 +
 
 +
On peut tester le mot de passe en essayant d'ouvrir le périphérique et monter le volume :
 +
 
 +
    mkdir pointMontage
 +
    cryptsetup open --type plain chiffre pointMontage
 +
 
 +
(Le mot de passe est demandé)
 +
 
 +
    mount /dev/mapper/pointMontage ./montage
 +
 
 +
Si et seulement si le mot de passe entré est bon, la dernière commande retourne 0.
 +
 
 +
Sinon il faut ré-essayer avec un autre mot de passe à 4 chiffres, sans oublier de refermer le périphérique :
 +
 
 +
    cryptsetup close pointMontage
 +
 
 +
Pour cela j'ai fait un fichier python, trèèèès overkill (et pas si bien).
 +
 
 +
[METTRE LE SCRIPT]
 +
 
 +
Si besoin de nettoyer :
 +
 
 +
    umount pointMontage
 +
    rm -r pointMontage
 +
 
 +
Le fichier trouvé contient des informations bancaires
 +
 
 +
    # cat mntA/compte
 +
    Code banque : 12345
 +
    Code guichet : 66666
 +
    Numéro de compte : 00001100111
 +
 
 +
On complète l'IBAN avec https://www.iban.com/calculate-iban en supposant que le propriétaire est français.
 +
 
 +
La solution : FR7612345666660000110011189
  
 
== Déchiffrer le manuscrit ==
 
== Déchiffrer le manuscrit ==
 +
 +
Commencé, utilisation de cette documentation entre autre :
  
 
https://learn.adafruit.com/introducing-bluefruit-ez-key-diy-bluetooth-hid-keyboard/sending-keys-via-serial#raw-hid-mouse-reports-823930-11
 
https://learn.adafruit.com/introducing-bluefruit-ez-key-diy-bluetooth-hid-keyboard/sending-keys-via-serial#raw-hid-mouse-reports-823930-11
Ligne 25 : Ligne 132 :
 
== Dessiner avec des sons ==
 
== Dessiner avec des sons ==
  
 +
Commencé, récupération du header de l'image PGM/PPM.
 +
 +
    P6
 +
    225 225
 +
    255
 +
 +
Problème de décodage pour le reste.
  
 
== Encore une image en musique ==
 
== Encore une image en musique ==
  
Ce challenge était simple : solution à mettre sur le Wiki après le CTF.
+
Le fichier audiodump est identifié comme un wav par file ou Audacity.
 +
 
 +
Mais dans les métadonnés du fichier, il apparaît un très long texte dans le champ 'Comment' .
 +
 
 +
    exiftool audiodump.wav | grep "Comment" | cut -d ':' -f2
 +
 
 +
En utilisant la recette magique de CyberChef on retrouve une image : https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)Render_Image('Raw')
 +
 
 +
Après d'intensives recherches Google sur un "vaisseau bleu avec des crânes", nous découvrons le nom du vaisseau.
  
 
== Clef à la loupe ==
 
== Clef à la loupe ==
Ligne 35 : Ligne 157 :
 
== Filsss fait un sssssomme ==
 
== Filsss fait un sssssomme ==
  
 +
Effectivement, zéro technique !
 +
 +
Thomas Vantroys avait présenté les techniques d' "ingénierie sociale"
  
 
== Existe-til encore de vraies brutes ? ==
 
== Existe-til encore de vraies brutes ? ==
  
 +
Taper dans le shell :
 +
crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -t @,@,@,@, |grep n > worldlist.txt
 +
Pour trouver le mot de passe, on génère un dictionnaire de 8 caractères alternant consonne voyelle.
 +
-t @,@,@,@, permet de donner le pattern consonne voyelle
 +
grep n permet de sélectionner tous les mots de passe du dictionnaire avec un n aux différentes positions.
 +
on redirige les résultats dans un fichier worldlist.txt
 +
 +
on compte le nombre de résultats (de lignes) du fichier worldlist.txt afin de vérifier que la redirection des résultats dans le fichier s'est bien passé.
 +
wc worldlist.txt
 +
on lance aircrack-ng en essayant les différents résultats du worldlist.txt (=du dictionnaire) sur le ficher wifi_wpa.cap contenant les paquets de connexion WiFi
 +
afin de trouver une clef WPA-PSK de connexion à un réseau WiFi.
 +
aircrack-ng -w worldlist.txt wifi_wpa.cap
 +
 +
 +
 +
                              Aircrack-ng 1.6
 +
 +
      [00:13:56] 13010880/38463984 keys tested (15802.92 k/s)
 +
 +
      Time left: 26 minutes, 50 seconds                        33.83%
 +
 +
                          KEY FOUND! [ lyhanobe ]
 +
 +
 +
      Master Key    : 2A 21 8E 82 63 B2 FE 97 54 22 62 B0 07 49 59 57
 +
                      4C E0 34 E8 80 AB 79 E8 D4 87 39 1B 75 9D 37 B1
 +
 +
      Transient Key  : A6 05 D0 A0 AD 7F E5 E6 8D AD A5 8A 48 83 91 ED
 +
                      53 FD 43 CB A5 3F BE 4E 33 FA 4E D4 9B EC 58 4E
 +
                      BF 65 56 22 3E 36 D8 0C 04 76 C6 7B EE ED 25 C1
 +
                      C4 0A 36 7F 8C E1 6B 28 62 50 CE E0 F4 E7 F6 44
 +
 +
      EAPOL HMAC    : C7 5A B8 6B 86 A1 00 4C 16 E5 9A 7D B9 05 F7 C3
 +
 +
historique des commandes :
 +
2007  crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -d @,@,@,@ |grep n > worldlist.txt
 +
2008  crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -t @,@,@,@ |grep n > worldlist.txt
 +
2009  crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -t @,@,@,@, |grep n > worldlist.txt
 +
2010  wc wordlist.txt
 +
2011  wc worldlist.txt
 +
2012  aircrack-ng -w worldlist.txt wifi_wpa.cap
 +
2013  history
  
 
== Déjà vu ==
 
== Déjà vu ==
 +
 +
= Reverse engineering d'un thermomètre bluetooth =
 +
 +
Quelques recherches ont été faites avec Alexandre Boé, possibilité de documenter par la suite.

Version actuelle datée du 20 janvier 2022 à 13:52

Challenges ctf

Pour valider les challenges nous utilisons le login axel.chemin@polytech-lille.net dans l'équipe "achemin1" .

Flocons

Il faut lire les petits points descendeant sur les deux côtés de l'image

Espion dans le bus

https://blog.stayontarget.org/2019/03/decoding-mixed-case-usb-keystrokes-from.html utiliser cette partie du lien Leftover Capture Data as a column (by right-clicking on one of the entries, and selecting "Apply as Column") then File -> Export Packet Dissections -> As CSV, open the resulting file, cut the capture data column out and the double-quotes, and the first line that says "Leftover Capture Data" -or- I learned a much easier way when researching this write-up was to use tshark to extract the leftover capture data (be sure to pipe to tr -d : to get rid of the colons in the output. Redirect output to a text file, once you've confirmed it looks good. taper dans le shell : tshark -r capture-myst1.pcap -T fields -e usb.capdata | tr -d : | grep "\S" >prkeycodes.txt car nous voulons récupérer la partie Leftover Capture Data Nous avons rajouté ceci | grep "\S" pour ne pas avoir des lignes entre les résulats et nous avons redirigé (stocké) les résultats dans un fichier prkeycodes.txt Nous avons tapé ceci : cat prkeycodes.txt pour vérifier que le fichier a mis les résultats à la suite (1 résultat par ligne). créer le fichier decodeusbkeypress.py et mettre le script donné dans le lien (il a fallu faire quelques modif dans le script car dans le dictionnaire il manque 83 d'où le key error 83) Taper dans le shell : python3 decodeusbkeypress.py prkeycodes.txt on obtient le code dans le shell.

Travail de serrurerie

ans l'archive data.zip, il y a un fichier "data" .

Ce fichier est un binaire, dont la commande "file" le décrit comme :

   data: DOS/MBR boot sector; partition 1 : ID=0xb, start-CHS (0x0,32,33), end-CHS (0xc,223,19), startsector 2048, 204800 sectors; partition 2 : ID=0x83, start-CHS (0xc,223,20), end-CHS (0x41,69,4), startsector 206848, 841728 sectors

Mais l'astuce proposé est d'utiliser les Network Block Device.

Installation et démarrage du serveur et du client NBD

Ajout dans le fichier /etc/nbd-server/config :

   [export]
      exportname = /home/pifou/Axel_NBD/data
      port = 2000

Et le lancer avec

   nbd-server

Pour le client :

   nbd-client 127.0.0.1 /dev/nbd0 -name export

Il y a ces fichiers qui ont apparu

   # ls /dev/nbd
   nbd0    nbd0p2  nbd10   nbd12   nbd14   nbd2    nbd4    nbd6    nbd8
   nbd0p1  nbd1    nbd11   nbd13   nbd15   nbd3    nbd5    nbd7    nbd9

Recherche dans les NBD devices

Ensuite il faut monter les 2 périphériques :

   mkdir /tmp/axelNbd1
   mount /dev/nbd0p1 /tmp/axelNbd1
   mkdir /tmp/axelNbd2
   mount /dev/nbd0p2 /tmp/axelNbd2

Le premier système de fichier présente un seul fichier "code" avec comme contenu "TROPFACILE"

Le second système de fichier est composé d'un dossier lost+found et d'une archive zip "secret.zip" .

"TROPFACILE" n'est pas le mot de passe. Les variations de casse non plus. A ce moment là, il n'y a plus de mot de passe disponible, il est décidé de lancer une bruteforce avec

   fcrackzip --charset aA1 --use-unzip secret.zip

Spécialiste des écoutes

Le fichier téléchargé extrait.wav est bien un fichier audio, extrait a priori de l'extrait d'un candidat à la présidentielle. Son nom n'est pas le drapeau.

On entend tout de suite des sons aigues, le drapeau se trouve donc sûrement dans le flux audio. On repère très bien dans le spectre la partie haute fréquence, qui répète un motif plusieurs fois.

C'est en baissant la fréquence d'échantillonage de la piste à 48kHz que l'on retrouve l'audio caché (par effet repliement de spectre) : Potemkine - Jean Ferrat

Perçage de coffre

"file" ne donne pas d'information sur le fichier, à supposer que c'est un système de fichier chiffré avec cryptsetup (on m'a un petit peu aidé, c'est vrai) :

On peut tester le mot de passe en essayant d'ouvrir le périphérique et monter le volume :

   mkdir pointMontage
   cryptsetup open --type plain chiffre pointMontage

(Le mot de passe est demandé)

   mount /dev/mapper/pointMontage ./montage

Si et seulement si le mot de passe entré est bon, la dernière commande retourne 0.

Sinon il faut ré-essayer avec un autre mot de passe à 4 chiffres, sans oublier de refermer le périphérique :

   cryptsetup close pointMontage

Pour cela j'ai fait un fichier python, trèèèès overkill (et pas si bien).

[METTRE LE SCRIPT]

Si besoin de nettoyer :

   umount pointMontage
   rm -r pointMontage

Le fichier trouvé contient des informations bancaires

   # cat mntA/compte
   Code banque : 12345
   Code guichet : 66666
   Numéro de compte : 00001100111

On complète l'IBAN avec https://www.iban.com/calculate-iban en supposant que le propriétaire est français.

La solution : FR7612345666660000110011189

Déchiffrer le manuscrit

Commencé, utilisation de cette documentation entre autre :

https://learn.adafruit.com/introducing-bluefruit-ez-key-diy-bluetooth-hid-keyboard/sending-keys-via-serial#raw-hid-mouse-reports-823930-11

Dessiner avec des sons

Commencé, récupération du header de l'image PGM/PPM.

   P6
   225 225
   255

Problème de décodage pour le reste.

Encore une image en musique

Le fichier audiodump est identifié comme un wav par file ou Audacity.

Mais dans les métadonnés du fichier, il apparaît un très long texte dans le champ 'Comment' .

   exiftool audiodump.wav | grep "Comment" | cut -d ':' -f2

En utilisant la recette magique de CyberChef on retrouve une image : https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)Render_Image('Raw')

Après d'intensives recherches Google sur un "vaisseau bleu avec des crânes", nous découvrons le nom du vaisseau.

Clef à la loupe

Filsss fait un sssssomme

Effectivement, zéro technique !

Thomas Vantroys avait présenté les techniques d' "ingénierie sociale"

Existe-til encore de vraies brutes ?

Taper dans le shell : crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -t @,@,@,@, |grep n > worldlist.txt Pour trouver le mot de passe, on génère un dictionnaire de 8 caractères alternant consonne voyelle.

-t @,@,@,@, permet de donner le pattern consonne voyelle

grep n permet de sélectionner tous les mots de passe du dictionnaire avec un n aux différentes positions. on redirige les résultats dans un fichier worldlist.txt

on compte le nombre de résultats (de lignes) du fichier worldlist.txt afin de vérifier que la redirection des résultats dans le fichier s'est bien passé. wc worldlist.txt on lance aircrack-ng en essayant les différents résultats du worldlist.txt (=du dictionnaire) sur le ficher wifi_wpa.cap contenant les paquets de connexion WiFi afin de trouver une clef WPA-PSK de connexion à un réseau WiFi. aircrack-ng -w worldlist.txt wifi_wpa.cap


                              Aircrack-ng 1.6
     [00:13:56] 13010880/38463984 keys tested (15802.92 k/s)
     Time left: 26 minutes, 50 seconds                         33.83%
                          KEY FOUND! [ lyhanobe ]


     Master Key     : 2A 21 8E 82 63 B2 FE 97 54 22 62 B0 07 49 59 57
                      4C E0 34 E8 80 AB 79 E8 D4 87 39 1B 75 9D 37 B1
     Transient Key  : A6 05 D0 A0 AD 7F E5 E6 8D AD A5 8A 48 83 91 ED
                      53 FD 43 CB A5 3F BE 4E 33 FA 4E D4 9B EC 58 4E
                      BF 65 56 22 3E 36 D8 0C 04 76 C6 7B EE ED 25 C1
                      C4 0A 36 7F 8C E1 6B 28 62 50 CE E0 F4 E7 F6 44
     EAPOL HMAC     : C7 5A B8 6B 86 A1 00 4C 16 E5 9A 7D B9 05 F7 C3

historique des commandes :

2007  crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -d @,@,@,@ |grep n > worldlist.txt
2008  crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -t @,@,@,@ |grep n > worldlist.txt
2009  crunch 8 8 bcdfghjklmnpqrstvwxz aeiouy -t @,@,@,@, |grep n > worldlist.txt
2010  wc wordlist.txt
2011  wc worldlist.txt
2012  aircrack-ng -w worldlist.txt wifi_wpa.cap
2013  history

Déjà vu

Reverse engineering d'un thermomètre bluetooth

Quelques recherches ont été faites avec Alexandre Boé, possibilité de documenter par la suite.