原理如未特殊说明, 均假定 libc 2.23, 64 位. 当 malloc 从 unsortbin 中取 chunk 时, 会有一个双向链表解链的过程 (为方便, 代码只截取数据结构部分): 1 2 3 4 5 victim = unsorted_chunks (av)->bk; bck = victim->bk; /*
原理堆题的最后一步攻击手段, 有一个就是覆盖各种 hook, 其中就包括 __malloc_hook. 如果我们无法控制程序恰好写入到此处, 但是可以修改 chunk 的 fd 或者 bk, 达到 尝试任意地址分配
原理如未特殊说明, 均假定 libc 2.23, 64 位. UnsortbinUnsortbin 就是 malloc state 中的 bins[1], 相关定义如下: 1 2 3 4 5 6 7 8 9 10 11 struct malloc_state { /* Normal bins packed as described above */ mchunkptr bins[NBINS * 2 - 2]; }; /* The otherwise unindexable 1-bin is used to hold
原理如未特殊说明, 均假定 libc 2.27, 64 位. TcacheTcache 是 glibc 2.26 加入的东西, 从 cache 这个名字也可以看出来, Tcache 机制是为了更加高效地分配堆. 高效性和安全性是两个负相关的指
原理如未特殊说明, 均假定 libc 2.23, 64 位. FastbinFastbin 是 Ptmalloc2 的一种堆管理机制. 设计的目的在于分配内存时, 快速利用已有的合适 chunk. 大小小于 0x80 的 chunk free 后会被放在对应的 fastbin 中
UAF 和 off-by-one 一样, 不太像是堆管理器的漏洞, 所以算是比较好学的?