堆 未完成

# 不同 bin 区别

Fast Bin Tcache bin Small Bin
最小大小 4*SIZE_SZ (16,32)
每次增长 2*SIZE_SZ
最大大小 默认 64 (max 80) 不含头 63*2*SIZE_SZ
bin 数量 10 62 (2-63)
储存地址

# libc 版本区别

libc 版本 unlink tcache
libc6_2.23 早就已经有前后块地址验证了
所以无法任意地址分配,只能老实 p->p-0x18
libc6_2.27-3ubuntu1_amd64 加入 tcache
dup 实现极其简单,可以直接对同一个 chunk free 两次
libc6_2.27-3ubuntu1.6_amd64 dup 实现受阻
free 时循环扫描当前 bin,寻找是否有相同地址
这种情况下常常填充完 tcache bin 后利用 fastbin 的 double free
libc6_2.29 对合并的块检验 prev_size==chunksize (p),加大了 extend 的难度
libc6_2.35 tcache 的 fd 与 heap 基地址 >>3 异或
同时 fd 后面紧接一串 key
对 tcache 的利用变得尤其困难

# 小知识

calloc 会清空内存,而 malloc 不会

** calloc ** 不会从 tcache bin 中获取 chunk,会从 fastbin 中直接获取。同时会将 fastbin 中剩余的 chunk 添加到 tcache bin 的头部填充满。

calloc(0x20);
//等同于
ptr=malloc(0x20);
memset(ptr,0,0x20);

# 攻击手段

# 基础思路

泄露 libc 地址,泄露 heap 地址,利用堆块漏洞实现任意地址读写。

# use after free

用途:其他绝大多数漏洞利用的基础。

同时也是大部分分配固定大小块去管理块的基础题的利用原理。

# overlapping

用途:其他部分漏洞利用的基础。

# fastbin attack

# double free

用途:在有 fake size 的前提下实现任意地址读写

# tcache

# dup

基本工作原理

# unsortbin attack

用途:在任意地址填充大整数,好像是 mainarena 的地址。

缺点:会导致 unsortbin 损坏,导致不能再分配块。

# smallbin attack

# largebin attack

更新于

请我喝[茶]~( ̄▽ ̄)~*

Walt CSZ 微信支付

微信支付

Walt CSZ 支付宝

支付宝