Tcache Bin Attack
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
有关 Tcache bin 的更多信息,请查看此页面:
首先,请注意 Tcache 是在 Glibc 版本 2.26 中引入的。
Tcache 攻击(也称为 Tcache 中毒)在 guyinatuxido 页面 中提出,与快速 bin 攻击非常相似,其目标是在已释放的 chunk 中覆盖指向下一个 chunk 的指针,以指向任意地址,以便后续可以 分配该特定地址并可能覆盖指针。
然而,如今,如果您运行上述代码,您将收到错误:malloc(): unaligned tcache chunk detected
。因此,需要在新指针中写入一个对齐的地址(或多次执行二进制文件,以便写入的地址实际上是对齐的)。
通常可以在堆的开头找到一个 chunk,其中包含 每个索引的 chunk 数量 和指向 每个 tcache 索引的头 chunk 的地址。如果出于某种原因可以修改此信息,则可以 使某个索引的头 chunk 指向所需地址(如 __malloc_hook
),然后分配一个与索引大小相同的 chunk,并在这种情况下覆盖 __malloc_hook
的内容。
Libc 信息泄露:可以填充 tcaches,将一个 chunk 添加到未排序列表中,清空 tcache 并 仅覆盖前 8B 从未排序 bin 中重新分配 chunk,保留 来自 chunk 的第二个 libc 地址不变,以便我们可以读取它。
Tcache 攻击:该二进制文件易受 1B 堆溢出攻击。这将被滥用以更改已分配 chunk 的 大小头,使其变大。然后,这个 chunk 将被 释放,将其添加到假大小的 tcache 中。然后,我们将分配一个假大小的 chunk,之前的 chunk 将被 返回,知道这个 chunk 实际上更小,这为 覆盖内存中的下一个 chunk 提供了机会。
我们将利用这一点 覆盖下一个 chunk 的 FD 指针,使其指向 malloc_hook
,然后可以分配 2 个指针:首先是我们刚刚修改的合法指针,然后第二次分配将返回一个在 malloc_hook
中的 chunk,可以利用它写入 one gadget。
Libc 信息泄露:存在使用后释放和双重释放。在这篇文章中,作者通过读取放置在小 bin 中的 chunk 的地址泄露了 libc 的地址(就像从未排序 bin 中泄露,但来自小 bin)。
Tcache 攻击:通过 双重释放 执行 Tcache。相同的 chunk 被释放两次,因此在 Tcache 中,chunk 将指向自身。然后,它被分配,其 FD 指针被修改为指向 free hook,然后再次分配,因此列表中的下一个 chunk 将在 free hook 中。然后,这也被分配,可以在这里写入 system
的地址,因此当包含 "/bin/sh"
的 malloc 被释放时,我们获得一个 shell。
这里的主要漏洞是通过指示其偏移量 free
堆中的任何地址的能力。
Tcache 索引攻击:可以分配和释放一个大小的 chunk,当存储在 tcache chunk 中(包含 tcache bins 信息的 chunk)时,将生成一个 值为 0x100 的地址。这是因为 tcache 在不同字节中存储每个 bin 的 chunk 数量,因此一个特定索引中的 chunk 生成值 0x100。
然后,这个值看起来像是一个大小为 0x100 的 chunk。允许通过 free
这个地址来滥用它。这将 将该地址添加到 tcache 中大小为 0x100 的 chunk 的索引。
然后,分配 一个大小为 0x100 的 chunk,之前的地址将作为 chunk 返回,从而允许覆盖其他 tcache 索引。 例如,将 malloc hook 的地址放入其中一个索引中,并分配与该索引大小相同的 chunk 将获得一个在 calloc hook 中的 chunk,这允许写入一个 gadget 以获得 shell。
与之前相同的漏洞,但有一个额外的限制。
Tcache 索引攻击:与之前类似的攻击,但通过 释放包含 tcache 信息的 chunk 来使用更少的步骤,因此它的地址被添加到其大小的 tcache 索引中,因此可以分配该大小并将 tcache chunk 信息作为 chunk 获取,这允许将 free hook 添加为一个索引的地址,分配它,并在其上写入一个 gadget。
写后释放 以将数字添加到 fd
指针。
在这个挑战中需要大量的 堆风水。这篇文章展示了 控制 Tcache 空闲列表的头部是多么方便。
通过 stdout
的 Glibc 泄露(FSOP)。
Tcache 中毒 以获得任意写入原语。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)