mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 16:10:54 +00:00
5.1 KiB
5.1 KiB
House of Einherjar
AWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見る
- 💬 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
に、自身と偽のチャンクとの間の差を示します - 偽のチャンクのサイズもサニティチェックをバイパスするために同じサイズに設定されている必要があります
- これらのチャンクを構築するには、ヒープリークが必要です。
攻撃
- 攻撃者が制御するチャンク内に偽のチャンクが作成され、
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ポイズニングで任意の書き込み原始を取得します。