Beginner's Heap - SECCON beginners CTF 2020

Beginner’s Heap (My solver) 作問者writeup 方針 Heap overflowによって、下のチャンクのfdとサイズを書き換えて、tcache poisoning によるwin関数の呼び出し。 やる Bの領域をmallocしてfreeすることで、tcache(の0x20ようのスレッド)につなげる。 -=-=-=-=-= TCACHE -=-=-=-=-= [ tcache (for 0x20) ] || \/ [ 0x000055dfd3002350(rw-) ] || \/ [ END OF TCACHE ] -=-=-=-=-=-=-=-=-=-=-=-=-=-= 1. Bのfdを書き換える freeされたチャンク(freed chunk)のfdがNULLなので、次につながっているfreed chunkはない。 ここで、AのHeap Overflowを利用して、Bのfdを書き換えるとfdに値が入るので、tcache君はBの次があると錯覚する。 A*24 + 0x31 + __freehookを与えた図。 2. fdを__free_hookで書き換える fdを__free_hook(のアドレス)で書き換えると、tcacheはこのようになる。 (tcacheを汚染しているので、これをtcache poisoningという) -=-=-=-=-= TCACHE -=-=-=-=-= [ tcache (for 0x20) ] || \/ [ 0x0000557af97c3350(rw-) ] || \/ [ 0x00007effac9cc8e8(rw-) ] || \/ [ END OF TCACHE ] -=-=-=-=-=-=-=-=-=-=-=-=-=-= 3....

2022-05-01 · 1 分 · Me