Post

MCTEENX

đť„ž Introduction

Intro

đť„ž 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.

Intro2

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.

Password

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 

Zip

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

Key

Ă€ 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.

Base64

Nous obtenons donc une image que nous allons récupérer et analyser.

Image_analysis

Nous découvrons qu’il y a une chaîne en hexadécimale cachée via la technique du lsb.

Hex

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.

Xor

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

đť„ž FLAG : TFCCTF{4int_n0_reasoN1n_a1nt_n0_fixin} đť„ž

Un grand merci Ă  Dysnome pour son aide sur ce challenge.

This post is licensed under CC BY 4.0 by the author.