Typo
continuous-integration/drone/push Build is passing Details

main
Clément FRÉVILLE 2 years ago
parent bb3c408a69
commit 0e53ee43ac

@ -17,7 +17,7 @@
_Ce sujet a été testé à l'IUT (OpenSSL 1) et sur une machine personnelle (OpenSSL 3). Il ne fonctionne que sous GNU/Linux._
Paquets nécessaires sous Debian : `build-essentials zlib1g-dev libssl-dev`
Paquets nécessaires sous Debian : `build-essentials zlib1g-dev libssl-dev openssl`
= Préparation
@ -28,7 +28,7 @@ git clone https://codefirst.iut.uca.fr/git/clement.freville2/http-crime
cd http-crime
```
Compiler le projet avec Make, et générez un certificat auto-signé à l'aide d'OpenSSL.
Compiler le projet avec Make, et générer un certificat auto-signé à l'aide d'OpenSSL.
```bash
make
@ -45,7 +45,7 @@ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3
openssl s_client -connect 127.0.0.1:8080 -comp < /dev/null
```
- 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

Loading…
Cancel
Save