House of Force

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

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

基本情報

コード

ゴール

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

必要条件

  • ヘッダーのトップチャンクサイズを上書きできるオーバーフロー(例:-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を行い、書き込むターゲットアドレスを含むチャンクを取得します。

参考文献と他の例

Last updated