0%

unsortbin attack


作用:

Unsorted Bin Attack从字面上就可以看出,正合适一种针对Unsorted Bin机制的攻击手法。这种攻击手法实现的前提是能够控制挂进unsorted bin中的chunk的bk指针,在控制bk指针的情况下可以实现修改任意地址值为一个较大的数值。没错就是较大的数,这个数是不可控的,所以我是真的没有想明白这个攻击手法除了CTF之外还有什么实际的用处😂

Unsorted bin中chunk的主要来源

1.当一个较大的chunk被分割成两部分后,如果剩下的部分大于MINSIZE,则会被放进Unsorted bin中

2.释放一个不属于fast bin的chunk,并且该chunk不与top chunk相邻,该 chunk会被首先放到Unsorted bin中

3.当进行malloc_consolidate(块合并)时,如果合并后的chunk不与top chunk相邻,则可能会把合并后的chunk放到Unsorted bin中

基本使用情况

Unsorted Bin在使用过程中,采用的遍历顺序是FIFO(先进先出),即挂进链表的时候依次从Unsorted bin的头部向尾部挂,取的时候是从尾部向头部取

在程序malloc时,如果fast bin、small bin中找不到对应大小的chunk,就会尝试从Unsorted bin中寻找chunk。如果取出来的chunk的size刚好满足,则直接交给用户,否则就会把这些chunk分别插入到对应的bin中

img

申请两个堆块,第一个小一点方便溢出,第二个一定要在unsortbin,释放第二个堆块,利用uaf或者堆溢出漏洞,将第二个堆块的bk指针改为要改数据的地址-0x10,这样在第二个堆块后面就伪造了一个被free的堆块(这个堆块fd指针的地址刚好就是要改数据的地址),当第二个堆块被申请走,fd指针指向main_arena-88,也就被改为了一个很大的值(其实就是main_arena-88)

// 在最后添加