重点:fast、unsort bin拿出来的chunk它的fd和bk会被保存 ->例题(ByteCTF/mulnote、攻防世界noleak)
堆溢出
前提:可写入堆的大小超过本身chunk size
作用:将数据溢出到下一个chunk进行数据覆盖改
利用思路:通过chunk0溢出数据到chunk1达到unlink的效果实现任意写
unlink
前提:有堆溢出漏洞、可写入next chunk的头部和fd和bk值、已知位置存在一个指针指向伪造fake chunk的chunk(无pie)
作用:修改ptr的指针、任意地址写
检查: if (__builtin_expect (FD->bk != P || BK->fd != P, 0))
//利用思路:设置有uaf的chunk处的地址为ptr,修改fd为ptr-0x18,bk为ptr-0x10完成检查则会进行unlink那么chunk的指针会被修改为ptr-0x18
利用思路:设置有指针指向fack chunk的chunk处的地址为ptr,修改fd为ptr-0x18,bk为ptr-0x10完成检查则会进行unlink那么ptr的指针会被修改为ptr-0x18
off-by-one
前提:能溢出一个字节如:for(i=0;i<=len(buf);i++)
作用:可修改下个chunk的p标志位
利用思路:1.堆重叠(2.28前) 2.通过溢出p标志位修改本chunk为free状态进行unlink+任意读写 3.如果只能修改堆块的size,那么可以尝试chunk overlap
fastbin attack
fastbin attack是一类漏洞的利用方法,是指所有基于fastbin机制的漏洞利用方法
前提:uaf漏洞 | 堆溢出 、类型是fast chunk
作用:任意地址写
检查:1.当前free的chunk与fastbin表头的chunk是否一致 2.malloc时会检查预分配时的chunk size是否与fast bin链表的size相同
绕过:1.两次free间隔一个free一个其他size的fastbin chunk 2.fake chunk的size和fash bin的size设为一致
利用思路:实现了使用多个指针控制同一个堆块修改fd指针实现任意地址分配堆块、任意地址写
前提:uaf漏洞、double free 、leak libc
利用思路:实现了使用多个指针控制同一个堆块修改fd指针实现将chunk分配到__malloc_hook区域然后改写__malloc_hook的内容
unsort bin
前提:uaf、可以写入free chunk的bk
作用:将__malloc_hook地址写入到ptr区中
利用思路:将在unsort bin里的chunk的bk值改为target-0x10,再将它拿出来此时unsort chunk(main_arena+88)的地址就会写入到target地址处,此时改变它的地址最后1字节为\x10那么它就会指向__malloc_hook