Large bin attack
Large Bin
首先需要了解Large bin 的结构
large bin中一共包括63个bin,每个bin中的chunk大小不一致,而是出于一定区间范围内。此外这63个bin被分成了6组,每组bin中的chunk之间的公差一致,并且每组bin中的chunk按照大小顺序进行排序
Large bin 中chunk 的数据结构
在关于heap的操作中,如果我们要free掉的chunk的大小大于fast bin 的最大大小(fastbin中支持的fastchunk的默认最大值为128字节)的话,该chunk就会会进入unsorted bin中(高版本会进入到tcache中,所以一般对于高版本的情况下,会先填满tcache(libc2.27),0x420以下堆块会进入tcache)。如果再次申请一个chunk,就会使一部分unsorted bin中的chunk切割,另一部分进入到各自应进入的bins中(根据大小进入,大的进入largebin,小的进入small bin)
被释放进Large Bin中的chunk,除了以前经常见到的prev_size、size、fd、bk之外,还具有fd_nextsize和bk_nextsize:
fd_nextsize,bk_nextsize:只有chunk可先的时候才使用,不过用于较大的chunk(large chunk)
fd_nextsize指向前一个与当前chunk大小不同的第一个空闲块,不包含bin的头指针
bk_nextsize指向后一个与当前chunk大小不同的第一个空闲块,不包含bin的头指针
一般空闲的large chunk在fd的遍历顺序中,按照由大到小的顺序排列。这样可以避免在寻找合适chunk时挨个遍历
首先fd_nextsize指向比他小的最大heap,而bk_nextsize指向比他大的最小的heap,最后将两条链条首尾相连。而fd和bk和其原来的任务一样,都是指向和其大小相同的堆块。

How 2 heap 中:
在how 2 heap中有对Large Bin attack的介绍
其主要是通过在largebin 插入的过程中伪造largebin的bk_nextsize以及bk,实现任意地址写堆地址。
但其中有很多的关于ptmalloc2源码的细节,比如一些插入函数,一些检查函数,一些合并函数。在How 2 heap中都有很细节的操作。
网上也有很多很详细的详解,我就不多赘述了。
贴上一位笔记写得很好的师傅
https://blog.csdn.net/qq_41202237/article/details/112825556

浙公网安备 33010602011771号