上面的步骤是由脚本中的最后一个malloc(0x1)函数调用触发的,由于前期的堆空间的部署,导致我们劫持了_IO_list_all指针使其指向<main_arena+88>,将其视为_IO_FILE_plus结构体,其_chain
字段指向fake chunk
,即可实现文件结构利用。
实际上是由于在上面的UnsortedBin
整理完毕之后,分配新的空间的时候检测发现当前堆空间的size大小是0,故触发异常,实现调用链
malloc_printerr ==> __libc_message ==> abort ==> _IO_flush_all_lockp ==> __IO_overflow
最后解释为什么fake chunk
需要那样构造,此题目的环境是libc2.24
,此时不能再像之前的直接修改vtable
指针劫持函数,关于构造方法引用大佬的文章: