Large 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最新の"glibc"(2.35)の「現在の」バージョンでは、P->bk_nextsize
がチェックされていないため、特定の条件が満たされると大きなビンチャンクの値で任意のアドレスを変更できます。
その例では、次の条件が見つかります:
大きなチャンクが割り当てられている
最初のチャンクよりも小さい大きなチャンクが同じインデックスに割り当てられている
ビン内で最初に行く必要があるため、それよりも小さくなければならない
(トップチャンクとのマージを防ぐチャンクが作成される)
次に、最初の大きなチャンクが解放され、それよりも大きな新しいチャンクが割り当てられる -> チャンク1は大きなビンに移動
次に、2番目の大きなチャンクが解放される
ここで、脆弱性:攻撃者は chunk1->bk_nextsize
を [target-0x20]
に変更できる
次に、チャンク2よりも大きなチャンクが割り当てられるため、チャンク2が大きなビンに挿入され、アドレス chunk1->bk_nextsize->fd_nextsize
がチャンク2のアドレスで上書きされます
他の潜在的なシナリオがありますが、重要なのは、ビンに現在のXチャンクよりも小さいチャンクを追加することです。そのためには、ビン内でそれよりも前に挿入する必要があり、Xの**bk_nextsize
**を変更できる必要があります。それが小さなチャンクのアドレスが書き込まれる場所です。
これはmallocからの関連するコードです。アドレスがどのように上書きされたかをよりよく理解するためにコメントが追加されています:
これは、global_max_fast
のグローバル変数を上書きして、より大きなチャンクで高速ビンアタックを悪用するために使用できます。
この攻撃の別の素晴らしい説明をguyinatuxedoで見つけることができます。
同じ状況での大きなビンアタックは、how2heapに表示されています。
書き込みプリミティブはより複雑です、なぜならglobal_max_fast
はここでは役に立たないからです。
エクスプロイトを完了するにはFSOPが必要です。
AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングの学習と練習:HackTricks Training GCP Red Team Expert (GRTE)