这题的难点在于,所有的写入操作都在末尾处补零了,且size计算合理不存在off by null漏洞,free也伴随了正确的指针清零操作,所以常见的堆利用三板斧:UAF、堆溢出、off by null均无法正常实现,且无法通过程序读功能泄露基地址(强制写入,且写入必补零) 因此,此题并非为简单的堆利用,而是一套组合漏洞,漏洞的根源来自于当malloc时并未清空内存中的数据 这意味着,如果通过malloc->edit->free->malloc 就能控制user中0x70偏移的bio指针,再通过user_menu实现对于任意地址的读/写操作 回顾register最后的逻辑 其向堆中写入了堆地址,这在后续的内存中会有大用,我们通过调试来看这道题的利用思路