mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 22:20:43 +00:00
4.7 KiB
4.7 KiB
House of Einherjar
AWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTコレクションをご覧ください
- 💬 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_size
に、自身と偽のチャンクの間の差を示します - 偽のチャンクのサイズもサニティチェックをバイパスするために同じサイズに設定されている必要があります
- これらのチャンクを構築するには、ヒープリークが必要です。
攻撃
- 攻撃者が制御するチャンク内に
A
偽のチャンクが作成され、元のチャンクを指すfd
とbk
で保護をバイパスします - 他の2つのチャンク(
B
とC
)が割り当てられます B
のオフバイワンを悪用して、prev in use
ビットがクリアされ、C
チャンクが割り当てられた場所から前に使用されたデータが偽のA
チャンクまでの差で上書きされます- この
prev_size
と偽のチャンクA
のサイズはチェックをバイパスするために同じである必要があります。 - 次に、tcacheが埋められます
- 次に、
C
が解放され、偽のチャンクA
と統合されます - 次に、偽の
A
チャンクから始まり、B
チャンクをカバーする新しいチャンクD
が作成されます - Einherjarの家はここで終わります
- これはファストビン攻撃で続けることができます:
B
を解放してファストビンに追加しますB
のfd
を上書きして、D
チャンクを悪用してターゲットアドレスを指すようにします(B
を含むため)- 次に、2つのmallocが行われ、2番目のmallocはターゲットアドレスを割り当てることになります
参考文献と他の例
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- ポインタを解放した後、それらがヌル化されないため、まだデータにアクセスできる可能性があります。したがって、チャンクをアンソートされたビンに配置し、それが含むポインタをリークします(libcリーク)、次に新しいヒープをアンソートされたビンに配置し、それが取得するポインタからヒープアドレスをリークします。