双leave栈迁移的坑爹问题

admin 2023年8月2日06:07:55评论13 views字数 650阅读2分10秒阅读模式

简介:   

一个之前复现的题后期再哪来复现学习的时候,发现用一样的思路打缺拿不到shell了,重新搞了一下才发现是栈迁移的坑

问题分析

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

0x00000000    0x00x00000004    puts_plt   <=== esp0x00000008    return_addr 0x0000000c    puts_got

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

0x00000000    0x00x00000004    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_system0x0000000c    puts_got       puts_got               read 第一个参数

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

解决办法

再把栈迁移到其他的位置。

有的程序的主函数有相似的 and esp, 0FFFFFFF0h 我们继续可以加以利用。

原文始发于微信公众号(Kone安全):双leave栈迁移的坑爹问题

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月2日06:07:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   双leave栈迁移的坑爹问题https://cn-sec.com/archives/1928799.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息