堆溢位之Overlapping

weixin_33751566發表於2018-05-05

主要參照這一篇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來完成進一步的利用。

相關文章