Heap(二)

本文详细介绍了内存管理中的几种常见漏洞,如HeapBuffer溢出、UseAfterFree(UAF)、Hooks的利用、Doublefree、FastbinDup/TcacheDup以及Unsortedbin的工作原理。这些漏洞涉及程序对内存空间的不当操作,可能导致代码执行控制权丢失和安全风险。
摘要由CSDN通过智能技术生成

Heap Buffer overflow

分配好的变量区域存在越界写入漏洞,使下一块chunk内容被改掉。

UAF (use after free)

chunk被free后,指向该chunk的point是dangling point。后续这个被free的chunk再被程序使用就是UAF。

Hooks

在malloc、free进入到主要的分配算法前,如果有hook function,则会先执行hook function,向 hook function写入我们要执行的内容,就可以控制程序执行流程。写入one gadget就可以得到shell。

Double free

程序以chunk 1的point为参数执行free时,chunk 1进入fastbin,之后再以chunk 2的point执行free,chunk 2进入fastbin,之后再free一次chunk 1,chunk 1再次进入fastbin。
fastbin—>chunk 1---->chunk 2---->chunk 1…,这就构成double free。

Fastbin Dup

在double free的基础上,向chunk中的fd写入任意位置可以是return add或hook function这种可以控制程序执行流程的位置,在之后的malloc会遇到这个特殊fd的chunk,类似于任意写入。libc2.26后fast chunk会先进入tcache。
libc 2.23含有几道安全检查:
1、_int_free会检查临近的下一块的chunk size是否合理,至少要大于0x10。
2、_int_free中含有double free的检查机制,程序要求目前free掉的chunk和fastbin中的第一个chunk是否相同,如果相同,则检测到double free。绕过方式就是在第二次free掉这个chunk之前,先free掉其他的chunk。
3、_int_malloc中也含有一道检查机制,在malloc取出chunk时,会检查拿出的chunk size和fastbin的size是否一致。
libc不同版本中检查机制也大同小异,具体可以看看source code。

Tcache Dup

libc2.26后的fast chunk 会先进入到tcache,tcache dup类似fastbin dup,同样是在double free 的基础上,向chunk中的fd写入任意位置可以是return add或hook function这种可以控制程序执行流程的位置,在之后的malloc会遇到这个特殊fd的chunk,作用也类似于任意写入。
libc 2.27未包含要free掉的chunk是否与链上的第一个chunk一样,所以可以直接进行二次free chunk。利用方式更简单。libc不同版本中检查机制也大差不差,具体可以看看source code。

Unsorted bin

unsorted bin是一个双向链表,存放着被free掉的但没有被fastbin和tcache回收的chunk,被free的chunk如果没有进到fastbin或tcahce,会检查物理位置临近的上一块chunk是不是free掉的,如果是则合并到一起,如果不是,检查物理位置临近的下一块chunk是不是top chunk,如果是则合并到一起,如果不是,再检查是不是free掉的呢,是的话,就合并这个临近的chunk,然后加入到unsorted bin里面。
结构大致如下:
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值