off_by_one这个漏洞比较特殊,它不像上一期的堆溢出,可以溢出很多字节,它只能溢出一个字节,在栈里面也可以通过这个漏洞修改返回地址什么的,在堆里面我们主要利用它来修改堆块的大小形成fake_chunk也就可以进行堆的重叠,在64位的时候如果申请0x18,0x28,0x38这样的堆它的size位是0x21,0x31和0x41,那为什么,头部0x10加申请的0x18大小已经是0x28大小了为啥size还是0x21,别忘了,当上一个chunk正在使用的时候下一个chunk的prev_size位也拿来当我们的数据部分。

那么我们就可以利用这个特性来进行off_by_one,那样就可以修改下一个chunk的size位。

我们拿一道题目来具体复现一下这个漏洞。

题目链接:

1.养成好习惯首先看保护

2.不如不看,哈哈,开玩笑的,保护全开,但是不要慌,对于堆题目这很正常,我们用64位ida看一下

3.还是一些功能函数,add添加chunk

4.edit函数

这里主要在输入size的时候进行了一次判断,就是sub_E3A这个函数

如果输入的size减去申请chunk的size等于10的话会返回a1加1,也就是我们在chunk size的基础上可以多输入一个字节,满足off_by_one

5.show函数和delete函数

我们先申请两个chunk,第一个是0x18,0x28,0x38之类的

现在编辑第一个堆进行溢出一个字节修改下一个chunk的size位

修改之前

修改之后

注意此时虽然修改成功了,但是堆结构被我们破坏了,top chunk距离上一个chunk距离不是0x40了,所以我们继续申请一个堆,来恢复堆结构

恢复之后此时堆结构

之后我们把chunk1 free掉

我们再次申请回来,发现原来的0x91不见了

那么我们再次构造unsortbin chunk

我们free2 的时候就会得到unsortbin,但是记得再申请一个堆,不然free的时候会和top chunk合并

在2.23版本里面泄露出的地址-0x58就是main_arena的地方而main_arena-0x10就是__malloc_hook地址

然后这里使用fatsbin attack 申请到_malloc_hook和recalloc_hook附近修改它们的值,(一般都是__malloc_hook-0x23)

因为这里符合size的结构

这里要注意并不是修改__malloc_hook为one_gadget就可以getshell,通常可以使用realloc_hook 调整栈帧使 onegadget 生效

将 malloc_hook 劫持为 realloc ,realloc_hook 劫持为 onegadget ,实际运行顺序:

malloc -> malloc_hook -> realloc -> realloc_hook -> onegadget

这样就能经过 realloc 调整栈帧后再运行 onegadget 。但是实际情况中,并不是直接劫持 malloc_hook 为 realloc ,而是要加上一定的偏移,也就是调整 push 的数量,让栈帧结构满足 onegadget 运行

最后放上exp: 代码还是有点多的

常回家看看之off_by_one的更多相关文章

  1. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  2. C 基础框架开发

    引言 有的人真的是天命所归 延安时期炸弹 投到他院子都 没炸. 有些事无法改变 是命! 我们也快'老'了, 常回家看看. 前言 扯淡结束了,今天分享的可能有点多,都很简单,但是糅合在一起就是有点复杂. ...

  3. 利用Swoole实现PHP+websocket直播,即使通讯

    websocket Websocket只是一个网络通信协议,就像 http.ftp等都是网络通信的协议一样:相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议: WebS ...

  4. 高中最后一刻&大学第一课&为人师的责任

    文章不是技术文,只是分享一些感想,作为一只程序猿,不说好好敲代码,跑出来思考人生,不是合格的程序猿,罪过罪过,自我反思3秒钟,我们继续,毕竟程序猿的人生不只是Coding,也希望自己这点感想被更多刚入 ...

  5. N1试卷常考词汇总结

    免れる まぬがれる 免去,幸免 軽率 けいそつ 轻率,草率 捩れる ねじれる 拧劲儿,扭歪,弯曲 裂ける さける 裂开,破裂 避ける さける 躲避,避开 つまむ 挟,捏,掐 追及 ついきゅう 追上.追 ...

  6. JavaScript 字符串实用常操纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  7. C++常考面试题汇总

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  8. OCP考点实战演练02-日常维护篇

    本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练02-日常维护篇 1.数据库体系结构和AS ...

  9. c/c++常见面试题

    1. C中static有什么作用 (1)隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命 ...

  10. flhs笔试题-回家上机实践

    这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...

随机推荐

  1. 全面的开发者文档和用户目标解析:API 文档指南和开发者旅程

    开发者文档 开发者文档,也称为 API 文档,是一种专门针对软件开发人员的技术写作形式.这种类型的文档通常包括 API 的技术规范.代码注释.软件设计和架构以及软件开发中涉及的其他详细技术描述.开发者 ...

  2. Java处理关键字进行脱敏操作

    1.通过表头获取需要处理的下标列 注:此处导出表格时对关键字进行脱敏处理 /** * . * 对表头进行过滤判断 * * @param headers 表头 * @return 对应的下标列及方法名 ...

  3. Python生成测试数据--Faker的使用方法

    # 官方文档:https://faker.readthedocs.io/en/master/index.html # 安装:pip install Faker from faker import Fa ...

  4. openGauss数据库扩容指导

    前置条件 当前集群状态正常 操作步骤 1.新节点创建用户和用户组,注意需要与当前集群的用户与用户组一致,密码也要保持一致.假设当前集群用户为 omm. 2.检查新节点环境变量,清理和 openGaus ...

  5. k8s 深入篇———— pod 实战[六]

    前言 pod 实战一下,主要是一些例子. 正文 例子一 pod 实例的选择: NodeSelector:是一个供用户将 Pod 与 Node 进行绑定的字段 NodeName:一旦 Pod 的这个字段 ...

  6. nginx重新整理——————分析log数据[六]

    前言 简单介绍一下goaccess. 正文 安装: yum install epel-release yum install GeoIP GeoIP-devel GeoIP-data yum inst ...

  7. vscode 编辑python 如何格式化

    正文 今天同事说我的代码的格式不对,其实就是几个空格忘了空4格了,但是代码可运行. 那么如何帮我们检测呢? pip install yapf 然后打开setting: 输入:ython.formatt ...

  8. 重新整理 .net core 实践篇—————应用层[三十]

    前言 简单介绍一下应用层. 正文 应用层用来做什么的呢? 应用层用来做处理api请求的. [HttpPost] public Task<long> CreateOrder([FromBod ...

  9. Lattice Crosslink开发简介

    选择lattice的Crosslink器件,大多是因为它功耗比较低.价格便宜,开发也比较简单,相对来说更容易上手.大部分用在手机屏,摄像头模组和平板方面. Crosslink的开发工具是Diamond ...

  10. Gowin 1nr-9k mipi测试

    本次实验是利用gowin 1nr-9k的开发板测试MIPI屏. 测试的屏是2.0寸的,接口如下: 接上IO就是RST和MIPI的时钟和数据接口,另外就是电源和地. Gowin的案例中,首先是软件要升级 ...