one_gadget — Gadget RCE unique dans la libc
★★★★★
Principe
one_gadget recherche dans la libc des adresses uniques qui exécutent directement execve("/bin/sh", NULL, NULL) — un seul saut suffit pour obtenir un shell, sans construire de chaîne ROP, à condition de respecter certaines contraintes sur les registres.
Usage
one_gadget libc.so.6
# Affiche plusieurs offsets + contraintes, ex :
# 0xe3afe execve("/bin/sh", r15, r12)
# constraints: [r15]==NULL && [r12]==NULL
# Adresse finale = base_libc + offset En pratique
Idéal pour écraser une seule cible (ex: __malloc_hook, GOT, return address) avec un one-gadget. Il faut vérifier que les contraintes sur les registres/pile sont satisfaites au moment du saut — parfois plusieurs gadgets à tester.