这个漏洞触发于fastbin上

触发的原因在于fastbin释放的时候并不处理pre_inuse位

而且free的时候只校验main_area指向的fastbin第一个节点

所以可以这样利用

malloc(A)

malloc(B)

free(A)

free(B)

free(A)

这样导致了main_area → A → B → A → B…

利用方式:

申请A,然后修改A的fd(因为此时fd在用户区里

然后链表就会变成了main_area → B → A → target

依次申请内存区块就好了

注意fastbin申请的时候会校验在fastbin里面的pre_inuse位需要为1