这一题主要是利用栈迁移,这对我来说是新知识,所以花了比较长的时间来复现和看其他师傅的wp。
思路:
先写下我被困住的地方的解决方法:read0x30个字节,而s大小只有0x28,留给我们的操作空间不大呀,那我们把前边题目要写入垃圾数据的空间不填入垃圾数据,填入需要的payload,然后在ebp位置上填要返回的位置(就是填垃圾数据的地方),最后在ret位置上填leave_ret的地址(这里要注意,vul函数退出时有一个leave_ret,但是我们又构造了一个leave_ret)
1.首先需要泄露ebp的值,然后根据输入数据的地方与ebp的差值,差值是0x38
这是payload2构造方法,首先要退出read函数,经过第一次leave,将新ebp的值赋为ebp-0x38,然后执行ret,此时esp指向leave_ret地址,然后执行第二次的leave_ret,因为此时ebp为ebp-0x38,将esp的值也赋为它,然后将bbbb弹出到ebp,esp向上移动,执行ret。
我明天试试动态调试,怎么搞一波。。。。。。。