unlink


概念

1.简介

俗称脱链,就是将链表头处的free堆块从unsorted bin中脱离出来,然后和物理地址相邻的新free的堆块合并成大堆块(向前合并或者向后合并),再放入到unsorted bin中。

把两个free掉的物理相邻的两个堆块合并成一个大堆块,再放到unsored bin中。

2.漏洞原理

  1. 通过修改标志位来实现free状态的堆块的伪造。
  2. 伪造fd指针和bk指针fd=p-0x18 bk=p-0x10

通过伪造free状态的fake_chunk,伪造fd指针和bk指针,通过绕过unlink的检测实现unlinkunlink就会往p所在的位置写入p-0x18,从而实现任意地址写的漏洞。

image-20240921175445794

image-20240921184727716

3.漏洞产生原因

Offbynull、offbyone(溢出单字节)、堆溢出,修改了堆块的使用标志位。

4.Unlink的绕过和利用

1.伪造如下

image-20240928145047258

2.绕过技巧

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

image-20240928151738531

参考链接:https://www.freebuf.com/articles/system/288950.html


文章作者: 0x00dream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0x00dream !
  目录