- Nous allons recompiler la bibliothèque #link("https://www.openssl.org/")[OpenSSL] avec le support de la bibliothèque #link("https://github.com/madler/zlib")[_zlib_]. Comparer avec comment la plupart des #link("https://git.alpinelinux.org/aports/tree/main/openssl/APKBUILD?h=3.18-stable#n132")[distributions GNU/Linux] fournissent OpenSSL. Donner une raison pour laquelle l'option `no-zlib` est précisée.
- Nous allons recompiler la bibliothèque #link("https://www.openssl.org/")[OpenSSL] avec le support de la bibliothèque #link("https://github.com/madler/zlib")[_zlib_]. Comparer avec comment la plupart des #link("https://git.alpinelinux.org/aports/tree/main/openssl/APKBUILD?h=3.18-stable#n132")[distributions GNU/Linux] fournissent OpenSSL. Donner une raison pour laquelle l'option `no-zlib` est précisée par ces distributions.
```bash
cd /tmp
@ -57,15 +57,15 @@ make -j$(nproc)
- La variable d'environnement `LD_PRELOAD`#footnote[`man 8 ld.so`] permet de charger une bibliothèque compilée avant toutes les autres. Cela nous permet dans notre cas de remplacer la version d'OpenSSL du système par notre version. Appeler l'exécutable `server` et `client` avec les fichiers `.so` issus de la compilation d'OpenSSL.
- Observer le comportement du client. Quels arguments prend-il en compte ? Que connaît-on sur le résultat de la requête HTTPS ?
- Observer le comportement du client. Quels arguments prend-il en compte ? Que connaît-on sur la requête HTTPS ?
= Attaque
Profiter des vulnérabilités de CRIME pour récupérer le _flag_ en jeu. Il s'agit d'un cookie nommé `flag` envoyé par le client vers le serveur.
Pour cela, le code Python suivant peut vous être utile. On rappelle le principe de l'attaque CRIME : lorsque qu'un attaquant peut contrôler une partie des données, il peut progressivement récupérer le cookie en modifiant les parties et en observant comment la taille totale de la requête change pendant la compression.
Pour cela, le code Python suivant peut vous être utile. On rappelle le principe de l'attaque CRIME : lorsqu'un attaquant peut contrôler une partie des données, il peut progressivement récupérer le cookie en modifiant les parties et en observant comment la taille totale de la requête change pendant la compression.
Une séquence de caractères répétée sera compressée. Par conséquence, si une partie de l'URL correspond à une partie du cookie, alors la taille de la requête sera plus petite. Il suffit alors de tester toutes les possibilités pour chaque caractère du cookie tant qu'on peut ajouter un caractère qui réduit ou ne modifie la taille.
Une séquence de caractères répétée sera compressée. Par conséquence, si une partie de l'URL correspond à une partie du cookie, alors la taille de la requête sera plus petite. Il suffit alors de tester toutes les possibilités pour chaque caractère. On continue tant qu'on peut ajouter un caractère à la requête qui n'augmente pas sa taille.
```py
from string import ascii_lowercase, ascii_uppercase, digits