gyctf_2020_signin

这道题看了pwn_ki师傅的博客园,才知道一些calloc和tache的机制

exp就没放了  直接去看pwnki师傅的把

前置知识点

calloc 有以下特性

  • 不会分配 tcache chunk 中的 chunk 。

tcache 有以下特性

  • 在分配 fastbin 中的 chunk 时若还有其他相同大小的 fastbin_chunk 则把它们全部放入 tcache 中。

思路

题目给了 backdoor 函数,只要全局变量 ptr 中有值,就会执行 system("/bin/sh") ,所以我们解题思路很明确,就是往 ptr 中填值。具体步骤如下:

  1. 首先分配 8 个 0x80 大小的 chunk ,依次 free 掉,这样 tcache 中 0x80 的 chunk 列表已经被填满,还多了一个 0x80 的 chunk 在 fast bin 中。
  2. 分配一个 0x80 大小的 chunk ,这个 chunk 会从 tcache 中取出,这一步的目的是为了在 tcache 留出空位。
  3. 类似 fastbin attack ,将 fastbin 里的 chunk 的 fd 指针改为 ptr - 0x10 处,这样 calloc 将这个 chunk 分配出去时,就会认为 fd 指针对应的也是一个 chunk ,会把这个 chunk 放入 tcache ,而 tcache 中是以 fd 指针连接的,这样 ptr 的值就会被修改为某个 fd 的指针。这样我们就能执行 system('/bin/sh') 拿 shell 了。

转自https://www.cnblogs.com/luoleqi/p/13473995.html

pwnki师傅的

原文地址:https://www.cnblogs.com/pppyyyzzz/p/14208806.html