iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Security

Pwn2Noooo! 執行即 Crash 的 PWNer 養成遊戲系列 第 25

[Day25] Heap 攻擊 - Forging Chunk

  • 分享至 

  • xImage
  •  

今天的文章會探討一個 Heap 的攻擊 — Forging Chunk。這種攻擊方法主要利用了釋放後仍然能夠操作已釋放記憶體的特性,進行惡意修改,最後再透過不當操作將伺機構造的區塊重新分配給程序使用。

fd & bk

在深入探討 Forging Chunk 攻擊時,我們會接觸到兩個關鍵的概念:fd(forward pointer)和 bk(backward pointer)。這兩個指標對於管理釋放區塊非常重要,因為它們決定了 Chunk 如何在記憶體中鏈接起來,並且是攻擊者偽造 Chunk 時的主要目標。

當記憶體區塊被釋放後,它並不會被立即清理掉,而是會被插入到一個 freelist 中。這個 freelist 是一個雙向鏈表,其中每個 Chunk 都有兩個指標:

  • fd (forward pointer): 指向 Chunk。
  • bk (backward pointer): 指向 Chunk。

當一個區塊被釋放時,分配器會將它插入 freelist 中。

Forging Chunk

在 Forging Chunk 中,攻擊者的目標是通過修改釋放區塊的 fd 和 bk,插入一個偽造的 Chunk,使分配器錯誤地分配這個偽造的 Chunk,進而達到任意程式執行或覆蓋重要資料。這個過程分為兩步:

  1. 修改 fd 和 bk
    在 Chunk 被釋放後,攻擊者可以通過某些漏洞,訪問並修改該區塊的 fd 和 bk。通常,攻擊者會將 fd 指向一個偽造的 Chunk 地址,而將 bk 設置為對應的鏈接點,這樣分配器就會誤以為這個偽造的 Chunk 是 freelist 中的一部分

  2. 再次請求記憶體分配
    當程式再一次請求記憶體時,分配器會從 freelist 中挑選適當大小的 Chunk 進行分配。由於 Chunk A 的 fd 已經被修改,分配器會回傳這個偽造的 Chunk位址給程式。


上一篇
[Day 24] Heap 漏洞 - Double Free
下一篇
[Day26] Heap 攻擊 - Unlink Exploit
系列文
Pwn2Noooo! 執行即 Crash 的 PWNer 養成遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言