视频字幕
Unsorted Bin Attack 是一种经典的堆漏洞利用技术。它的核心思想是利用 glibc malloc 中未分类 bin 链表更新时的写操作,通过控制未分类 bin 中 chunk 的 bk 指针,实现向任意地址写入 main_arena 地址。这种攻击通常用于覆盖 GOT 表项或其他关键指针,从而劫持程序控制流或泄露 libc 地址。
攻击的第一步是准备阶段。程序需要先分配多个 chunk,然后释放其中一个 chunk,使其进入未分类 bin。当 chunk 被释放并放入未分类 bin 时,它的 fd 和 bk 指针会被设置为指向 main_arena 结构体中的 unsorted_bins 数组,这是未分类 bin 链表的头部。
第二步是利用漏洞覆盖 bk 指针。攻击者需要利用程序中的其他漏洞,例如堆溢出或 UAF,在被释放并已进入未分类 bin 的 chunk 上进行写操作。攻击的目标是覆盖该 chunk 的 bk 指针,将其设置为目标写入地址减去 0x18。这里的 0x18 是 fd 指针相对于 chunk 起始地址的偏移量。
第三步是触发攻击。攻击者需要触发一次新的内存分配请求,使得 glibc 尝试从未分类 bin 中取出之前被覆盖 bk 指针的 chunk。当 glibc 执行链表更新操作时,会执行 chunk->bk->fd = chunk->fd,由于攻击者已经控制了 bk 的值,这个操作实际上变成了向目标地址写入 main_arena 地址,从而实现任意地址写入。
最后一步是后续利用。一旦成功将 main_arena 地址写入 GOT 表项等位置,攻击者就可以通过调用对应的函数来泄露 libc 地址,或者通过进一步的攻击来完全控制程序执行流。这种攻击技术常与其他堆利用技术结合使用,形成完整的攻击链,最终实现代码执行或权限提升。