Off By One
通常的利用思路是覆盖被溢出堆块的下一个堆块size
域的最低一字节,可以扩展堆块,也可以缩减堆块,只是后者对数据构造的要求更高一些
后向扩展
- 这里称被溢出堆块的下一个堆块为target堆块
- 通过
off by one
漏洞可以轻易地让target堆块的size
变大,即可让target包含高地址相邻堆块的内容 - 后续的利用可以配合
UAF
,Unlink
攻击的利用
例题:
Off By Null
- 仍然存在单字节溢出,只是溢出的值为
'\0'
,可以缩减堆块 - 更常规地是将target堆块的
prev_inuse
比特清零,达到伪造被溢出堆块被free的状态 - 后续构造
prev_size
和fake_chunk进行unlink
攻击,从而达到堆块重叠