one_gadget e le "house" della heap glibc
Spesso, dopo aver ottenuto una scrittura, non vuoi costruire una ROP completa: vuoi un indirizzo che, saltato con lo stato giusto, esegua execve("/bin/sh").
one_gadget
In libc esistono sequenze che chiamano execve("/bin/sh", ...) se certi registri/memoria sono a valori noti. Lo strumento one_gadget li trova e ne elenca i vincoli:
one_gadget /lib/x86_64-linux-gnu/libc.so.6Sovrascrivendo __free_hook/__malloc_hook (nelle glibc < 2.34) o una funzione in __exit_funcs con un one_gadget, la shell arriva senza catena.
Le house
House of Force, of Spirit, of Orange, of Botcake: famiglie di tecniche che corrompono i metadati della heap (top chunk, freelist, unsorted bin) per ottenere una scrittura dove serve. Cambiano a ogni versione di glibc.
Difesa
Le glibc recenti hanno rimosso gli hook e aggiunto controlli sui metadati. Allocatori hardened, ASLR, e assenza di bug di memoria restano la difesa reale.