上次介绍了堆里面的off_by_one,那么这个off_by_null和它有神马区别呢,哎,别看名字挺像,它俩无论是在栈里面还是堆里面都有很大区别的。

off_by_one,这个我们知道可以通过溢出控制到下一个字节,体现在堆里面就是,可以控制到下一个chunk的size位,我们知道根据堆的排布,当申请0x18,0x28,0x38,等这样末尾是8时(32位的是4),那么下一个chunk的prev_size就是我们的输入数据的空间,那么off_by_one就可以修改下一个chunk的size位实现一些堆漏洞的利用,比如堆块重叠(overlap-chunk),unlink等操作,还有一些针对于fastbin相关的操作。

然而off_by_null,是把溢出的下一个字节改成null,那么一般是伪造空闲的堆块实现overlap-chunk,来进行后续的操作的。

下面看一道题目来具体体会一下。

题目连接:攻防世界里面的babyheap

也可以通过网盘下载:题目连接

保护情况

64位ida载入看看

main函数,一些功能函数,有选项

create函数

有申请堆块的限制,大小没有限制,在看看read_input函数,是存在漏洞的

delete函数,正常free堆块,没有uaf漏洞

show函数,通过索引逐个打印堆块内容

分析:就一个off_by_null漏洞可以用,题目没有edit编辑功能,只能不停的add,free。

思路:通过off_by_null,伪造堆块,再次free这个堆块的时候会进行合并,将上面的堆块也视为free,比如申请两个0x100堆块,两个0x68堆块,那么再次申请一个0x100的堆块时候,通过off_by_null将这个堆块的size位变成0x300 ,因为前面0x100的堆块的size位是0x111,0x68的size位是0x71去掉size的标志位加起来刚刚好是0x300,那么在free最后一个0x100的堆块的时候会进行合并,此时第一个堆块久变成大堆块的首地址了,这个时候再次进行申请会从大堆块分割,此时就可以泄露出libc地址,同样申请大堆块,修改0x68小堆块的fd位,进行fastbin attack ,修改__malloc_hook,___realloc_hook进而获取shell。

EXP:

常回家看看之off_by_null(堆篇)的更多相关文章

  1. Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路

    2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] D ...

  2. 常见面试题整理--Python概念篇

    希望此文可以长期更新并作为一篇Python的面试宝典.每一道题目都附有详细解答,以及更加详细的回答链接.此篇是概念篇,下一篇会更新面试题代码篇. (一).这两个参数是什么意思:*args,**kwar ...

  3. 大厂常问iOS面试题--多线程篇

    1.进程与线程 进程: 1.进程是一个具有一定独立功能的程序关于某次数据集合的一次运行活动,它是操作系统分配资源的基本单元. 2.进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,我们可 ...

  4. BZOJ4241 历史研究 莫队 堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JO ...

  5. 浅谈Java中的栈和堆

    人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中? 这里浅谈Java中的栈和堆 首先,将结论写在前面,后面再用例子加以验证. Java的栈中存储以下类型数 ...

  6. C#LeetCode刷题-堆

    堆篇 # 题名 刷题 通过率 难度 23 合并K个排序链表   39.4% 困难 215 数组中的第K个最大元素   51.5% 中等 218 天际线问题   32.9% 困难 239 滑动窗口最大值 ...

  7. 死磕Spring之AOP篇 - 初识JDK、CGLIB两种动态代理

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  8. 死磕Spring之AOP篇 - Spring AOP总览

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  9. 死磕Spring之AOP篇 - Spring AOP自动代理(一)入口

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  10. 死磕Spring之AOP篇 - Spring AOP自动代理(二)筛选合适的通知器

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

随机推荐

  1. Linux中的umask

    在Linux中,当创建一个文件或者目录的时候,系统会自动为这个文件或者目录赋予默认的权限,而umask命令就是用来控制这个默认权限的. 查看umask umask的查看有两种方式,一种不带选项-S,一 ...

  2. python教程6.1-模块和包

    模块分类 1.内置标准模块(⼜称标准库)执⾏help('modules')查看所有python⾃带模块列表 2.第三⽅开源模块,可通过pip install 模块名 联⽹安装 3.⾃定义模块 模块导入 ...

  3. 用 C 语言开发一门编程语言 — 抽象语法树

    目录 文章目录 目录 前文列表 抽象语法树的结构 使用递归来遍历树结构 实现求值计算 抽象语法树与行为树 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器l> <用 C 语 ...

  4. java学习之旅(day.19)

    多线程 线程简介 多任务:同时做多件事 进程(Process):在操作系统中运行的程序就是进程,如QQ,播放器,游戏. 线程(Thread):一个进程可以有多个线程,如视频中同时听声音,看弹幕,看图像 ...

  5. ansible使用详解

    ansible执行,用户主机配置 免密同一个同一个用户执行命令 1 能免密登录的[root@mcw1 ~]$ ansible 10.0.0.132 -m shell -a "hostname ...

  6. C# Bitmap 在winform里编辑了,再次重新编辑,报gdi+错误解决办法

    经过排查,var bitmap=new Bitmap()这个局部对象,没有Dispose所致.虽然是局部的对象,但还是需要Dispose:

  7. Android 12(S) Binder(一)

    今天开始了解一下binder,就先从ServiceManager开始学习. 网上的相关博文普遍是Android 11之前的,阅读时对比Android 11或12的代码发现有很多内容找不到了,比如 fr ...

  8. 安装、学习protobuf

    Protobuf是什么? 类似于json的一种数据格式,独立于语言,而且是二进制方式,所以比json更快,而且还可以直接存储一些图.树 序列化和反序列化 持久化(存到磁盘硬盘)领域中,数据存到磁盘叫序 ...

  9. uniapp 跳转指定的tab导航页面

    考察的知识点:1.uniapp的页面跳转方法:uni.navigateTo2.页面跳转传值的方法:'?名称=值' 的方式3.参数的接收 onload(option){} 第一个页面的写法: toCom ...

  10. 一文了解JVM(中)

    HotSpot 虚拟机对象探秘 对象的创建 Header 解释 使用 new 关键字 调用了构造函数 使用 Class 的 newInstance 方法 调用了构造函数 使用 Constructor ...