文章预览
在最近的WKCTF2024中,遇到了一道简单题目easy_heap。 但是偶然间发现在以下条件满足时的一种利用方法: 1.不能释放chunk(无free)。 2.可以申请、编辑和输出多个chunk(add, edit, show)。 3.存在堆溢出。 在此情况下,可以通过house of orange的进一步利用。这里简记为house of range+。 一 原理 概述 在house of orange中,我们经常利用修改topchunk的大小来获得一个unsorted bin,本质上是触发了_int_malloc在use_top段调用的sysmalloc: use_top: victim = av->top; size = chunksize (victim); /*如果可以,就切割topchunk,返回被切下的chunk*/ if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE)) {...} /* 如果topchunk大小不足,则尝试触发malloc_consolidate,合并fastbin */ else if (have_fastchunks (av)) {...} /*如果上述情况都不满足需求,则触发sysmalloc*/ else { void *p = sysmalloc (nb, av);
………………………………