记录winafl对qtcore.dll的一次fuzz尝试
主要还是看到了CVE-2020-25291 - Kingsoft WPS Office Remote Heap Corruption Vulnerability这篇文章,于是乎想试试使用winafl来fuzz,恰好有师傅在安全客上发了一篇相关的文章:一次对WPS漏洞挖掘的尝试
借此来自己尝试一下
安装winafl
可以参考这篇文章:手把手教你 | 漏洞挖掘系列之WinAFL从安装到使用
安装步骤一步步来,没啥大问题,不过我原先就折腾完这个winafl的安装了,要是早点看到这篇文章就能省点时间
寻找fuzz点
根据文章CVE-2020-25291 - Kingsoft WPS Office Remote Heap Corruption Vulnerability里的栈回溯和文章的分析
1 | 0:000> !heap -p -a cc53afbc |
可以看到奔溃的地方应该是在QtCore4.dll里的QImageReader::read函数,这个应该就是fuzz的目标函数了,在fuzz前还需要了解下QtCore的编程API是怎么调用的
编写fuzz代码
根据一次对WPS漏洞挖掘的尝试文章里的思路,我修改了下fuzz的代码:
1 |
|
我下载的wps版本是11.2.0.9453的,然后几个函数的偏移也是根据ida里的分析结果来修改的,编译好后用afl-fuzz进行fuzz就行
fuzz效果:
踩坑
- 如一次对WPS漏洞挖掘的尝试文章里所说,我们要调用Qfile的close方法来把文件给关闭
- 重新使用最新的DynamoRIO编译下winafl
- LoadLibrary相对应dll的时候,如果一直失败,可能是缺了该dll的依赖文件
总的来说,是一次宝贵的经验,虽然折腾了很久
参考链接
- 一次对WPS漏洞挖掘的尝试 https://www.anquanke.com/post/id/240938
- CVE-2020-25291 - Kingsoft WPS Office Remote Heap Corruption Vulnerability http://zeifan.my/security/rce/heap/2020/09/03/wps-rce-heap.html
- 手把手教你 | 漏洞挖掘系列之WinAFL从安装到使用https://www.anquanke.com/post/id/210457
- vc 定位dll 内存占用_内存Fuzz与WINAFL实战 https://blog.csdn.net/weixin_39644377/article/details/111333460