stack pivoting,正如它所描述的,该技巧就是劫持栈指针指向攻击者所能控制的内存处,然后再在相应的位置进行 ROP。一般来说,我们可能在以下情况需要使用 stack pivoting
此外,利用 stack pivoting 有以下几个要求
pop rsp/esp
当然,还会有一些其它的姿势。比如说 libc_csu_init 中的 gadgets,我们通过偏移就可以得到控制 rsp 指针。
还有更加高级的fake frame
简单来说就是可溢出的长度不够,比如溢出后只能覆盖ebp和ret或者只能覆盖ebp
在讲栈迁移过程前我们需要了解leave ret两条汇编指令
; push eip 进入前会压栈返回地址
Sub PROC
enter 8,0
.
.
.
leave
ret
Sub ENDP
等效
; push eip 进入前会压栈返回地址
Sub PROC
push ebp
mov ebp, esp
sub esp, 8 ; enter
.
.
.
mov esp, ebp
pop ebp ; leave
pop eip ; ret
Sub ENDP