33c3 CTF | babyfengshui
这题…有一个假设就是
省略了读题
desc 和 user 是挨着的, 所以设置了验证
if ((uint32_t) store[idx]->desc + sz >= (uint32_t) store[idx] - 4) {
...
}
而关键就是打破这个假设
直接学了一下wp
http://bruce30262.logdown.com/posts/1256093-33c3-ctf-2016-babyfengshui
这一篇的wp是. desc是fastbin大小..free掉一个user, 会出现一个fastbin(desc)和一个unsorted(user数据结构,大小0x80), 然后申请一个带有0x80大小的desc的user..由于题目逻辑是先malloc出来的给desc…所以desc就占有了之前user的这块内存
大致先记录一下…回头看,现在先吃饭
还有一种做法
https://firmianay.gitbooks.io/ctf-all-in-one/content/doc/6.1.20_pwn_33c3ctf2016_babyfengshui.html
就是desc是和user同大小0x80…然后删掉一个user…那么由于是smallbin, 所以会合并然后进入到unsorted里…那么下次再申请一个0x100的desc, 就能这个合并过后的分出来了
之后再继续学习
todo: xnuca note