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.