ciscn_2019_es_2的wp

32位,看看函数主体
在这里插入图片描述
read函数0x30只能刚好覆盖ebp和ret。所以我们要用到栈迁移
栈迁移核心思想就是利用leave和ret转移ebp和esp。leave和ret常用于复原栈

leave=mov esp,ebp

pop ebp

ret=pop eip

首先我们泄露ebp的地址

在这里插入图片描述
查看栈区
在这里插入图片描述
偏移地址 0x118-0xe=0x38
esp指向了我们写入的system,接下来的ret就会使eip指向system函数。

ebp-0x38指向aaaa的地址。aaaa实际就是leave_ret后的ebp指向地址的内容,

可以起到定位的作用。因为接下来我们输入的leave_ret会使esp等于ebp后面的地址,

而此时ebp后面的地址是system。之后就能getshell了

顺便一提,接收printf返回的ebp前要先recv前面read输入的内容
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wuyvle/article/details/113823624