2015强网杯pwn之shellman
堆溢出原理
相比栈溢出而言,堆溢出的原理类似,但是堆溢出的利用则更复杂,因为glibc堆管理机制比较复杂。
堆溢出的利用主要围绕在bin中free chunk的合并过程,在两个free chunk的合并过程中,有两次改写地址的机会。例如,对于将要合并的chunk P,在合并发生时,glibc将chunk P从binlist中unlink掉,其中涉及到以下指针操作:
1 | FD = P -> fd; // FD为相对于P下一个chunk的地址 |