how2heap-2.23-11-poison_null_byte

2024-01-08 07:44
文章标签 null byte 2.23 poison how2heap

本文主要是介绍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

这篇关于how2heap-2.23-11-poison_null_byte的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582752

相关文章

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso

非空约束(Not Null)

修改表添加非空约束 使用DDL语句添加非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL; 示例: 向emp表中的salary添加非空约束。 alter table emp modify salary float(8,2) not NULL; 删除非空约束 使用DDL语句删除非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NULL;

FORM的ENCTYPE=multipart/form-data 时request.getParameter()值为null问题的解决

此情况发生于前台表单传送至后台java servlet处理: 问题:当Form需要FileUpload上传文件同时上传表单其他控件数据时,由于设置了ENCTYPE=”multipart/form-data” 属性,后台request.getParameter()获取的值为null 上传文件的参考代码:http://www.runoob.com/jsp/jsp-file-uploading.ht

Java中Map取值转String Null值处理

Map<String, Object> 直接取值转String String value = (String)map.get("key") 当map.get(“key”)为Null值时会报错。 使用String类的valueOf静态方法可以解决这个问题 String value = String.valueOf(map.get("key"))

NULL 輸出情況

NULL值 輸出情況區分 匯總圖片 select 空 param1 -> param1:null select param1 from 空 —> param1:空 NULL 值出現在查詢結果中 只能由 SELELCT 和 聚合函數 產生 而不是 LIMIT WHERE HAVING FROM 語句 REFERENCE Leetcode 解析

王立平--AES加密图片实现 SkImageDecoder::Factory return null

这个问题是在加密图片,存入sd卡,在解密出来展示,出现的。我个人研究了很久没解决。最后经过高人指点,终于解决了。 在此,拿出来分享,希望各位少走弯路。 我之前的设计思路是:(可以不看哦) 1.把图片从drawable读入成bitmap 2.bitmap-->byte 3.调用AES的byte加密算法。 4.加密成byte,在转化为string 5,把string存入sd卡。

JavaScript学习(二):原始数据类型-字符串、数字、布尔值、null、undefined

数据类型 --- 能够表示并操作值的类型,编程语言的最基本特性就是能够支持多种数据类型。 JavaScript的数据类型分为两种: 原始类型 (primitive type)  对象类型(object type) 原始数据类型包括:  数字   字符串  布尔值   , 特殊的原始值:null  undefined,不是数字、字符串和布尔值,代表了各自特殊类型

CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000错误解决方案

[[UIImage imageNamed:@""] 当后面的字符串为空时,会出现题目中的错误 if (imagstr != nil) {         cell.imageView.image =[UIImage imageNamed:imagstr];     }

mybatis 传入null值解决方法

前端传入两个值,如果其中一个为null时,很多时候我们都很困惑,明明传入的是null,为啥mybatis 的xml文件中的if条件判断无效? public String getPersonInfo(@PathParam("Name") String Name, @PathParam("IDCard") String IDCard) dao层: public List<Map> getPers

Hive metastore 无法解析分区字段 is not null问题排查

文章目录 一、问题描述二、解决方案 一、问题描述 周中发现一个问题,metastore根据条件获取分区时发生异常,导致扫描所有分区,最终导致gc异常。 hive编译时会进行逻辑优化,在执行分区裁剪时,会根据相关的分区过滤条件去metastore查询要扫描的分区目录。metastore会根据hiveserver传过来的条件表达式进行解析,然后过滤不需要的分区。 目前的问题是h