简介

  之前在复现自己做出来的题时,一样的思路发现拿不了 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 可以加以利用。

双 leave 栈迁移的坑的更多相关文章

  1. ciscn_2019_s_4***(栈迁移)

    这是十分经典的栈迁移题目 拿到题目例行检查 32位程序开启了nx保护 进入ida,发现了很明显的system 我们进入main函数查看vul 可以看到溢出的部分不够我们rop所以这道题通过栈迁移去做 ...

  2. .NET Core 迁移躺坑记

    最近将自己负责的一个核心接口系统从.Net Framework迁移到了.Net Core. 整体过程,从业务层面说一般般吧(整体还好但还是搞的业务有感,没出严重故障)但是技术层面上感觉其实并没有达到要 ...

  3. ASP.NET Core 3.0 迁移避坑指南

    一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...

  4. 神舟+win10+ubuntu16.04+256GSSD+1THHD双系统安装加openssl踩坑之旅

    上海最近搞活动调休,要搞深度学习,win上还是不方便,准备弄个ubuntu.于是有以下回忆文字. 在机器上装了个双系统.花了两天.再也不想玩了. 准备用ubuntu来做深度学习的. 本文写于2019年 ...

  5. .NET Core 迁移躺坑记续集--Win下莫名其妙的超时

    继上一集里说到遇到的各种问题并且弄了n个解决方案之后,特别是对于问题4的解决方案对于切换了HttpClientFactory 我用了你家netcore 2.1下专门解决之前HttpClient口病已久 ...

  6. .Net Core 迁移之坑二 《ToString("F") 输出与windows不一致问题》

    大家都知道 ToString("F") 是干什么的 这里我还是介绍一下 格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的 ...

  7. Centos 7.2 双网卡绑定之踩坑

    线上服务器,安装centos7.2 x64最小化安装,需要做链路聚合,双网卡绑定.在centos 6.x 和 centos 7上测试都OK,于是直接开搞. 说明下,以下环境是在虚拟机中实现的: 系统: ...

  8. vue 代码迁移的坑

    由于开发需要,开发过程中总会遇到由于代码调试.svn/git上传等过程中,总会出现代码迁移文件的需求,很多时候,迁移过后总会出现一些大大小小的问题, 首先,需要迁移文件内有没有系统自动隐藏的文件(例如 ...

  9. .NET CORE迁移踩坑

    https://www.cnblogs.com/leolaw/p/10740678.html

随机推荐

  1. Flink系统之Table API 和 SQL

    Flink提供了像表一样处理的API和像执行SQL语句一样把结果集进行执行.这样很方便的让大家进行数据处理了.比如执行一些查询,在无界数据和批处理的任务上,然后将这些按一定的格式进行输出,很方便的让大 ...

  2. 13-Servlet&Request

    今日内容: 1. Servlet 2. Request Servlet 1. 概念 2. 步骤 3. 执行原理 4. 生命周期 5. Servlet3.0注解配置 6. Servlet的体系结构 se ...

  3. bat脚本 定时删除备份的文件

    删除 D:\yswbak 目录下rar类型 6天前的 文件 @echo off forfiles /p D:\yswbak /m *.rar /d - /c "cmd /c del @pat ...

  4. shell脚本 inotify + rsync 同步脚本

    1.这是很简单的一个 文件监控+触发同步脚本 监控一台服务器下的一个文件夹,发生改变则向另一个个文件夹进行同步. 具体的inotify命令  rsync命令  可以看linux分类下的介绍 inoti ...

  5. Iptables netstat 防御简单dos攻击

    DoS攻击或者DDoS攻击是试图让机器或者网络资源不可用的攻击.这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器,DOS攻击的实施通常迫使目标重启计算机或 ...

  6. 计算机网络 From Mr.Liu

    引言 本博客摘自Mr.Liu,原帖请点击这里. 感谢Mr.Liu,这个文章很充分的描述了计算机网络的核心知识点. 我还在学习中,所以没有进行自己的转述.图片因为是copy代码而没有获得,想看更详尽的, ...

  7. 使用Nginx对.NetCore站点进行反向代理

    前言 之前的博客我已经在Linux上部署好了.NetCore站点且通过Supervisor对站点进行了进程守护,同时也安装好了Nginx.Nginx的用处非常大,还是简单说下,它最大的功能就是方便我们 ...

  8. Python爬虫连载10-Requests模块、Proxy代理

    一.Request模块 1.HTTP for Humans,更简洁更友好 2.继承了urllib所有的特征 3.底层使用的是urllib3 4.​开源地址:https://github.com/req ...

  9. 面型对象和UML类图

    面向对象 why? 1.程序执行:顺序,判断,循环,----结构化 2.面向对象----数据结构化 3.面向计算机,结构化的才是最简单的 4.变成应该 简单&抽象 一个基本的类 class P ...

  10. MySQL数据库root密码忘记丢失重置方法

    对于DBA来说,丢失超管用户root的密码是致命的, 可以通过添加--ship-grant-tables参数来跳过权限表. 1.忘记root密码,进不去数据库: 这个时候需要强制停库,先查看MySQL ...