how2heap-2.23-11-poison_null_byte

什么是poison_null_byte

当然不止这一种,下面最简单的形式

#include <malloc.h>
int main()
{char * a = malloc(0x200);char * b = malloc(0x200);size_t real_size = malloc_usable_size(a);a[real_size] = 0;return 0;
}

影响:

  • chunk a,会被认为处于释放状态
  • chunk b,自身的size被改小了

想在被poison_null_byte的chunk上方进行布局利用

如下图中,由于存在poison_null_byte漏洞,chunk b的size字段的最低位被置NULL,这导致chunk b自身的size减小,且与chunk b上方紧邻的chunk a有可能会被认为处于释放状态。
在这里插入图片描述

想到的是,由于chunk b上方的chunk a有可能处于被释放的状态;那通过释放chunk b,能使得chunk a和chunk b合并吗(先不管行不行,先想)?
那chunk a和chunk b合并了,意义何在?chunk a和chunk b就算没有漏洞,也是可以正常读写,没有漏洞利用效果?
再想想好像也不是,如果通过释放chunk b,chunk a和chunk b合并,那chunk a会被认为处于释放状态,那chunk a就有了UAF的效果。
为了使得通过释放chunk b,chunk a和chunk b合并,chunk a需要处于一个双向链表(一般是unsorted bin)中。虽然chunk a可写,但只有poison_null_byte漏洞,没有unsorted bin链表相关的地址,通过直接在chunk a的bk,fd处写地址的方式放弃。还可以通过释放chunk a,使得chunk a自身在unsorted bin中,可行是可行,但想要的chunk a UAF的效果消失了。
单单这两个chunk结构达不成仅poison_null_byte漏洞的利用


假如是如下的这种样式了?
在这里插入图片描述
可以通过正常的chunk a写操作,修改chunk b的prev_size为chunk c和chunk a的总长度,使得chunk b和chunk c之间的内容一起合并。前提:chunk c fd,bk必须在双向链表中。同样由于只有poison_null_byte漏洞,需要先将chunk c释放,才能实现。
那这3个chunk通过poison_null_byte漏洞,组成的效果是chunk a的UAF(chunk b,chunk c本身就可以写,虽然有overlap的效果,但是这么叫不合适)

没写代码

继续,如果是这种结构了?
在这里插入图片描述
通过chunk a修改chunk b的prev_size为chunk a + chunk c + chunk d的总长度
通过释放chunk d进入unsorted bin,再释放chunk b,可以unlink合并chunk d和chunk b之间所有的空间
形成的效果:

  • chunk c 和 chunk a的UAF
  • 如果之前chunk c不可写,那现在chunk c 被 overlap了
#include <malloc.h>void produce_poison_null_byte(char * ptr)
{size_t real_size = malloc_usable_size(ptr);ptr[real_size] = 0;
}// 在仅仅 存在 poison_null_byte 的情况下进行测试
int main()
{size_t * a              = malloc(0x100);size_t * b              = malloc(0x100);size_t * before_victim  = malloc(0x200);size_t * victim         = malloc(0x200);size_t * after_victim   = malloc(0x200);malloc(0x8);// 尝试 victim 上方的利用produce_poison_null_byte((char*)before_victim);// free(before_victim); 会触发double freefree(a);before_victim[0x40] = 0x430;victim[0x3f] = 0x27;	// 绕过victim double free的检查after_victim[1] = 0x27;free(victim);malloc(0x100);malloc(0x100);return 0;
}

想在被poison_null_byte的chunk及其下方进行布局利用

how2heap的poison_null_byte利用
漏洞利用的效果:how2heap-2.23-09-chunk_extend_and_overlapping:5、通过 extend 前向 overlapping
漏洞利用的原理:先释放的chunk b,再触发的poison_null_byte,使得chunk c 的prev_size固定,能够实现跨chunk合并

在这里插入图片描述

*(size_t*)(b+0x1f0) = 0x200
是为了绕过

 #define unlink(AV, P, BK, FD) {                                            \if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0))      \malloc_printerr (check_action, "corrupted size vs. prev_size", P, AV);  \
b1 = malloc(0x100); // 为了 unsorted bin 双向链表
b2 = malloc(0x80); // victim
free(b1);			// 为了 unsorted bin 双向链表
free(c);		    // 触发 unlink合并
d = malloc(0x300);	// 漏洞利用效果 overlap

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

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

相关文章

OpenVINS学习6——VioManagerHelper.cpp,VioManagerOptions.h学习与注释

前言 VioManager类里还有VioManagerHelper.cpp,VioManagerOptions.h这两个文件&#xff0c;也包含了一些函数&#xff0c;这次接着看这个 。 整体分析 void VioManager::initialize_with_gt(Eigen::Matrix<double, 17, 1> imustate) 给一个状态&#xff0c;然后初始化…

【C语言】段错误、内存溢出、内存泄漏(区别)、堆溢出、栈溢出

目录 段错误内存溢出内存泄漏栈溢出堆溢出栈溢出和堆溢出区别 段错误 什么时候会发生段错误&#xff1f; 段错误通常发生在访问非法内存地址的时候&#xff0c;即使用了野指针&#xff08;指向一个已删除的对象或者未申请访问受限内存区域的指针&#xff09;或这试图修改字符串…

【Matplotlib】基础设置之图像处理05

图像基础 导入相应的包&#xff1a; import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np %matplotlib inline导入图像 我们首先导入上面的图像&#xff0c;注意 matplotlib 默认只支持 PNG 格式的图像&#xff0c;我们可以使用 mpimg.im…

MySQL深入——9

如何正确的显示随机信息&#xff1f; 我们来模拟在英语单词app当中随机出现三个英语单词的情况&#xff0c;我们首先创建一张表words&#xff0c;然后给这个表当中插入10000条信息进行量化。 select word from words order by rand() limit 3&#xff1b; order by rand&…

基础数据结构第七期 Trie树

前言 Trie树大家能够掌握即可&#xff0c;其实用到的地方并不多&#xff0c;本文将为大家介绍一下。 一、Trie树的基本内容 1、根节点不包含字符&#xff0c;除根结点之外每一个结点都只包含一个字符&#xff1b; 2、字典树用边表示字母表示 3、从根节点到某一结点&#xff…

通过盲对抗性扰动实时击败基于DNN的流量分析系统

文章信息 论文题目&#xff1a;Defeating DNN-Based Traffic Analysis Systems in Real-Time With Blind Adversarial Perturbations 期刊&#xff08;会议&#xff09;&#xff1a;30th USENIX Security Symposium 时间&#xff1a;2021 级别&#xff1a;CCF A 文章链接&…

Spring之代理模式

1、概念 1.1 介绍 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中…

H266/VVC率失真优化与速率控制概述

率失真优化技术 率失真优化&#xff1a; 视频编码的主要目的是在保证一定视频质量的条件下尽量降低视频的编码比特率&#xff0c;或者在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下&#xff0c;为了应对不同的视频内容&#xff0c;往往有多种候选的编码方…

126基于matlab的孪生支持向量机(Twin support vector machine,TWSVM)是SVM的一种变形算法

基于matlab的孪生支持向量机&#xff08;Twin support vector machine,TWSVM&#xff09;是SVM的一种变形算法。该采用WSVM进行二分类&#xff0c;程序已注释数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 126matlabTWSVM模式识别 (xiaohongshu.com)

【Python期末】动态爬取电影Top250数据可视化处理(有GUI界面/无数据库)

诚接计算机专业编程作业(C语言、C、Python、Java、HTML、JavaScript、Vue等)&#xff0c;10/15R左右&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88713693 目录…

模拟实现strlen函数的三种方法

本文介绍&#xff1a;模拟实现strlen函数的三种方法&#xff08;指针相减&#xff0c;计数器&#xff0c;递归&#xff09; 自我介绍&#xff1a;一个脑子不好的大一学生&#xff0c;c语言接触还没到半年&#xff0c;若涉及到效率等问题&#xff0c;各位都可以在评论区提出见解…

解决Typescript报错问题[亲测有效]

目录 1、安装 2、报错 3、分析 4、三种更新途径 如果你tsc -v报错&#xff0c;请看这篇文章&#xff0c;本人亲测有效&#xff01; 1、安装 在前端项目中使用TS&#xff0c;需要进行安装&#xff0c;命令为&#xff1a;npm install -g typescript 查看TS版本&#xff1a; …

网关Gateway

什么是网关? 网关实质上是一个网络通向其他网络的 IP 地址&#xff0c;是当前微服务项目的"统一入口"。 网关能做什么&#xff1f; 反向代理 、鉴权、 流量控制、 熔断、 日志监控等 图片原文&#xff1a;http://t.csdnimg.cn/SvUJh 核心概念 Router&#xff08;…

AArch64 memory management学习(一)

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网参考文档为准。AArch64 memory management学习一共分为两章&#xff0c;这是第一…

GD32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件(附代码)

资料下载: https://download.csdn.net/download/wouderw/88714985 一、概述 关于IAP的原理和Ymodem协议&#xff0c;本文不做任何论述&#xff0c;本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级&#xff0c;以及bootloader和主程序两个工程的配置…

【算法提升】LeetCode每五日一总结【01/01--01/05】

文章目录 LeetCode每五日一总结【01/01--01/05】2023/12/31今日数据结构&#xff1a;二叉树的前/中/后 序遍历<非递归> 2024/01/01今日数据结构&#xff1a;二叉树的 前/中/后 序遍历 三合一代码<非递归>今日数据结构&#xff1a;二叉树的 前/中/后 序遍历 三合一代…

Windows系统任务栏应用图标显示成空白的解决方案

背景 任务栏应用图标为空白&#xff1a; 原因 Windows系统为了加快系统响应速度&#xff0c;在安装完应用第一次显示完应用图标后&#xff0c;会将应用的图标放入缓存中&#xff0c;以后每次显示应用直接在缓存中获取&#xff0c;如果缓存中的图标信息发生错误&#xff0c;…

09-责任链模式-C语言实现

责任链模式&#xff1a;Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.&#xff08;使多个对象都有…

Java学习苦旅(二十三)——二叉搜索树

本篇博客将详细讲解二叉搜索树。 文章目录 二叉搜索树概念操作查找插入删除 性能分析 结尾 二叉搜索树 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根…

java数据结构与算法刷题-----LeetCode64. 最小路径和

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…