Large Bin Attack
Reading time: 5 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Basic Information
有关大型 bin 的更多信息,请查看此页面:
在 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 的地址
tip
还有其他潜在场景,关键是向大型 bin 添加一个 小于 当前 bin 中 X 块的块,因此它需要在 bin 中插入在 X 之前,并且我们需要能够修改 X 的 bk_nextsize
,因为较小块的地址将写入该位置。
这是 malloc 中的相关代码。已添加注释以更好地理解地址是如何被覆盖的:
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
这可以用来覆盖libc的global_max_fast
全局变量,从而利用更大块的快速堆攻击。
你可以在guyinatuxedo找到对这种攻击的另一个很好的解释。
其他示例
- La casa de papel. HackOn CTF 2024
- 在how2heap中出现的相同情况的大型堆攻击。
- 写入原语更复杂,因为
global_max_fast
在这里是无用的。 - 需要FSOP来完成利用。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。