常回家看看之off_by_one
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的更多相关文章
- 《Android插件化开发指南》面世
本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...
- C 基础框架开发
引言 有的人真的是天命所归 延安时期炸弹 投到他院子都 没炸. 有些事无法改变 是命! 我们也快'老'了, 常回家看看. 前言 扯淡结束了,今天分享的可能有点多,都很简单,但是糅合在一起就是有点复杂. ...
- 利用Swoole实现PHP+websocket直播,即使通讯
websocket Websocket只是一个网络通信协议,就像 http.ftp等都是网络通信的协议一样:相对于HTTP这种非持久的协议来说,Websocket是一个持久化网络通信的协议: WebS ...
- 高中最后一刻&大学第一课&为人师的责任
文章不是技术文,只是分享一些感想,作为一只程序猿,不说好好敲代码,跑出来思考人生,不是合格的程序猿,罪过罪过,自我反思3秒钟,我们继续,毕竟程序猿的人生不只是Coding,也希望自己这点感想被更多刚入 ...
- N1试卷常考词汇总结
免れる まぬがれる 免去,幸免 軽率 けいそつ 轻率,草率 捩れる ねじれる 拧劲儿,扭歪,弯曲 裂ける さける 裂开,破裂 避ける さける 躲避,避开 つまむ 挟,捏,掐 追及 ついきゅう 追上.追 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- C++常考面试题汇总
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- OCP考点实战演练02-日常维护篇
本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练02-日常维护篇 1.数据库体系结构和AS ...
- c/c++常见面试题
1. C中static有什么作用 (1)隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命 ...
- flhs笔试题-回家上机实践
这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...
随机推荐
- C#开发的绑定类型默认应用例子 - 开源研究系列文章
这次在用C#编写一个看图软件小工具,然后其它的基本完成了,就是绑定看图软件到那些个图片扩展名的时候碰到了问题,就是如何将看图软件绑定图片文件的默认应用,以及解绑默认应用.这个涉及到注册表操作,但是找度 ...
- js推送网页到扩展屏上
需求: 电脑上有两个屏幕,想在主屏上的网页中点击一个按钮,副屏就可以显示需要推送过去的网页 实现方法: 本方法使用的是js来实现的,亲测可行,支持火狐,但是不支持谷歌 demo: 主屏网页:1.htm ...
- 什么是MurmurHash
MurmurHash简介 MurmurHash是一种非加密散列函数,名称来自两个基本操作,乘法(MU)和旋转(R).与加密散列函数不同,它不是专门设计为难以被对手逆转,因此不适用于加密目的.在2018 ...
- 【01】微服务(Microservice)是什么?为什么会出现微服务?
微服务(Microservice)虽然是当下刚兴起的比较流行的新名词,但本质上来说,微服务并非什么新的概念. 实际上,很多 SOA(面向服务的架构)实施成熟度比较好的企业,已经在使用和实施微服务了.只 ...
- react中引入css的方式有哪几种?区别?
一.是什么 组件式开发选择合适的css解决方案尤为重要 通常会遵循以下规则: 可以编写局部css,不会随意污染其他组件内的原生: 可以编写动态的css,可以获取当前组件的一些状态,根据状态的变化生成不 ...
- 前端使用 Konva 实现可视化设计器(6)
请大家动动小手,给我一个免费的 Star 吧~ 这一章处理一下复制.粘贴.删除.画布归位.层次调整,通过右键菜单控制. github源码 gitee源码 示例地址 复制粘贴 复制粘贴(通过快捷键) / ...
- 这10款VS Code神仙插件,嵌入式程序员必备
大家好,我是知微! 嵌入式软件开发工程师平时可能更多的是使用Source Insight.Keil.IAR来阅读代码,写代码. VSCode大家都听说过,功能十分强大,而且免费! 或许是因为这款软件上 ...
- 力扣409(java&python)-最长回文串(简单)
题目: 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 . 在构造过程中,请注意 区分大小写 .比如 "Aa" 不能当做一个回文字符串. 示 ...
- 基于 Serverless 架构的头像漫画风处理小程序
简介: 当一个程序员想要个漫画风的头像时... 前言 我一直都想要有一个漫画版的头像,奈何手太笨,用了很多软件 "捏不出来",所以就在想着,是否可以基于 AI 实现这样一个功能, ...
- 服务网格 ASM 年终总结:最终用户如何使用服务网格?
简介:本文不打算回顾 Istio 或是阿里云服务网格 ASM 的变化或趋势,我们来聊一聊阿里云 ASM 服务网格,它的最终用户是如何使用服务网格的. 作者:叶剑宏 背景 阿里云服务网格 ASM 于 ...