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
と統合します。
次に、偽のA
チャンクから始まり、B
チャンクをカバーする新しいチャンクD
が作成されます。
ここでEinherjarの家は終わります。
これはファストビン攻撃またはTcacheポイソニングで続けることができます:
B
を解放してファストビン/ Tcacheに追加します。
B
のfd
を上書きして、D
チャンクを悪用して目標アドレスを指すようにします(B
が内部に含まれているため)。
次に、2つのmallocを行い、2番目のmallocが目標アドレスを割り当てることになります。
ポインタを解放した後、それらがヌル化されないため、データにアクセスできる可能性があります。したがって、未整列のビンにチャンクを配置し、それが含むポインタをリークさせ(libcリーク)、次に新しいヒープを未整列のビンに配置し、ポインタからヒープアドレスをリークさせます。
strtok
でのヌルバイトオーバーフローバグ。
House of Einherjarを使用して重複するチャンクの状況を取得し、Tcacheポイソニングで任意の書き込み原始を取得します。