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

7.7 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を行います。

参考文献と他の例