House of Einherjar
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)
またはhttps://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanationのもの(tcacheを埋める必要があるかもしれません)
ほぼ任意の特定のアドレスにメモリを割り当てることが目標です。
チャンクを割り当てたいときにフェイクチャンクを作成すること:
サニティチェックを回避するためにポインタを自分自身を指すように設定する
1バイトのオーバーフローを使用して、1つのチャンクから次のチャンクにヌルバイトを渡し、PREV_INUSE
フラグを変更する。
ヌルオフバイの悪用されたチャンクのprev_size
に、フェイクチャンクとの違いを示す
フェイクチャンクのサイズもサニティチェックを回避するために同じサイズに設定されている必要があります
これらのチャンクを構築するには、ヒープリークが必要です。
攻撃者が制御するチャンク内にA
フェイクチャンクが作成され、fd
とbk
が元のチャンクを指すように設定されて保護を回避します
2つの他のチャンク(B
とC
)が割り当てられます
B
のオフバイワンを悪用してprev in use
ビットがクリアされ、prev_size
データがC
チャンクが割り当てられる場所と、前に生成されたフェイクA
チャンクとの違いで上書きされます
このprev_size
とフェイクチャンクA
のサイズは、チェックを回避するために同じでなければなりません。
次に、tcacheが埋められます
次に、C
が解放され、フェイクチャンクA
と統合されます
次に、新しいチャンクD
が作成され、フェイクA
チャンクから始まり、B
チャンクを覆います
エインヘルヤルの家はここで終了します
これは、ファストビン攻撃またはTcacheポイズニングで続けることができます:
B
を解放してファストビン/Tcacheに追加します
B
のfd
が上書きされ、ターゲットアドレスを指すようにし、D
チャンクを悪用します(B
が内部に含まれているため)
次に、2つのmallocが行われ、2つ目はターゲットアドレスを割り当てることになります
ポインタを解放した後、それらはヌル化されないため、データにアクセスすることがまだ可能です。したがって、チャンクが未ソートビンに配置され、その中に含まれるポインタをリークし(libc leak)、次に新しいヒープが未ソートビンに配置され、取得したポインタからヒープアドレスをリークします。
strtok
のヌルバイトオーバーフローバグ。
エインヘルヤルの家を使用してオーバーラッピングチャンクの状況を取得し、Tcacheポイズニングで任意の書き込みプリミティブを取得します。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)