fastbin attack
type
status
date
slug
tags
summary
category
icon
password
glibc 2.23
fastbin_dup
首先看代码:
可以看一下三次fastbin后的结果:
一个top chunk和三个chunk
free a → b → a以后:
这里得慢慢学着直接看内存
free第一个a时,内存没有改变,但fastbins的链子加入了a的地址:
free a→ b→ a后,虽然已经加入bins,但prev_inuse位并没有被清除
注意,前面的0x20代表的是大小(fastbins最小为32bytes,需要16bytes的元数据)
结合源码看看:
check_inuse_chunk(av, p);
对应这里的 prev_inuse (p);
#define prev_inuse(p) ((p)->size & PREV_INUSE)
即,这里只检查了prev_inuse位,但没有在free后将prev_inuse置空
再malloc a b c,实则没变,abc从bins里面获取了,即a、c申请到的地址相同
fastbin 实现地址写
注意会有check,不能乱写
进源码看到这里,这里是对于bins的组织方式,可以计算得出0x7f在0x70的链中,而.plt.got中又有较多0x7f,便于构造(注意:堆块大小并不是输入malloc的大小,要加上两个指针大小)
上一篇
unsorted bin attack
下一篇
house of spirit
Loading...