Day29-Shrink the chunk
前言 昨天介紹了 Fastbin Corruption,今天我們將介紹這次鐵人賽的最後一個漏洞:Shrink the chunk。 Shrink the chunk Shrink the chunk 這個漏洞的前提是存在一個 off-by-one 的 null byte 漏洞。這類漏洞其實並不少見,因為如果使用像 strcpy 或 strcat 這類在結尾會補 0 的函數,就有可能導致此類漏洞。這個漏洞主要目的是創造出 overlap chunk,從而修改 chunk 的內容,並利用 unsorted bin 和 smallbin 的 unlink 行為來達成目的。 利用方式 假設 fastbin 是空的,並且通過 malloc 分配三個 chunk 到 heap 中,分別為 A、B、C,大小分別是 0x40、0x170 和 0x100。在 B 的資料的 offset 位置 0xf0 填入 0x100,目的是為了通過 prev_size == size 的檢查。接著我們釋放 B,然後釋放 A,這裡是為了觸發 A 的 off-by-one 漏洞。 接著,我們再分配回 A(需要注意 malloc 的大小),此時就可以觸發 off-by-one 漏洞,並將原本 B 的 0x171 改寫成 0x100。這樣,這一塊會被認為是 0x100 大小。當我們再次 malloc 時,會發現因為這塊記憶體需要從 unsorted bin 中取出,因此會進行 unlink 操作,並檢查 prev_size 和 size。這就是為什麼我們一開始在 B 中放入 0x100 的原因。 ...