PWN!栈迁移原理



栈迁移原理


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


本文分享自微信公众号 - 陈冠男的游戏人生(CGN-115)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。微信