linux 堆块分配

linux 堆块分配

关于fastbin

我们一般熟悉的堆都是双链表的chunk,但是对于大小为(16 Bytes~ 64 Bytes)的堆块来说则是使用fastbin来进行管理的。
fastbin的堆块结构与常规的chunk是完全一样,除了使用的是单链表。
fastbin
![fastbin]

2.2 Bins
注意:Bin的翻译为箱子,chunk的翻译为块

  • Bin:freelist数据结构,用于保存free chunks。

  • 基于chunk size,bins被划分为以下几种类型:

List item

  • Fast bin(单链表,大小相同)

  • Unsorted bin(环形双链表,乱序状态,空闲 chunk 回归所属 bin 之前的缓冲区)

  • Small bin(环形双链表,大小相同)

  • Large bin(环形双链表,按大小降序排列)

2.2.1 Fast bin

  1. 大小为16 ~ 80 / 32 ~160字节的chunk称为fast chunk;

存储fast chunk的bins称为fast bins;

2.2.3 Small bin

  1. 小于512/1024字节的chunk称为small chunk。

存储small chunk的bins称为small bins;

2.2.4 Large bin

  1. 大小大于等于512字节的chunk称为large chunk;

堆管理

Top Chunk

当一个chunk处于一个arena的最顶部(即最高内存地址处)的时候,就称之为top chunk。该chunk并不属于任何bin,而是在系统当前的所有free chunk(无论那种bin)都无法满足用户请求的内存大小的时候,将此chunk当做一个应急消防员,分配给用户使用。如果top chunk的大小比用户请求的大小要大的话,就将该top chunk分作两部分:1)用户请求的chunk;2)剩余的部分成为新的top chunk。否则,就需要扩展heap或分配新的heap了——在main arena中通过sbrk扩展heap,而在thread arena中通过mmap分配新的heap。

Last Remainder Chunk

当用户请求的是一个small chunk,且该请求无法被small bin、unsorted bin满足的时候,就通过binmaps遍历bin查找最合适的chunk,如果该chunk有剩余部分的话,就将该剩余部分变成一个新的chunk加入到unsorted bin中,另外,再将该新的chunk变成新的last remainder chunk。

在这里插入图片描述

堆利用笔记
在这里插入图片描述

House Of Force

· 可覆写top chunk的size字段
· 存在一次malloc,攻击者控制malloc的size,前两项是为了新分配堆时可得到任意地址。
· 存在另一次malloc,攻击者可以向里面写入数据
· top chunk的地址

House of Spirit

当glibc被free时,glibc在想什么。
· glibc如何确定free是一个真正的chunk?
· 如果我们free(0xdeadbeef)呢?
如果我们需要fake chunk成功进入free list,需要哪些条件?
攻击的本质:
· 能够控制free的参数
· 能够满足free中对chunk的各项检查
· 触发free,使得fake chunk进入list
· 再次malloc得到chunk,相当于弱化版的任意地址写

House of Mind

如果我们能控制指针p以及对应的arena。
Advanced Heap Exp
fastbin attack
更改fastbin的后向指针,从而使堆分配到我们想要的地方,形成任意地址写。
检查——in free
· address < -size && address alignment
· size > MINSIZE(0x20) && multiple of 0x10
· next chunk size
o > MINSIZE
· < system_mem
· chunk size 是否和当前链表匹配
o 可以具有较小的偏移,但fastbin_index (chunksize (victim)) != idx, 0)
fastbin_index是通过移位做到的。
of by one
· 这一个字节将影响到下一个chunk的size字段
· off by one to extend allocated chunk
· off by NULL to shrink free chunk
· 堆溢出的利用可能会用到多个技巧
· 某些漏洞可被转化为堆溢出
· 整数溢出或竞态条件

堆喷
0x0c0c0c0c地址的优越性。
地址低
\x0c\x0c -> OR AL, 0C (NOP-like instruction

glibc malloc

main arena中的内存申请

内存回收

分配顺序

在这里插入图片描述
unsorted bin如果满足,可能会被分割。top_chunk分割采用向后移动top指针的方式。
走到unsorted bin ,fast bin 和small_bin会被合并整合到unsorted_bin
在这里插入图片描述
在这里插入图片描述

Unsorted Bin Attack

任意地址修改为一个较大的值,值不可控。利用unsorted bin链表覆盖实现,伪造的unsorted bin的bk位置在从链表中出来的时候会被修改,但此时链表被破坏了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值