首页
社区
课程
招聘
[原创]栈迁移原理(图示)
2020-3-9 19:29 14416

[原创]栈迁移原理(图示)

2020-3-9 19:29
14416

主要用的就是利用 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 段的那个函数



阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞3
打赏
分享
最新回复 (4)
雪    币: 310
活跃值: (1917)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
niuzuoquan 2020-3-9 21:43
2
0
mark
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xghoecki 2020-3-13 18:08
3
1
感谢分享
雪    币: 248
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
言承 2020-3-13 22:30
4
0
图示很好理解,非常感谢
游客
登录 | 注册 方可回帖
返回