Aller au contenu

0x7000 · Domaine

Techniques d'exploitation

Un bug ne devient une vulnérabilité que lorsqu'on le transforme en contrôle du programme. Ce domaine parcourt de bout en bout les techniques classiques qui y parviennent — détourner une adresse de retour sauvegardée, enchaîner du code existant avec le ROP, rappeler la libc, écraser la GOT — sur de petits programmes délibérément vulnérables que vous compilez vous-même, mitigations désactivées, dans un labo jetable. Chaque tutoriel se termine en réactivant la mitigation qui le neutralise, pour que l'étape offensive et la défense qui l'arrête soient côte à côte. C'est ainsi que les défenseurs apprennent contre quoi ils se protègent.

Guides de ce domaine

  1. Tutoriel de labo : écraser une adresse de retour sauvegardée avec pwntools pour rediriger l'exécution, puis voir chaque mitigation casser l'exploit.

  2. Avec NX, le shellcode injecté est mort : on réutilise le code existant. Trouver des gadgets, bâtir une chaîne execve avec pwntools, puis voir CET et CFI la casser.

  3. NX est actif et le binaire est minuscule, mais la libc est mappée et pleine de code utile. Fuitez sa base malgré l'ASLR, puis retournez dans system("/bin/sh").

  4. Un printf(entrée_utilisateur) est une primitive de lecture/écriture complète. Fuitez avec %p, écrasez avec %n via pwntools, puis regardez -Wformat=2 et FORTIFY_SOURCE le neutraliser.

  5. La liaison paresseuse laisse la GOT inscriptible : une écriture arbitraire sur une entrée transforme puts() en system() — jusqu'à ce que Full RELRO la fige.

  6. Les métadonnées du tas sont la primitive d'écriture. Un use-after-free empoisonne le tcache de la glibc pour allouer un chunk à une adresse choisie.

  7. Les exploits modernes sont fuiter-puis-agir. Construisez une lecture hors limites, puis servez-vous-en pour retrouver un canari de pile, la base PIE et la base libc.

  8. Quand les gadgets sont rares, forgez un cadre de signal. Un appel sigreturn restaure tous les registres depuis la pile d'un coup — construisez-en un avec pwntools pour appeler execve.

  9. Pas de gadget pop rdx ? Le code de démarrage du runtime C a une séquence universelle qui charge plusieurs registres et fait un appel contrôlé. Construisez-la avec pwntools.

  10. Quand le débordement dépasse à peine l'adresse de retour, déplacez rsp vers un tampon maîtrisé et exécutez-y la vraie chaîne. Tutoriel pwntools.

  11. Les hooks partis, l'objet FILE devient la cible : un appel stdio passe par un pointeur de vtable inscriptible — corrompez-le et le prochain fwrite tombe.

  12. Sans fuite libc : forgez la relocation que lit l'éditeur de liens dynamique pour lui faire résoudre et appeler system. Et pourquoi Full RELRO y met fin.

  13. Parfois vous ne contrôlez qu'un pointeur. Un one-gadget est une seule adresse libc qui appelle execve("/bin/sh") si ses contraintes tiennent.

  14. Une politique seccomp qui bannit execve retire le shell du jeu ; les attaquants pivotent : ouvrir le flag, le lire, le renvoyer. La chaîne ORW.

Autres domaines