Fastbin attack
劫持 fastbin 链表中 chunk 的 fd 指针,把 fd 指针指向我们想要分配的地址处,从而实现控制一些关键数据,比如返回地址等。
fd 指向的内存能申请出来的前提是该内存对应 size 处的值与该 fast bin 对应 size 相同。
1 |
|
由于这里的 size 不考虑低 3 比特,并且 libc 或栈地址多数是 0x7f 开头,因此可以通过截取 0x7f 然后用 0x70 的 fastbin 将该内存申请出来。
例如修改 fd 指针指向 __realloc_hook 前合适的偏移通常是 __malloc_hook 往前 0x23 的偏移),两次 malloc(0x60) 申请出该地址的 fake chunk 实现对 __realloc_hook 和 __malloc_hook 的控制。
由于 one_gadget 可能因栈结构不满足条件而失效,可以通过修改 __malloc_hook 为 realloc+偏移 ,修改 __realloc_hook 为 one_gadget 改变栈结构来获取 shell 。

除了 realloc + 偏移外,还可以通过触发 malloc 报错执行 malloc 来改变栈结构。
示例程序:
1 |
|
exp:
1 | from pwn import * |
- Title: Fastbin attack
- Author: Chiu
- Created at : 2024-07-31 14:02:30
- Updated at : 2024-07-31 14:03:22
- Link: https://github.com/Idealist17/github.io/2024/07/31/Fastbin-attack/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments