House of Einherjar

Reading time: 6 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

コード

目標

  • ほぼ任意の特定のアドレスにメモリを割り当てることが目標です。

要件

  • チャンクを割り当てたいときにフェイクチャンクを作成すること:
  • サニティチェックを回避するためにポインタを自分自身を指すように設定する
  • 一つのチャンクから次のチャンクへのヌルバイトを使った1バイトのオーバーフローでPREV_INUSEフラグを変更する。
  • ヌルオフバイの悪用されたチャンクのprev_sizeに自分自身とフェイクチャンクの違いを示す
  • フェイクチャンクのサイズもサニティチェックを回避するために同じサイズに設定されている必要があります
  • これらのチャンクを構築するためには、ヒープリークが必要です。

攻撃

  • 攻撃者が制御するチャンク内にAフェイクチャンクが作成され、fdbkが元のチャンクを指すように設定されて保護を回避します
  • 2つの他のチャンク(BC)が割り当てられます
  • Bのオフバイワンを悪用してprev in useビットがクリアされ、prev_sizeデータがCチャンクが割り当てられる場所と以前に生成されたフェイクAチャンクの違いで上書きされます
  • このprev_sizeとフェイクチャンクAのサイズはチェックを回避するために同じでなければなりません。
  • 次に、tcacheが埋められます
  • その後、Cが解放され、フェイクチャンクAと統合されます
  • 次に、新しいチャンクDが作成され、フェイクAチャンクから始まりBチャンクを覆います
  • エインヘリヤルの家はここで終了します
  • これはファストビン攻撃またはTcacheポイズニングで続けることができます:
  • Bを解放してファストビン/Tcacheに追加します
  • Bfdが上書きされ、ターゲットアドレスを指すようにし、Dチャンクを悪用します(Bが内部に含まれているため)
  • 次に、2つのmallocが行われ、2つ目はターゲットアドレスを割り当てることになります

参考文献と他の例

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする