前置知识之前有过相关内容

Use After Free 模式化

fastbins类型典型流程

  1. 找到存在Use After Free漏洞的指针x
    • free(x),但没有将x设置为NULL
    • 如果有多个指针,free(x)之后没有将所有的指针设置为NULL
    • x最好是函数指针
    • 或者后面的y是一个函数指针
  2. free(x) # 但x仍然指向堆中的一个chunk
    • 发送会产生free(x)的输入选项
  3. 之后直接y = malloc(size),返回与x相同的chunk
    • 如果能够指定size,只需要与x的size相同就可以
    • 攻击者必须能够向y写入内容
  4. 向y写入内容(相当于写x)
  5. 如果能够使用x就会造成Use After Free
    • 可以将func_ptr修改为任意值

Use After Free后的利用方式

一般是劫持函数指针

  • 调用 system(“/bin/sh”)
  • 需要能够将输入数据作为函数参数

  • 类似system(“/bin/sh”)进行ROP/COP/JOP等

  • 类似system(“/bin/sh”)调用进行ROP/COP/JOP的stager

  • 无法直接指定函数参数,也可以用ppret这种方式执行stack上的ROP
  • heap上也经常使用的JOP/COP

其他的利用方式

x,y不是func_ptr的情况

  • 控制作为字符串使用的成员
    • 消除NULL终止符,泄漏堆和libc(arena相关)的地址
  • 控制作为字符串指针的成员
    • 任意内存的内存泄漏
    • 替换GOT之类的地址
  • 控制作为权限flag的成员
    • 意外的权限提升
  • 控制作为count,size之类的成员
    • stack/heap 溢出
  • 控制作为链表指针的成员
    • 重新连接时可能任意地址写
    • Unlink attack, fastbins unlink attack