unlink
コード
グラフィカルな説明
unlinkプロセスの素晴らしいグラフィカルな説明を確認してください:
セキュリティチェック
チャンクの指定サイズが次のチャンクに示されたprev_sizeと同じであることを確認する
また、
P->fd->bk == P
およびP->bk->fw == P
であることを確認するチャンクが小さくない場合、
P->fd_nextsize->bk_nextsize == P
およびP->bk_nextsize->fd_nextsize == P
であることを確認する
リーク
unlinkされたチャンクは割り当てられたアドレスをクリーンアップしないため、アクセスして読むことができれば、いくつかの興味深いアドレスをリークすることが可能です:
Libcリーク:
Pが二重リンクリストの先頭にある場合、
bk
はlibcのmalloc_state
を指しますPが二重リンクリストの末尾にある場合、
fd
はlibcのmalloc_state
を指します二重リンクリストに1つのフリーなチャンクしか含まれていない場合、Pは二重リンクリストにあり、
fd
とbk
の両方がmalloc_state
内のアドレスをリークすることができます
ヒープリーク:
Pが二重リンクリストの先頭にある場合、
fd
はヒープ内の利用可能なチャンクを指しますPが二重リンクリストの末尾にある場合、
bk
はヒープ内の利用可能なチャンクを指しますPが二重リンクリストにある場合、
fd
とbk
の両方がヒープ内の利用可能なチャンクを指します
Last updated