one_gadget — Gadget RCE unique dans la libc

Outils Exploit

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.