堆块拓展 攻击 #
目的 : 通过 控制 堆块的size , 从而获得对其他堆块的 读写能力 #
例题 : hitcon_train lab13
-
功能分析 :
- 本题是一个堆分配器
- 创建堆,根据用户输入的长度,申请对应内存空间,并利用 read 读取指定长度内容。这里长度没有进行检测,当长度为负数时,会出现任意长度堆溢出的漏洞。当然,前提是可以进行 malloc。此外,这里读取之后并没有设置 NULL。
- 编辑堆,根据指定的索引以及之前存储的堆的大小读取指定内容,但是这里读入的长度会比之前大 1,所以会存在 off by one 的漏洞。
- 展示堆,输出指定索引堆的大小以及内容。
- 删除堆,删除指定堆,并且将对应指针设置为了 NULL。
- 本题是一个堆分配器
-
利用过程
- 利用 off by one 漏洞 修改chunk size , 并且 构造伪造的chunk 相关的判断条件
- 申请伪造的chunk , 从而利用overlap 修改 下一个chunk的索引堆的指针
- tip :
- 创建堆 不仅仅malloc一个指定size的堆 , 所以 如果伪造的size进入了 unsorted bin,需要考虑 伪造的chunk被切割的情况
-
- free chunk目前需要考虑的判断条件 :
- prev_inuse(next_chunk) # 两轮 即构造后两个chunk
- size 域有合适的大小 (本题中无需考虑,与 double free配合时需要考虑 )
网友评论