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

 

posted @ 2021-10-15 16:47  binary燃  阅读(229)  评论(0)    收藏  举报