Large Bin Attack
基本信息
有关什么是大型 Bin,请查看此页面:
Bins & Memory Allocations可以在how2heap - 大型 Bin 攻击中找到一个很好的示例。
基本上,您可以看到在最新的 glibc(2.35)版本中,未检查:P->bk_nextsize
,允许在满足某些条件的情况下修改任意地址的值为大型 Bin 块。
在该示例中,您可以找到以下条件:
分配了一个大块
分配了一个比第一个小但在相同索引中的大块
必须更小,因此在 Bin 中必须首先进入
(创建一个块以防止与顶部块合并)
然后,释放第一个大块并分配一个比它更大的新块 -> Chunk1 进入大型 Bin
然后,释放第二个大块
现在,漏洞:攻击者可以修改
chunk1->bk_nextsize
为[target-0x20]
然后,分配比块 2 更大的块,因此块 2 被插入大型 Bin,覆盖地址
chunk1->bk_nextsize->fd_nextsize
为块 2 的地址
还有其他潜在情景,关键是向大型 Bin 添加一个比当前 Bin 中的 X 块更小的块,因此需要将其插入到 Bin 中的 X 块之前,并且我们需要能够修改 X 的 bk_nextsize
,因为这是较小块的地址将被写入的位置。
这是来自 malloc 的相关代码。已添加注释以更好地理解地址是如何被覆写的:
这可以用来覆盖libc的global_max_fast
全局变量,然后利用更大的块进行快速bin攻击。
您可以在guyinatuxedo中找到关于这种攻击的另一个很好的解释。
其他示例
在与how2heap中出现的相同情况下的大块攻击。
写入原语更复杂,因为在这里
global_max_fast
是无用的。需要FSOP来完成利用。
Last updated