Heap Overflow
堆概述
在程序运行过程中,可以提供动态分配的内存;由程序本身而非编译器负责申请和分配;实际上是内存空间中一块连续的线性区域;由低地址向高地址方向增长;chunk是堆的最小操作单元。
堆的数据结构
如图,详情见这儿
堆溢出
向某个堆块中写入的字节数超过了堆块本身可使用的字节数,从而导致了数据溢出,并覆盖到物理相邻的高地址的下一个堆块;
写人的字节要超过可使用的字节而不是用户申请的字节,因为堆管理器会进行调整。
于是,覆盖与其物理相邻的下一个chunk,然后利用堆的机制来实现任意地址写入或控制堆块内容,以达到攻击目的。