堆 未完成
# 不同 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
基本工作原理
# unlink
# unsortbin attack
用途:在任意地址填充大整数,好像是 mainarena 的地址。
缺点:会导致 unsortbin 损坏,导致不能再分配块。