Large Bin Attack
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
有关大型 bin 的更多信息,请查看此页面:
Bins & Memory Allocations在 how2heap - large bin attack 中可以找到一个很好的示例。
基本上,在最新的 "current" 版本的 glibc (2.35) 中,可以看到没有检查:P->bk_nextsize
,这允许在满足某些条件时用大型 bin 块的值修改任意地址。
在该示例中,可以找到以下条件:
分配了一个大型块
分配了一个小于第一个块但在同一索引中的大型块
必须更小,因此在 bin 中必须先放入
(创建一个块以防止与顶部块合并)
然后,释放第一个大型块并分配一个比它更大的新块 -> Chunk1 进入大型 bin
然后,释放第二个大型块
现在,漏洞:攻击者可以将 chunk1->bk_nextsize
修改为 [target-0x20]
然后,分配一个比 chunk 2 更大的块,因此 chunk2 被插入到大型 bin 中,覆盖地址 chunk1->bk_nextsize->fd_nextsize
,其值为 chunk2 的地址
还有其他潜在场景,关键是向大型 bin 添加一个 小于 当前 bin 中 X 块的块,因此它需要在 bin 中插入到 X 之前,并且我们需要能够修改 X 的 bk_nextsize
,因为较小块的地址将写入到这里。
这是 malloc 中的相关代码。添加了注释以更好地理解地址是如何被覆盖的:
这可以用来覆盖libc的global_max_fast
全局变量,从而利用更大块的快速bin攻击。
你可以在guyinatuxedo找到对这种攻击的另一个很好的解释。
在how2heap中出现的相同情况的大型bin攻击。
写入原语更复杂,因为global_max_fast
在这里无用。
需要FSOP来完成利用。
学习与实践AWS黑客技术:HackTricks Training AWS Red Team Expert (ARTE) 学习与实践GCP黑客技术:HackTricks Training GCP Red Team Expert (GRTE)