AFL学习记录(三)——qemu 模式的测试
今天尝试了一下使用 AFL-qemu 的黑盒测试,这里简单记录一下。
首先需要安装,在目录下的 qemu-mode 文件夹中有构建脚本 build_qemu_support.sh,运行之即可安装。期间可能会出现缺少依赖的情况,缺什么安装什么即可。如果缺乏 libtool,使用 sudo apt install libtool 后仍然可能提示缺少,这是再执行 sudo apt install libtool-bin 即可。

BUU-rootersctf_2019_heaaaappppp-WP
此题的起名吸引了我去做它。题目不难,不过之前从来没有做过 Tcache dup 类的利用,也算是学习了新知识(考虑到这和 fastbin double free 相比除了简单不少之外没有什么区别,其实还是只做了一道水题)。题目有给我一定的困扰,也有考虑放弃去找 WP,但是没找到,就只能自己做了,结果做了出来。这个故事我觉得以后做题还是要更加坚持。

BUU-sleepyHolder_hitcon_2016-WP
不得不说 hitcon 2016 那场比赛的堆题是真的都很牛叉,让我学到了很多东西。这道题和同场比赛中的 secret_holder 有在总体流程上几乎一样,但是利用方式不同。
这个程序除了 double free 之外是没有漏洞的,如何利用这个 double free 呢?之前那道 secret_holder 是通过类似 chunk overlapping 的方法实现 UAF 然后 unlink 的,但是本题的 huge chunk 只能申请一次,然后就完全无法操作了。那么如何实现类似的 UAF 呢?方法比较巧妙,我也很遗憾自己没有想出来。利用的是 malloc_consolidate 函数,我们知道 ptmalloc 在处理 big request 的时候,遍历到 large bin 的时候,会先调用 malloc_consolidate 函数整理碎片,这个时候会把 fastbin 中所有的 bin 先尝试合并,然后放到其对应的 bin 中。而本题可以申请一次 huge chunk,就有了触发 malloc_consolidate 的机会。我们的解法就是申请一个 small secret,再申请一个 big secret,两个 chunk 分别记作 A,B,先 free 掉 A,然后申请 huge secret,在 malloc_consolidate 后,A,本来属于 fastbin,就被收入了 smallbin,其下一个 chunk,也就是 B 的 prev_inuse 位被置为零。