hacktricks/binary-exploitation/libc-heap/house-of-einherjar.md

5 KiB
Raw Blame History

House of Einherjar

{% hint style="success" %} AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と練習: HackTricks Training GCP Red Team Expert (GRTE)

HackTricksのサポート
{% endhint %}

基本情報

コード

ゴール

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

必要条件

  • チャンクを割り当てる際に偽のチャンクを作成する必要があります。
  • ポインタを自身を指すように設定してセーフティチェックをバイパスします。
  • 1バイトのオーバーフローを使用して、1つのチャンクから次のチャンクにヌルバイトを流し込み、PREV_INUSEフラグを変更します。
  • オフバイヌルを悪用したチャンクのprev_sizeに、そのチャンクと偽のチャンクとの間の差を示します。
  • 偽のチャンクのサイズもセーフティチェックをバイパスするために同じサイズに設定されている必要があります。
  • これらのチャンクを構築するには、ヒープリークが必要です。

攻撃

  • 攻撃者が制御するチャンク内にA偽のチャンクが作成され、fdbkが元のチャンクを指すようにして保護をバイパスします。
  • 他の2つのチャンクBC)が割り当てられます。
  • Bのオフバイワンを悪用して、prev in useビットがクリアされ、prev_sizeデータがCチャンクが割り当てられた場所から前に生成された偽のAチャンクまでの差で上書きされます。
  • このprev_sizeと偽のチャンクAのサイズは、チェックをバイパスするために同じである必要があります。
  • 次に、tcacheを埋めます。
  • 次に、Cを解放して偽のチャンクAと統合します。
  • 次に、偽のAチャンクから始まり、Bチャンクをカバーする新しいチャンクDが作成されます。
  • ここでEinherjarの家は終わります。
  • これはファストビン攻撃またはTcacheポイソニングで続けることができます
  • Bを解放してファストビン/ Tcacheに追加します。
  • Bfdを上書きして、Dチャンクを悪用して目標アドレスを指すようにします(Bが内部に含まれているため)。
  • 次に、2つのmallocを行い、2番目のmallocが目標アドレスを割り当てることになります。

参考文献と他の例