zoukankan      html  css  js  c++  java
  • 双 leave 栈迁移的坑

    简介

      之前在复现自己做出来的题时,一样的思路发现拿不了 shell 了,后来发现是栈迁移的坑。

    问题

      假设 32 位系统中,漏洞函数可以任意写入 0x00000000。
      现在我们已经用双 leave 迁移栈,然后运用 rop 技术泄露 got 表地址,如下:

    0x00000000    0x0
    0x00000004    puts_plt   <=== esp
    0x00000008    return_addr 
    0x0000000c    puts_got
    

      当我们泄露完地址,从返回地址返回漏洞函数后

    0x00000000    0x0
    0x00000004    puts_plt   
    0x00000008    return_addr 
    0x0000000c    puts_got   <=== esp
    

      可以看到,漏洞函数就会把 puts_got 上部分作为它的栈,然后我们需要双 leave 迁移和写入其他的 rop ,就会出现如下情况

                                 双 lieave              ROP          
    0x00000000    0x0            0xaaaaaaaaa            0x0     
    0x00000004    puts_plt       迁移的目标地址          read_plt  
    0x00000008    return_addr    leave_gadget地址       return_system
    0x0000000c    puts_got       puts_got               read 第一个参数
    

      可以看到,双 leave 会与 rop 重叠,这样就会导致我们利用失败。

    解决办法

    • 再次把栈迁移到其他位置。
    • 有些程序的主函数有类似 and esp, 0FFFFFFF0h 可以加以利用。
  • 相关阅读:
    刷题(十五)
    Pycharm按装
    Jmeter
    内存泄露部分检测工具
    Failed to resolve
    图片显示方向不对怎么办
    ScaleType属性
    RobotFramework
    LoadRunner
    Appium
  • 原文地址:https://www.cnblogs.com/luoleqi/p/12373086.html
Copyright © 2011-2022 走看看