Shutlock Archive à couches multiples 1/3
Nous avons intercepté une archive MLA. Cette archive contient le code PIN du téléphone d’une cible. Il nous faut à tout prix ce code PIN pour accéder au téléphone de la cible. Malheureusement, l’archive est corrompue. Quelques octets sont manquants. S’il vous plaît, analysez l’archive et retrouvez le code PIN. Nous savons que le fichier dans l’archive ne contient que le code PIN et rien d’autre.
Le flag est au format suivant : SHLK{codepin}
Exemple : SHLK{1234}
Source : codepin_corrupted.mla
SHA-256 : 937e46d73aed2ee24095aea197747ee69ce6eda51b63073acfe2cb90072cb46a
Présentation Link to heading
Multi Layer Archive est une application codée par https://github.com/ANSSI-FR/MLA qui permet de créer des archive crypto-résistante.
Dans la partie 1/3, nous allons nous intéresser à un défaut d’utilisation du système d’intrégrité des fichiers.
La cible Link to heading
00000000: 4d4c 4146 4141 4141 0200 0000 004d 4c41 MLAFAAAA.....MLA
00000010: 454e 4141 4100 4d41 4542 0000 0000 0000 ENAAA.MAEB......
00000020: 0000 000c 0000 0000 0000 0063 6f64 655f ...........code_
00000030: 7069 6e2e 7478 7400 4d41 4542 0100 0000 pin.txt.MAEB....
00000040: 0000 0000 0000 0400 0000 0000 0000 ffff ................
00000050: ffff 4d41 4542 ff00 0000 0000 0000 0000 ..MAEB..........
00000060: eb75 3992 4cf4 b8b6 7488 5752 10db 3526 .u9.L...t.WR..5&
00000070: ec7c 2daa f546 705a c37e 5039 c71c 36f3 .|-..FpZ.~P9..6.
00000080: 4d41 4542 fe01 0100 0000 0000 0000 0c00 MAEB............
00000090: 0000 0000 0000 636f 6465 5f70 696e 2e74 ......code_pin.t
000000a0: 7874 0300 0000 0000 0000 0900 0000 0000 xt..............
000000b0: 0000 0000 0000 0000 0000 2b00 0000 0000 ..........+.....
000000c0: 0000 0400 0000 0000 0000 4500 0000 0000 ..........E.....
000000d0: 0000 0000 0000 0000 0000 5500 0000 0000 ..........U.....
000000e0: 0000 0001 0000 0000 0000 0000 0100 0000 ................
000000f0: 0000 0000 454d 4c41 4141 4141 ....EMLAAAAA
l’archive se présente comme ceci. Les headers et footers sont modifiés pour la rendre inutilisable par mlar, mais cela va-t-il réellement nous bloquer ?
Nous savons que l’archive contient un fichier code_pin.txt (0x020), l’intégrité de ce fichier est prouvée par la chaine contenue entre les MAEB (0x60-0x79).
Un petit travail d’exfiltration permet de récupérer la data:
eb7539924cf4b8b67488575210db3526ec7c2daaf546705ac37e5039c71c36f3
c’est le hash en SHA-256 du fichier, un fichier texte étant des données brutes, ce hash est donc la résultante du pin lui même.
résolution Link to heading
Une fois que l’on a compris cela, il ne reste plus qu’à bruteforcer les 10k possibilités de code pin (de 0000 à 9999).
Pour ce faire, python est notre meilleur ami, et cette année, nous allons introduire une nouveauté, nous allons utiliser itertools qui va permettre de générer la liste des pin en une fraction de seconde.
#!/usr/bin/env python3
from Crypto.Hash import SHA256
import itertools
import string
hex_hash = "eb7539924cf4b8b67488575210db3526ec7c2daaf546705ac37e5039c71c36f3"
dict = string.digits
s = ""
def main() -> none:
print(f"[!] hash cible :\t{hex_hash}")
try:
for _ in itertools.product(dict, repeat=4):
pin = s.join(_)
current = SHA256.new(pin.encode()).hexdigest()
if current == hex_hash:
print(f"[*] Pin is :\t{pin}")
break
else:
print(f"[?] Trying :\t{pin}", end="\r")
except StopIteration:
print(f"[!] Fin de l'itération")
if __name__ == "__main__":
main()
Il ne nous reste plus qu’à executer le script et récupérer notre précieux
time python exploit.py
[!] hash cible : eb7539924cf4b8b67488575210db3526ec7c2daaf546705ac37e5039c71c36f3
[*] Pin is : 4583
python exploit.py 0,11s user 0,02s system 98% cpu 0,131 total
SHLK{4583}