hacktricks/binary-exploitation/libc-heap/house-of-force.md

7.8 KiB
Raw Blame History

ハウス・オブ・フォース

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

基本情報

コード

  • このテクニックは修正されました(こちら)し、このエラーが発生します:malloc(): corrupted top size
  • テストしたい場合は、こちらからコードを取得できます。

ゴール

  • この攻撃の目標は、特定のアドレスにチャンクを割り当てることです。

必要条件

  • ヘッダーのトップチャンクサイズを上書きできるオーバーフロー(例:-1が許可されるオーバーフロー
  • ヒープ割り当てのサイズを制御できること

攻撃

攻撃者がアドレスPにチャンクを割り当てて値を上書きしたい場合、まずトップチャンクサイズを-1で上書きしますおそらくオーバーフローを使用。これにより、mallocは常に十分なスペースを持つトップチャンクを使用しないため、どの割り当てにもmmapを使用しなくなります。

次に、トップチャンクのアドレスとターゲットスペースを割り当てるための距離を計算します。このサイズでmallocが実行されると、トップチャンクがその位置に移動されます。差分/サイズを簡単に計算する方法は次のとおりです:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

したがって、target - old_top - 4*sizeof(long)のサイズをアロケートすることで4つのlongは、トップチャンクと新しいチャンクのメタデータのためです、トップチャンクを上書きしたいアドレスに移動させることができます。
その後、別のmallocを行い、書き込むターゲットアドレスを含むチャンクを取得します。

参考文献と他の例