Exploitation ARM64 : le registre de lien et ret2win
Sur AArch64 l'adresse de retour vit dans un registre, pas sur la pile — jusqu'à ce qu'une fonction non-feuille la sauvegarde. Construisez le ret2win ARM.
Sur AArch64 l'adresse de retour vit dans un registre, pas sur la pile — jusqu'à ce qu'une fonction non-feuille la sauvegarde. Construisez le ret2win ARM.
Les gadgets AArch64 finissent par ret, qui branche vers x30 : la chaîne s'enfile dans le registre de lien via des gadgets ldp. Puis PAC et BTI la brisent.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Tutoriel de labo : écraser une adresse de retour sauvegardée avec pwntools pour rediriger l'exécution, puis voir chaque mitigation casser l'exploit.
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").
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.