MCTEENX
đť„ž Introduction
đť„ž Objectif
L’objectif de ce challenge consiste à découvrir le mot de passe du fichier .zip pour accéder à son contenu et trouver le flag.
đť„ž Solution
À l’intérieur de ce fichier .zip, nous pouvons voir un fichier script.sh.
Le fichier .zip est protégé par un mot de passe, nous devons donc trouver une solution pour voir le contenu de script.sh.
Pour cela, nous pouvons essayer de casser le mot de passe avec l’outil zip2john
1
2
zip2john monfichier.zip > myhashzip
john -wordlist=/usr/share/wordlists/rockyou.txt myhashzip
Malheureusement, cela n’a rien donné… Dans l’introduction du challenge nous avons un petit texte :
I fly in the sky, I got wings on my feet.
En faisant des recherches sur internet, on apprend que cette phrase est tirée de l’album Whole Lotta Red dont le titre de la musique est King Vamp. Je me suis alors dit qu’il fallait créer une wordlist personnalisée en utilisant les paroles de la chanson. Cependant, cette méthode n’a pas fonctionné non plus.
Plus tard, sur le discord officiel du CTF, j’ai appris que l’introduction n’avait pas de rapport avec le challenge.
Un membre de mon équipe m’a fait découvrir qu’il existait une vulnérabilité sur ZipCrypto, connue sous le nom de Known-Plaintext Attack*.
Pour réaliser cette technique, nous devons disposer de plusieurs prérequis :
Notre fichier .zip doit utiliser soit l’algorithme de chiffrement ZipCrypto Store ou ZipCrypto Deflate.
1
7z l -slt red.zip | grep Method
Il faut connaître au moins 12 octets de plaintext et au moins 8 d’entre eux doivent être contigus..
L’avantage d’avoir un fichier .zip, c’est que nous pouvons lister les noms des fichiers inclus sans même connaître le mot de passe. Ainsi, avec l’extension de ces fichiers, nous pouvons facilement en déduire leurs magic bytes.
Dans notre cas, nous avons vu tout à l’heure que notre fichier avait un fichier script.sh. Nous savons qu’un script shell commence par un Shebang du style :
#!/bin/bash
Si on compte le nombre d’octets, nous en avons 11, mais avec un retour à la ligne (\n), on en a 12 !
Toutes nos conditions sont remplies ! Nous pouvons alors commencer l’attaque en utilisant bkcrack.
1
./bkcrack -C red.zip -c script.sh -P myzip.zip -p script.sh
Ă€ savoir que cette technique peut prendre pas mal de temps.
Nous avons donc récupéré les clés de chiffrement. Nous pouvons maintenant récupérer le contenu du fichier script.sh.
1
./bkcrack -C red.zip -c script.sh -k c0b1bc78 c3206dfc e7e5bae1 -d script.sh
En analysant le fichier script.sh, nous trouvons une grande chaîne en base64.
Nous obtenons donc une image que nous allons récupérer et analyser.
Nous découvrons qu’il y a une chaîne en hexadécimale cachée via la technique du lsb.
Nous trouvons une chaîne assez étrange. Après plusieurs tentatives de comprendre/décoder cette chaîne, le XOR semble être une bonne piste. Cependant, le brute force de la clé sur le XOR ne donne rien. Il fallait donc essayer de deviner le début du plaintext pour retrouver la clé. Comme nous savons que notre flag commence forcément par TFCCTF{ nous pouvions espérer que notre plaintext commence ainsi.
Ainsi, nous pouvons voir la répétition de la clé qui est WLR. Nous pouvons désormais XOR notre chaîne avec la bonne clé.
đť„ž FLAG : TFCCTF{4int_n0_reasoN1n_a1nt_n0_fixin}
đť„ž
Un grand merci Ă Dysnome pour son aide sur ce challenge.