33c3 CTF | babyfengshui

Author Avatar
Aryb1n 3月 12, 2019

这题…有一个假设就是
省略了读题
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