mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
5 KiB
5 KiB
House of Einherjar
{% hint style="success" %}
AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と練習: HackTricks Training GCP Red Team Expert (GRTE)
HackTricksのサポート
- サブスクリプションプランをチェック!
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローする。
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出してハッキングテクニックを共有する。
基本情報
コード
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.cから例を確認
- または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が目標アドレスを割り当てることになります。
参考文献と他の例
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- ポインタを解放した後、それらがヌル化されないため、データにアクセスできる可能性があります。したがって、未整列のビンにチャンクを配置し、それが含むポインタをリークさせ(libcリーク)、次に新しいヒープを未整列のビンに配置し、ポインタからヒープアドレスをリークさせます。
- baby-talk. DiceCTF 2024
strtok
でのヌルバイトオーバーフローバグ。- House of Einherjarを使用して重複するチャンクの状況を取得し、Tcacheポイソニングで任意の書き込み原始を取得します。