理论
最近看了i春秋的pwn入门的stack pivot发现这里面的很多细节都不知道,写下博客证明自己学过
在某些时候,我们有时会因为栈开了ASLR,而导致就算可以控制ip寄存器也无法把其调到指定位置,所以stack pivot可以做到与这种技术抗衡,因为这种技术可以把栈迁移到全局变量上,这样我们就可以构造伪造的返回地址,来达到返回的效果
而达到这种效果一般有对栈控制的指令是很少的,但leave这个指令有很多,所以只要我们可以通过leave控制ebp指令,那么两个leave指令后,就可以迁移到我们任意要去的地方了。
这里引用了i春秋第六刊的图片
第一次leave; ret,new esp为栈劫持的目标地址。可以看到执行到retn时,esp还在原来的栈上,ebp已经指向了新的栈顶
经被成功劫持到新的栈上,执行完gadget后栈顶会在new esp-4(64位是-8)的位置上。此时栈完全可控通过预先或者之后在new stack上布置数据可以轻松完成攻击