前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PWN!栈迁移原理

PWN!栈迁移原理

作者头像
yichen
发布2020-03-19 15:21:47
2.3K0
发布2020-03-19 15:21:47
举报

栈迁移原理

主要用的就是利用 leave;ret; 这样的 gadgets

假设,我们有一个程序,存在栈溢出漏洞,我们把内容覆盖成了下面这样子,当然此时 bss 段或者 data 段还没有内容,待会会通过 read 函数输入:

而实际上在程序调用完成 call 返回的时候,就会有这样的指令

mov esp,ebp

pop ebp

ret

当我们去执行的时候会出现这样的情况

首先是 mov esp,ebp 执行完以后变成了这个样子:

然后 pop ebp 执行完后就是

别忘了,pop 指令是把栈顶的值弹到 指定的寄存器,也就是说 esp 会自动的减一个单位

这时候就到 ret 了,此时我们可以通过 read 函数来把内容输入到 fake ebp1 的地址处

构造的内容主要是把 fake ebp1 处写成 fake ebp2 的地址

read 函数执行完成以后程序返回到了 leave_ret,这样就会在执行一遍上面说的那样

首先是 mov esp,ebp 执行完成后效果如下:

然后是 pop ebp 执行完成后:

此时在执行 ret 命令,他就会执行我们构造在 bss 段后者 data 段的那个函数

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 栈迁移原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档