主要參照這一篇dance in heap
overlapping chunk2
a = malloc(0x100-8);
b = malloc(0x100-8);
c = malloc(0x100-8);
d = malloc(0x100-8);// 第四個為了防止被top chunk 合并眯停,以及應(yīng)對 free的檢查
借助uaf或者堆塊a的寫入溢出什么的去修改堆塊b的size位(記得要把inuse加上啊):
*(a+0xf8) = 0x201? ? // 0x1為inuse標識
還有一個點需要注意,修改后的size要包含完整的堆塊,也就是說隨便你想把size改大覆蓋后面幾個堆塊悯辙,但一定要覆蓋完整的堆塊盖溺,不能卡在某個堆塊的一半。這里把size改大使得剛好包含b卿闹、c兩個堆塊粘勒。
然后把堆塊b free掉竞端。
這樣unsorted bin中就有了一個大堆塊,借助這個堆塊就可以修改b庙睡、c兩個堆塊的內(nèi)容事富。(尤其是c堆塊的頭部)
也可以結(jié)合其他方法比如fastbin attack來完成進一步的利用技俐。