diff --git a/README.md b/README.md index 71c77ab..1e86b32 100644 --- a/README.md +++ b/README.md @@ -45,16 +45,16 @@ clang -o rop vulnerable.c -m64 -fno-stack-protector -Wl,-z,relro,-z,now,-z,noex ``` _Explication :_ -> clang : Le compilateur Clang est utilisé pour compiler le code source. -> -o rop : Spécifie le nom du fichier de sortie, "rop" dans ce cas. -> vulnerable.c : Le fichier source C à compiler, "vulnerable.c" ici. -> -m64 : Indique que l'on souhaite compiler en mode 64 bits. -> -fno-stack-protector : Désactive la protection du stack, ce qui peut être nécessaire pour les exploits. -> -Wl,-z,relro,-z,now,-z,noexecstack : Options passées au linker (ld) pour spécifier diverses options de sécurité : -> -z,relro : Active la relocalisation en lecture seule, renforcant la sécurité des structures de données. -> -z,now : Demande au linker de résoudre toutes les références symboliques immédiatement, plutôt qu'à la demande, renforçant ainsi la sécurité. -> -z,noexecstack : Empêche l'exécution de code à partir de la pile. -> -static : Indique au linker de lier statiquement les bibliothèques, plutôt que dynamiquement. Cela signifie que toutes les bibliothèques seront incluses dans le binaire final. +> * clang : Le compilateur Clang est utilisé pour compiler le code source. +> * -o rop : Spécifie le nom du fichier de sortie, "rop" dans ce cas. +> * vulnerable.c : Le fichier source C à compiler, "vulnerable.c" ici. +> * -m64 : Indique que l'on souhaite compiler en mode 64 bits. +> * -fno-stack-protector : Désactive la protection du stack, ce qui peut être nécessaire pour les exploits. +> * -Wl,-z,relro,-z,now,-z,noexecstack : Options passées au linker (ld) pour spécifier diverses options de sécurité : +> * -z,relro : Active la relocalisation en lecture seule, renforcant la sécurité des structures de données. +> * -z,now : Demande au linker de résoudre toutes les références symboliques immédiatement, plutôt qu'à la demande, renforçant ainsi la sécurité. +> * -z,noexecstack : Empêche l'exécution de code à partir de la pile. +> * -static : Indique au linker de lier statiquement les bibliothèques, plutôt que dynamiquement. Cela signifie que toutes les bibliothèques seront incluses dans le binaire final. ***1.*** Lorsque vous compilez ce premier programme, quelle fonction est annoncée comme dangereuse et présente la première faille pour effectuer l'attaque ROP ? @@ -111,14 +111,13 @@ Néanmoins un problème persiste qui est de trouver un endroit ou écrire en mé ### Dynamique vs Statique -Commençons par obtenir un exécutable **dynamique** de notre programme : +Tout à l'heure nous avons obtenu un exécutable **statique** de notre programme. Maintenant, nous allons construire un exécutable appelé **dynamique** : ``` -gcc -c main.c -o mainDynamic.c +gcc -c vulnerable.c -o dynamic.c ``` +***1.*** Quelle est la différence entre les deux fichiers ? -***1.*** Désormais, vous allez devoir compiler une deuxième fois le fichier `main.c`, afin d'obtenir un exécutable **statique**. - -***2.*** Quelle est la différence entre les deux fichiers ? +__Explication__: _Dans le fichier statique toutes les libraries qu'il utilise sont compilées dedans, dans un unique fichier. Le dynamique par contre, fait appel aux libraries pendant l'exécution du programme. Cela est important car avec ROP, les ressources dont dispose l'attaquant dependent du contenu du fichier. Le fait d'avoir les libraries, signifie donc, plus de gadgets possibles._ ### Gadgtes et ROPChain @@ -165,7 +164,7 @@ r.interactive() Vous noterez que le scipt n'est pas complet ! C'est maintenant à vous de jouer ! -***3.*** A l'aide de l'outil ROPgadget, construisez la ROP Chain permettant d'obtenir un reverse shell. +***2.*** A l'aide de l'outil ROPgadget, construisez la ROP Chain permettant d'obtenir un reverse shell. ---