很久没写博客了,现在有空更新一下吧
最近在做hitcon 2017的题,碰到一题是利用unsorted bin attack 攻击到stdin的struct上面的,但是利用方法怎么也想不到
于是看了下题解,发现利用了malloc_consolidate,于是去看下源码,找下这个函数被调用的条件,因为我们在一般的pwn里面只有malloc和free,所以我只讲一下在这两个函数里面触发的条件
1. malloc large bin
具体的代码如下,假如malloc的size大于small bin的范围,先调用malloc_consolidate将fastbin 合并为unsorted bin
2. top chunk不够空间
下面是简单的测试代码
1 | #include <stdio.h> |
下面是源代码
3. 在free函数在各种合并前后chunk之后的size大于FASTBIN_CONSOLIDATION_THRESHOLD 也就是65536
比较容易实现的是与top chunk合并后size大于FASTBIN_CONSOLIDATION_THRESHOLD 具体大概是下面的流程
- 判断chunk是否属于fastbin,如果不是,继续
- 判断chunk是否属于map的,如果不是,继续
- 假如下一个chunk是top chunk,合并
- 判断当前chunk的size是否大于FASTBIN_CONSOLIDATION_THRESHOLD,假如大于,调用malloc_consolidate
测试代码如下
1 | #include <stdio.h> |
这里是源码,上面的红框是合并top chunk,下面的是判断条件调用malloc_consolidate