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