zoukankan      html  css  js  c++  java
  • 栈迁移原理图示

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

    image.png

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

    image.png

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

    image.png

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

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

    image.png

    然后 pop ebp 执行完后就是

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

    image.png

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

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

    image.png

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

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

    image.png

    然后是 pop ebp 执行完成后:

    image.png

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

    image.png

  • 相关阅读:
    CGI与FastCGI
    Google Protocol Buffer 的使用和原理
    AMQP协议
    Java 多线程 并发编程
    深入理解HashMap
    Bitmap 位图
    Bloom Filter概念和原理
    BloomFilter–大规模数据处理利器
    java bitmap/bitvector的分析和应用
    Linux iptables 备忘
  • 原文地址:https://www.cnblogs.com/yichen115/p/12450517.html
Copyright © 2011-2022 走看看