how2heap-2.23-11-poison_null_byte

news2024/11/15 14:01:55

什么是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 free
    free(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.coloradmin.cn/o/1365178.html

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

相关文章

【Hadoop】说下HDFS读文件和写文件的底层原理?

文件读取文件的写入 文件读取 客户端调用 FileSystem 对象的 open&#xff08;&#xff09;函数&#xff0c;打开想要读取的文件。其中FileSystem 是 DistributeFileSystem 的一个实例&#xff1b;DistributedFileSystem 通过使用 RPC&#xff08;远程过程调用&#xff09; 访N…

Large Language Models Paper 分享

论文1&#xff1a; ChatGPTs One-year Anniversary: Are Open-Source Large Language Models Catching up? 简介 2022年11月&#xff0c;OpenAI发布了ChatGPT&#xff0c;这一事件在AI社区甚至全世界引起了轰动。首次&#xff0c;一个基于应用的AI聊天机器人能够提供有帮助、…

vue3组件传参

1、props: 2、自定义事件子传父 3、mitt任意组件通讯 4、v-model通讯(v-model绑定在组件上) (1)V2中父子组件的v-model通信&#xff0c;限制了popos接收的属性名必须为value和emit触发的事件名必须为input,所以有时会有冲突; 父组件: 子组件: (2)V3中:限制了popos接收的属性名…

读元宇宙改变一切笔记02_元素(上)

1. 很多组织和机构都想在元宇宙的定义上掌握话语权&#xff0c;使得它的定义中存在矛盾之处&#xff0c;也有大量含义混淆之处 1.1. 微软 1.1.1. 在谈论“多个元宇宙” 1.1.2. 微软首席执行官萨提亚纳德拉将元宇宙描述为一种可以将“整个…

Dockerfile的ENV

文章目录 环境总结测试测试1测试2测试3测试4测试5测试6 参考 环境 RHEL 9.3Docker Community 24.0.7 总结 如果懒得看测试的详细信息&#xff0c;可以直接看结果&#xff1a; 一条 ENV 指令可以定义多个环境变量。Dockerfile里可以包含多条 ENV 指令。环境变量的值不需要用…

(低级错误)IDEA/Goland报错连接数据库失败:URL错误和权限问题。

前言 做毕设ing&#xff0c;使用Goland自带的数据库工具连接服务器的数据库。报错 错误: Malformed database URL, failed to parse the main URL sections. (view)服务器是华为云&#xff0c;使用宝塔面板。数据库版本5.6.50。 排查过程 鉴于Goland报错报的狗屁不是&#…

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

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

YOLOv5改进 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv5的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的损失函数超过了二十余种,每种都针对特定的…

万界星空科技商业开源MES主要功能介绍

一、系统概述&#xff1a; MES制造执行系统&#xff0c;其定位于制造执行系统的Java开源版本。系统包括系统管理&#xff0c;车间基础数据建模&#xff0c;计划管理&#xff0c;物料控制&#xff0c;生产执行&#xff0c;质量管理&#xff0c;库存管理&#xff0c;看板管理&am…

System学习笔记 - MacOs编译环境配置(一)

前言 好几年没有记录过东西&#xff0c;一是确实很忙&#xff0c;二是人也变懒了。新年开个新的学习计划&#xff0c;希望能坚持下去。 SystemC 简介 SystemC是一个建模语言&#xff0c;其本质是一个C的库&#xff0c;一般用于SoC建模&#xff0c;具体介绍不赘述&#xff0…

GPDB - 高可用 - 流复制状态

GPDB - 高可用 - 流复制状态 GPDB的高可用基于流复制&#xff0c;通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL 1、WalSndState typedef enum WalSndState {WALSNDSTATE…

为什么 Kafka 这么快?它是如何工作的?

随着数据以指数级的速度流入企业&#xff0c;强大且高性能的消息传递系统至关重要。Apache Kafka 因其速度和可扩展性而成为热门选择&#xff0c;但究竟是什么让它如此之快&#xff1f; 在本期中&#xff0c;我们将探讨&#xff1a; Kafka 的架构及其核心组件&#xff0c;如生…

如何编写高效的正则表达式?

正则表达式&#xff08;Regular Expression&#xff0c;简称regex&#xff09;是一种强大的文本处理技术&#xff0c;广泛应用于各种编程语言和工具中。本文将从多个方面介绍正则表达式的原理、应用和实践&#xff0c;帮助你掌握这一关键技术。 正则可视化 | 一个覆盖广泛主题…

嵌入式(六)模数转换ADC | ADC 工作模式 寄存器 轮询和中断方式

文章目录 1 CC2530的ADC模块2 ADC工作模式3 ADC相关寄存器3.1数据寄存器3.2 控制寄存器 4 ADC初始化配置5 ADC使用方式5.1 轮询方式5.2 中断方式 模拟/数字转换 (Analog to Digital Converter&#xff0c;简称ADC) 是将输入的模拟信号转换为数字信号。 各种被测控的物理量&…

基于SSM的企业员工管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

PIG框架学习2——资源服务器的配置详解

一、前言 1、pig资源服务器的配置 Spring Security oauth2相关的依赖是在pigx-common-security模块中引入的&#xff0c;其他模块需要进行token鉴权的&#xff0c;需要在微服务中引入pigx-common-security模块的依赖&#xff0c;从而间接引入相关的Spring security oauth2依赖…

YOLOv5改进 | 损失函数篇 | MPDIoU、InnerMPDIoU助力细节涨点

一、本文介绍 本文为读者详细介绍了YOLOv5模型的最新改进,带来的改进机制是最新的损失函数MPDIoU和融合了最新的Inner思想的InnerMPDIoU。提升检测精度和处理细节方面的作用。通过深入探讨MPDIoU和InnerMPDIoU(全网首发)的工作原理和实际代码实现,本文旨在指导读者如何将这些…

[文件I/O操作] 文件的介绍

目录 1.认识文件 2.树型组织结构和目录 3.文件路径 4.文件类型 5.用Java代码操作文件 5.1 File概述 5.2代码实例 5.2.1观察get系列代码的差异 ​编辑 5.3.2普通文件的创建、删除 ​编辑 5.3.3普通文件的删除 ​编辑 5.3.4观察目录的创建 ​编辑 5.3.5 观察文件重…

【SpringBoot】事务管理

1. 事务管理的概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三步&#xff1a; 开启事务&…

逆置算法和数组循环移动算法

元素逆置 概述&#xff1a;其实就是将 第一个元素和最后一个元素交换&#xff0c;第二个元素和倒数第二个元素交换&#xff0c;依次到中间位置。用途&#xff1a;可用于数组的移动&#xff0c;字符串反转&#xff0c;链表反转操作&#xff0c;栈和队列反转等操作。 逆置图解 …