常回家看看之off_by_one

news/2024/11/15 13:54:34/文章来源:https://www.cnblogs.com/CH13hh/p/18202784

❗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: 代码还是有点多的

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/709439.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM实战:当网页爬虫集成gpt3.5

本文主要是通过Scrapegraph-ai集成gpt3.5实现一个简单的网页爬取并解析的demo应用,其中涉及到gpt3.5免费申请,Scrapegraph-ai底层原理简介,demo应用源码等。1. 背景 最近本qiang~关注了一个开源项目Scrapegraph-ai,是关于网页爬虫结合LLM的项目,所以想一探究竟,毕竟当下及…

使用RAG-GPT集成智谱AI、DeepSeek快速搭建OpenAI Cookbook智能客服

本文介绍了如何通过RAG-GPT集成智谱AI和DeepSeek,快速搭建OpenAI Cookbook智能客服系统。包括下载源代码、配置环境变量、启动服务、体验聊天效果、将聊天机器人嵌入网站等步骤。RAG-GPT具备开源免费、易于部署、功能丰富的特点,为LLM在特定领域的应用提供企业级解决方案。使…

openpyxl Worksheet

worksheet 说明 Worksheet 代表一个 Excel 工作表。 worksheet 初始化 from openpyxl import Workbook# 创建一个新的Excel工作簿 wb = Workbook()# 获取第一个工作表 worksheet = wb.active# 保存工作簿到指定的文件名 wb.save("execl_test.xlsx")# 关闭工作簿 wb.c…

C#使用开源操作库MiniExcel操作Excel

简介 MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。特点 低内存耗用,避免…

Django性能优化:提升加载速度

title: Django性能优化:提升加载速度 date: 2024/5/20 20:16:28 updated: 2024/5/20 20:16:28 categories:后端开发tags:缓存策略 HTTP请求 DNS查询 CDN分发 前端优化 服务器响应 浏览器缓存第一章:Django性能优化概述 1.1 性能优化的意义 性能优化是Web开发中的关键环节,它…

crypto--rsa基础(1)

在ctf---crypto中rsa应该是最常见也是现在最容易考到的密码题型吧,这篇博客就简单的介绍一下rsa和rsa的一些基本的攻击手法. 对于我们这些萌新来说要做rsa的话也必须先掌握四大基本公式就是欧拉函数,费马小定理,中国剩余定理,威尔逊定理,现在就先基本了解一下就能够做题了…

Python/Go 面试题目整理

目录一、Python 基础知识1.1 可变与不可变数据类型1.8 深浅拷贝1.2 PEP8 编程规范1.3 匿名函数1.4 装饰器1.5 迭代器1.6 生成器1.7 面向对象编程思想1.7.1 Python 中的__new__和__init__的区别1.7.2 反射1.7.3 面向对象1.7.4 鸭子类型1.7.5 你对Python的继承怎么看?1.9 GC 机制…

TypeScript入门介绍

目录TypeScript入门介绍什么是 TypeScript?发展历史优缺点应用场景开发工具环境依赖编程IDEvs调试构建工具/工程化步骤汇总第一个项目 TypeScript入门介绍 什么是 TypeScript?1.1 TypeScript 是由微软开发的一种开源的编程语言。它是 JavaScript 的一个超集,通过为 JavaScri…

Shell编程之免交互

目录1.Here Document免交互2.Here Document常规用法(1)免交互执行命令(2)免交互创建并编辑文件内容(3)tee3.Expect免交互4.编写expect免交互脚本步骤5.read 1.Here Document免交互 使用I/O重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 命令 <<标记…

jupyter notebook无法找到自己的虚拟环境

1:打开cmd/Anaconda Prompt/Anaconda Powershell Prompt2:进入虚拟环境conda activate 环境名 3:conda list查看有无ipykernel包 如果没有,安装两个包:conda install nb_conda conda install ipykernel 如果下载不了将指令换成conda install nb_conda_kernels 注:conda/…

URLSearchParams:url查询处理工具

let params=new URLSearchParams(a=1&b=2&c=3#hash) 方法和属性: .get( ).has( )  //返回true/false .append(name,value)  //向URL中添加新的参数.set(name,value)  //设置指定参数的值,如果参数不存在则添加新参数 .delete(name)  //删除指定名称的参数 .k…

信息安全事件应急包好DVWA(finish)

​ *DVWA* *信息安全事件应急处理报告**皮包**公司* *20**24**年**5**月**20**日* ** ** 目 录 一、 概述 1.1 应急处理服务背景 1.2 应急处理服务目的 1.3 应急处理服务范围 1.4 应急处理服务依据 1.4.1 应急处理服务委托协议 1.4.2 基础标准与法律文件 1.4.3 参考文件…