Unsortbin attack原理及分析

CH13hh發表於2024-04-26

Unsortbin attack原理

✔️條件:首先要實現Unsortbin attack前提是可以控制Unsortbin attack chunk的bk指標

✔️目的:我們可以實現修改任意地址為一個比較大的值

✔️原理:1.Unsortbin的來源

1.當一個較大的 chunk 被分割成兩半後,如果剩下的部分大於MINSIZE,就會被放到 unsorted bin 中。

2.釋放一個不屬於 fast bin 的 chunk,並且該 chunk 不和 top chunk 緊鄰時,該 chunk 會被首先放到 unsorted bin 中。

3.如果不是和 top chunk 近鄰的話,當進行malloc_consolidate 時,可能會把合併後的 chunk 放到 unsorted bin 中。

因為unsortbin是雙向連結串列而且是FIFO(先進先出)原理可以看下面這張圖

Unsortbin attack原理及分析

那麼當我們修改free chunk下bk指標為目的地址-0x10的位置,當吧這個chunk拿出來的時候fd指標並沒有發揮左右,所以即使我們覆蓋fd的指標為不合法的值其實也沒有關係。但是unsortbin的連結串列可能被破壞,那樣再free chunk的時候可能出現問題,可以看見目的地址修改為Unsort bin的地址(fd指標指向Unsort bin的地址)

主要涉及的程式碼

          /* remove from unsorted list */
          unsorted_chunks (av)->bk = bck;
          bck->fd = unsorted_chunks (av);

還是上一篇部落格的題目部落格連結 https://www.cnblogs.com/CH13hh/p/18158419 裡面有題目連結和反彙編分析

那麼既然要改magic的地址大於114515就好了然後choice選擇114514,那麼我們可以使用unsortbin attack修改magic的地址為一個較大的值。

Unsortbin attack原理及分析

Unsortbin attack原理及分析

那麼這個值是遠遠大於114515的。進而完成對magic地址的修改(只能修改一個較大的值,但是值的內容不受我們控制)

相關文章