正常的double free题目。
题目在del的时候没有检查inuse位而直接free内存。可以触发double的利用。然后通过double free将一块正在被使用的内存free掉就是一个uaf。
这里我使用的方法是使用uaf去触发著名的unlink漏洞来完成利用。具体的技术原理可以看我以前写的博客http://libc.pw/2015/08/04/%E5%A0%86%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E7%AE%80%E4%BB%8B/
总的流程是这样的,首先create一块大小为0x1000的内存在index_1的位置然后释放,这样index_1处就有一个野指针,然后再创建一个0x1000的内存在index_0上。这时候0和1都是指向同一个内存的。然后再创建一块内存,防止之后free的chunk被合并到top chunk中。接下来就是在一个次释放index_1。这样虽然index_1指向的内存已经被释放了,但是仍然可以通过edit去修改。
此时内存结构应该是这样的
末尾的pad仅仅用来防止top_chunk的合并。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)