hitcon_2018_children_tcache

思路

记录一下思路,具体分析可以参考BUUCTF-PWN刷题记录-5(Tcache)
题目保护全开,所以只能靠写 hook 了。题目的漏洞是 strcpy 造成的 null by one 。
具体步骤:

  1. leak libc

    • 分配三个 chunk (0,1,2),通过 null by one 覆盖 chunk2 的 inuse 位。
    • 利用 chunk1 对 chunk2 的 prve size 位空间复用,将prev size 改为 chunk0 + chunk1 的大小。
    • free chunk2 就能得到一个大的空闲 chunk(chunk0 + chunk1 + chunk2)。
    • 再次分配 chunk0 大小的 chunk,chunk2 切割 chunk0 大小后剩下的部分进入 unsorted bin ,此时便在 chunk1 的 fd 处踩出 libc 地址。
    • 打印 chunk1 的内容获得 libc 地址,以此计算 __malloc_hook 与 one_gadget 的地址。
  2. get shell

    • 通过前面的布局,记录 chunk 地址的数组中,chunk_addr[0] 与 chunk_addr[2] 都指向同一个 chunk ,因为 tcache 没有检查,所以我们可以直接 double free 。
    • malloc 一次将 fd 指针改为 __malloc_hook ,这里也是因为 tcache 没有做任何检查,所以可以直接再次 malloc 即可分配到 __malloc_hook 处,然后覆盖 __malloc_hook 为 one_gadget 。
    • 程序中再次调用 __malloc_hook 即可 get_shell 。
posted @ 2020-08-16 20:38  PwnKi  阅读(699)  评论(0编辑  收藏  举报