高版本largebin_attack

heart22 Lv1

利用源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
      /* maintain large bins in sorted order */
if (fwd != bck) # 检查large bin是否为空
{
/* Or with inuse bit to speed comparisons */
size |= PREV_INUSE;
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size)
< (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck;
bck = bck->bk;

victim->fd_nextsize = fwd->fd;
victim->bk_nextsize = fwd->fd->bk_nextsize;
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim;
}
...
}


利用原理

victim是将要链入largebin的堆块
fwd是已经进入large bin中比victim较大的堆块

如果largin bin中仅有一个堆块
fwd->fd就指向fwd本身

如果能够控制fwd->bk_nextsize位target_addr,就能向target_addr + 0x20 的位置写入victim的地址

这个0x20是因为c语言中访问结构体对象本质是运用偏移,所以->fd_nextsize相当于+ 0x20

所有largbin attack流程就是:

先使一个堆块进入large bin中,修改其bk_nextsize为target_addr

再使一个比第一个堆块较小的堆块进入large bin即可触发largebin attack

largebin attack通常作为io利用的前置,用于修改_io_list_all为堆块地址,再进行相关io的伪造和利用

  • 标题: 高版本largebin_attack
  • 作者: heart22
  • 创建于 : 2025-08-05 22:48:54
  • 更新于 : 2025-08-05 22:49:48
  • 链接: https://heart22.top/2025/08/05/高版本largebin-attack/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
高版本largebin_attack