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

7.5 KiB
Raw Permalink Blame History

フォースハウス

{% hint style="success" %} AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と練習: HackTricks Training GCP Red Team Expert (GRTE)

HackTricksのサポート
{% endhint %}

基本情報

コード

  • このテクニックは修正されました (こちら) 、エラー 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を行います。

参考文献と他の例