ret2libc: riusare la libreria contro NX
NX impedisce di eseguire byte sullo stack. ret2libc aggira il problema: perché iniettare codice quando system è già mappato in libc?
Costruire la chiamata
Sovrascrivi il return address con l'indirizzo di system e prepara l'argomento. Su x86-64 l'argomento va in rdi, quindi serve un gadget pop rdi; ret che punti a "/bin/sh" (stringa presente in libc):
[ pop rdi; ret ]
[ addr "/bin/sh" ]
[ addr system ]Su x86 (32 bit) è ancora più semplice: gli argomenti sono sullo stack, quindi [system][ret][arg].
Difesa
ASLR randomizza la base di libc: serve un leak per calcolarla. Full RELRO, PIE, e stack canary alzano il muro. ret2libc resta il caso base da cui si passa alla ROP completa quando serve più di una chiamata.