Stack Pivot — Déplacement de la pile

Stack ROP

Quand l'utiliser

Lorsque l'espace de débordement est trop petit pour une chaîne ROP complète, le stack pivot redirige RSP vers une zone contrôlée (souvent le tas ou un buffer connu) où réside la vraie chaîne ROP.

Gadgets de pivot

# Faire pointer RSP vers une zone contrôlée
xchg rsp, rax ; ret
pop rsp ; ret
leave ; ret        # mov rsp,rbp ; pop rbp (pivot via RBP)
add rsp, 0xNN ; ret

Technique leave;ret

# Contrôler RBP (saved RBP) + un 'leave;ret'
# 1er leave;ret : RSP <- RBP_contrôlé
# 2e ret       : exécute la chaîne ROP à la nouvelle pile
payload = b'A'*off + p64(fake_stack_addr - 8) + p64(leave_ret)