
Dans ce challenge, nous avons affaire à une archive chifrée (disponible ici contenant des preuves d'une intrusion sur un VPN compromis).
Pour déchiffrer l'archive, nous allons devoir trouver le flag.
Analyse
Regardons un élément intéressant de l'énoncé :
VPN compromis (intégrité). Version 22.3R1 b1647
Ce qui est intéressant ici est la version de ce fameux VPN.
Cherchons sur internet à quoi celà correspond.
Très vite, nous tombons sur ce lien.
Le VPN en question est le VPN Pulse Secure de l'éditeur Ivanti.
Nous remarquons aussi sur ce lien que cette version du VPN est vulnérable à 2 CVEs
- CVE-2023-46805 (Authentication Bypass)
- CVE-2024-21887 (Remote Command Execution)
Ces informations nous seront probablement utiles plus tard dans d'autres parties mais cela ne nous aide pas trop concernant le déchiffrement de l'archive.
Ce que l'on peut faire, c'est lister les fichiers dans l'archive
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ unzip -l archive.encrypted
Archive: archive.encrypted
Length Date Time Name
--------- ---------- ----- ----
64697 2024-03-15 14:58 tmp/temp-scanner-archive-20240315-065846.tgz
194 2022-12-05 16:06 home/VERSION
33 2024-03-15 14:32 data/flag.txt
--------- -------
64924 3 files
Nous avons ici :
- une archive contrnant le résultat du scan
- un fichier de version
- le fichier contenant le flag (et donc le mot de passe de l'archive par extension)
Mais comment faire pour récupérer le fichier contenant le mot de passe de l'archive depuis cette archive elle-même ?
Il existe une faille de sécurité sur les vieux systèmes de chiffrement des archives ZIP.
https://github.com/kimci86/bkcrack/tree/master
A ZIP archive may contain many entries whose content can be compressed and/or encrypted. In particular, entries can be encrypted with a password-based symmetric encryption algorithm referred to as traditional PKWARE encryption, legacy encryption or ZipCrypto.
Nous allons compiler cet outil et l'utiliser pour vérifier si notre archive utilise ZipCrypto et savoir si nous allons pouvoir l'attaquer.
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ bkcrack/install/bkcrack -L archive.encrypted
bkcrack 1.6.1 - 2024-01-22
Archive: archive.encrypted
Index Encryption Compression CRC32 Uncompressed Packed size Name
----- ---------- ----------- -------- ------------ ------------ ----------------
0 ZipCrypto Deflate 126407b2 64697 64714 tmp/temp-scanner-archive-20240315-065846.tgz
1 ZipCrypto Deflate 6c3a35f8 194 120 home/VERSION
2 ZipCrypto Deflate 07ff9365 33 44 data/flag.txt
Tadaa !! Nous allons pouvoir utiliser cet outil. Mais il y a quand même un hic (sinon ça serait pas drôle), c'est qu'en lisant la doc de l'outil, on comprend vite que l'attaque ne peut se faire que si l'on connait le contenu d'un fichier.
En regardant de plus près à la liste des fichiers, on voit un fichier VERSION
.
Il suffirait donc de connaitre le contenu de ce fichier. Oh... Wait..
En parcourant l'aticle plus haut, on peut voir cette section :
$ nc -lv 192.168.1.197 4444
sh: cannot set terminal process group (-1): Inappropriate ioctl for device
sh: no job control in this shell
sh-4.1# id
id
uid=0(root) gid=0(root) groups=0(root)
sh-4.1# cat /home/VERSION
cat /home/VERSION
export DSREL_MAJOR=22
export DSREL_MINOR=3
export DSREL_MAINT=1
export DSREL_DATAVER=4802
export DSREL_PRODUCT=ssl-vpn
export DSREL_DEPS=ive
export DSREL_BUILDNUM=1647
export DSREL_COMMENT="R1"
Nous remarquons que ce fchier correspond au fichier de version de notre cas :
- DSREL_MAJOR=22
- DSREL_MINOR=3
- DSREL_COMMENT="R1
- DSREL_BUILDNUM=1647
Soit 22.3R1 b1647
Essayons l'attaque avec ce fichier.
Attaque
Pour ce faire, nous allons mettre le contenu de ce fichier dans un fichier que l'on va appeler plain.txt
. Ensuite, nous allons le compresser dans une archive non chiffrée plain.zip
. Puis nous allons lancer l'attaque.
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ zip plain.zip plain.txt
adding: plain.txt (deflated 44%)
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ ./bkcrack/install/bkcrack -L plain.zip
bkcrack 1.6.1 - 2024-01-22
Archive: plain.zip
Index Encryption Compression CRC32 Uncompressed Packed size Name
----- ---------- ----------- -------- ------------ ------------ ----------------
0 None Deflate 6c3a35f8 194 108 plain.txt
Nous avons ici compressé le fichier plain.txt
dans plain.zip
et nous vérifions que le fichier est bien stocké en clair.
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ ./bkcrack/install/bkcrack -C archive.encrypted -c home/VERSION -P plain.zip -p plain.txt
bkcrack 1.6.1 - 2024-01-22
[19:45:23] Z reduction using 101 bytes of known plaintext
100.0 % (101 / 101)
[19:45:24] Attack on 83134 Z values at index 6
Keys: 6ed5a98a a1bb2e0e c9172a2f
67.4 % (56028 / 83134)
Found a solution. Stopping.
You may resume the attack with the option: --continue-attack 56028
[19:47:06] Keys
6ed5a98a a1bb2e0e c9172a2f
Nous avons réussi à récupérer les clés de chiffrement du fichier archive.encrypted
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ ./bkcrack/install/bkcrack -C archive.encrypted -c data/flag.txt -k 6ed5a98a a1bb2e0e c9172a2f -d advice_deciphered.deflate
bkcrack 1.6.1 - 2024-01-22
[19:49:17] Writing deciphered data advice_deciphered.deflate (maybe compressed)
Wrote deciphered data.
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ ls
advice_deciphered.deflate archive.encrypted bkcrack pkcrack plain.txt plain.zip
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ ./bkcrack/tools/inflate.py < advice_deciphered.deflate > flag.txt
Nous récupérons ici le fichier déchiffré flag.txt
contenu dans archive.encrypted
.
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ ls
advice_deciphered.deflate archive.encrypted bkcrack flag.txt pkcrack plain.txt plain.zip
kali@Tyrell:~/FCSC/2024/forensic/Horreur, malheur 1 - Archive chiffrée$ cat flag.txt
50c53be3eece1dd551bebffe0dd5535c
Et voici le flag et le mot de passe de l'archive.
Flag :
FCSC{50c53be3eece1dd551bebffe0dd5535c}

Références :