Horreur, malheur 1/5 - Archive chiffrée

horreur

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}

lolcat

Références :