主要参照这一篇dance in heap
overlapping chunk2
a = malloc(0x100-8);
b = malloc(0x100-8);
c = malloc(0x100-8);
d = malloc(0x100-8);// 第四个为了防止被top chunk 合并,以及应对 free的检查
借助uaf或者堆块a的写入溢出什么的去修改堆块b的size位(记得要把inuse加上啊):
*(a+0xf8) = 0x201 // 0x1为inuse标识
还有一个点需要注意,修改后的size要包含完整的堆块,也就是说随便你想把size改大覆盖后面几个堆块,但一定要覆盖完整的堆块,不能卡在某个堆块的一半。这里把size改大使得刚好包含b、c两个堆块。
然后把堆块b free掉。
这样unsorted bin中就有了一个大堆块,借助这个堆块就可以修改b、c两个堆块的内容。(尤其是c堆块的头部)
也可以结合其他方法比如fastbin attack来完成进一步的利用。
网友评论