lun4t1c@home:~$

堆利用

# 一般步骤

  1. 泄露 unsorted bin 地址。
  2. 计算地址,如 libc 基址、malloc hook 的地址等。
  3. hijack,如劫持 free@got、malloc hook、free hook 等。

# 泄露 unsorted bin 地址

条件

  1. 存在堆溢出或 UAF 漏洞。
  2. 能够输出 chunk 上的数据。

# fast bin attack

关于 fast bin

  • 取出前检查

从 fast bin 中取出 chunk 前会对该 chunk 的 size 进行检查。

  • fd 指针的指向

fast bin 单链表的第一个 chunk 成员的 fd 值为 Null。链表中其他 chunk 的 fd 指针指向另一个 chunk 的头部,而非 user data。

  • 与 top chunk 的合并

大小不在 fast bin 范围内的 chunk 被释放时,如果它与 top chunk 相邻,则其会与 top chunk 发生合并。

  • 最大 chunk size

fast bin 中最大的 chunk 大小为 0x80。

  • FILO 原则

fast bin 中的 chunk 遵循 FILO 原则。

  • 大小在 fast bin 范围内的 chunk 被释放时,其 next_chunk 的 prev_inuse 位不会被置零。

利用手法

修改已被释放并被存放在 fast bin 中的 chunk 的 fd 指针,使其指向目标内存附近(合适偏移处),之后便可在目标内存处申请一块 chunk 进行操作。

注意事项

  • 确定偏移

进行 fast bin attack 时需要计算好合适的偏移,以确保要申请的 chunk 的 size 是合法的。