Fast Bin Attack
Last updated
Last updated
AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングの学習と練習: HackTricks Training GCP Red Team Expert (GRTE)
ファストビンについての詳細は、次のページを参照してください:
Bins & Memory Allocationsファストビンは単方向リンクリストであるため、他のビンよりも保護が少なく、解放されたファストビンチャンク内のアドレスを変更するだけで、後で任意のメモリアドレスにチャンクを割り当てることができます。
要約すると:
詳しいコードの完全な例は、https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html から見つけることができます。
もしグローバル変数 global_max_fast
の値を大きな数値で上書きできる場合、これによりより大きなサイズの fast bin チャンクを生成することが可能となり、以前は不可能だったシナリオで fast bin アタックを実行できるようになります。この状況は、large bin attack および unsorted bin attack のコンテキストで有用です。
チャンクを割り当て、解放し、その内容を読み取り、溢れた脆弱性でそれらを埋めることが可能です。
情報リークのためのチャンクの統合: このテクニックは、オーバーフローを悪用して偽の prev_size
を作成し、以前のチャンクを大きなチャンクの中に配置することで、別のチャンクを含む大きなチャンクを割り当てる際に、そのデータを印刷し、libc (main_arena+88
) のアドレスをリークさせることが可能です。
malloc フックの上書き: これにより、前述の重複状況を悪用することで、同じメモリを指す 2 つのチャンクを持つことが可能でした。したがって、それらを両方解放し(保護を回避するために間に別のチャンクを解放)、同じチャンクを fast bin に 2 回持つことが可能でした。その後、再度それを割り当て、次のチャンクのアドレスを __malloc_hook
の直前を指すように上書きし(malloc が空きサイズとして考える整数を指すようにするための別のバイパス)、再度それを割り当て、その後 malloc フックにアドレスを受け取る別のチャンクを割り当てることが可能でした。最後に one gadget がそこに書き込まれました。
ヒープオーバーフローと使用後の解放、およびダブルフリーがあります。チャンクが解放されると、ポインターを再利用して再度解放することが可能です。
Libc 情報リーク: いくつかのチャンクを解放すると、メインアリーナの一部の場所を指すポインターを取得します。解放されたポインターを再利用できるため、このアドレスを読み取ることができます。
Fast bin attack: 割り当てられたポインターはすべて配列内に格納されているため、いくつかの fast bin チャンクを解放し、最後のチャンクでアドレスを上書きしてこのポインター配列の直前を指すようにします。その後、同じサイズのいくつかのチャンクを割り当てると、最初に正規のチャンクが取得され、その後、配列のポインターを含む偽のチャンクが取得されます。これにより、この割り当てポインターを上書きして、free
の GOT アドレスを system
を指すように設定し、次にチャンク 1 に "/bin/sh"
を書き込んで free(chunk1)
を呼び出すと、代わりに system("/bin/sh")
が実行されます。
1 バイトのオーバーフローを悪用して unsorted bin のチャンクを統合し、libc 情報リークを取得し、その後 fast bin attack を実行して malloc フックを one gadget アドレスで上書きする例です。
UAF を悪用して unsorted bin をリークして libc アドレスと PIE アドレスを取得した後、この CTF のエクスプロイトでは、制御されたチャンクへのポインターが存在する場所にチャンクを割り当てるため、特定のポインターを上書きして GOT に one gadget を書き込むことが可能でした。
Unsorted bin attack を介して悪用された Fast Bin attack を見つけることができます:
Fast bin attack を実行する前に、必要に応じて free リストを悪用して libc/heap アドレスをリークすることが一般的です。
サイズが 0x100
より大きいチャンクのみを割り当てることができます。
ASLR のために 1/16 回しか機能しない Unsorted Bin attack を使用して global_max_fast
を上書きします(12 ビットを変更する必要があるため、16 ビットを変更する必要があります)。
Global チャンクの配列を変更するための Fast Bin attack。これにより、任意の読み取り/書き込み原始が提供され、GOT を変更していくつかの関数を system
を指すように設定することが可能となります。
AWS ハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE) GCP ハッキングの学習と練習: HackTricks Training GCP Red Team Expert (GRTE)