概念
1.简介
俗称脱链,就是将链表头处的free堆块从unsorted bin中脱离出来,然后和物理地址相邻的新free的堆块合并成大堆块(向前合并或者向后合并),再放入到unsorted bin中。
把两个free掉的物理相邻的两个堆块合并成一个大堆块,再放到unsored bin中。
2.漏洞原理
- 通过修改标志位来实现
free状态的堆块的伪造。 - 伪造
fd指针和bk指针,fd=p-0x18 bk=p-0x10
通过伪造free状态的fake_chunk,伪造fd指针和bk指针,通过绕过unlink的检测实现unlink,unlink就会往p所在的位置写入p-0x18,从而实现任意地址写的漏洞。


3.漏洞产生原因
Offbynull、offbyone(溢出单字节)、堆溢出,修改了堆块的使用标志位。
4.Unlink的绕过和利用
1.伪造如下

2.绕过技巧
即伪造fd和bk,让本来要合并的两个物理地址相邻的堆块变得不相邻而不会合并,即绕过unlink。
