栈迁移主要是为了解决栈溢出可以溢出空间大小不足的问题
栈迁移的实现:
通过将ebp覆盖成我们构造的fake_ebp ,然后利用leave_ret这个gadget将esp劫持到fake_ebp的地址上
leave_ret相当于:
mov %ebp,%esp
pop %ebp
pop %eip
接下来拿HITCON-Training-master 的 lab6做例子
题目链接:https://github.com/scwuaptx/HITCON-Training
题目的防护机制:
开启了NX
题目的hint是:stack migration 栈迁移
然后我们简单运行了下,程序输出了一句话,然后等待我们输入
查看了下ida反编译的代码
程序逻辑很清楚,先判断count的值是否等于1337,不等的话就执行exit()函数
然后count+&