Fuzzing101-exe2
介绍
本文是 Fuzzing101 训练的第二篇,fuzz 对象是 libexif 库,目标是找到 CVE-2009-3895 的崩溃/PoC 和 CVE-2012-2836 的另一个崩溃
- CVE-2009-3895:堆的缓冲区溢出,可以使用无效的 EXIF 图像触发
- CVE-2012-2836:是一个越界读取漏洞,可以通过带有精心制作的 EXIF 标签的图像触发
将会学到的知识
- 对使用了外部库的应用进行 fuzz
- 使用
afl-clang-lto
进行 fuzz,它比afl-clang-fast
的速度更快 - 使用 Eclipse IDE 进行动态调试
流程
- 寻找使用了
libexif
库的应用接口 - 创建 exif 样例的种子语料库
- 使用 afl-clang-lto 编译 libexif 和选择的应用程序
- 对 libexif 进行fuzz
- 对 crash 进行分类过滤,确认每个漏洞的 PoC
- 修复漏洞
环境与搭建
工具还是使用的 AFL++,具体安装在 exe1 中已经写过了,这里就不多赘述了,只说一下 libexif 安装
下载并构建目标
先为项目创建一个文件夹
1 | cd $HOME |
然后就是创建 libexif 环境了(官方给出的 libcxif 版本是 14 版本的,但是我试了很多次 make install 都会报错,看了网上其他师傅的博客发现 15 版本也可以,就直接用了)
1 | # 下载 |
选择接口应用程序
由于 libexif 是一个库,所以还需要一个调用 libexif 库的程序。
1 | # 下载 |
键入指令查看是否安装成功
1 | HOME/fuzzing_libexif/install/bin/exif |
种子语料库创建
因为程序本身的功能就是解析 exif 文件,所以要选取一些 exif 文件作为种子,项目中已经给出了链接地址,只需要下载即可
1 | cd $HOME/fuzzing_libexif |
键入指令查看是否成功
1 | $HOME/fuzzing_libexif/install/bin/exif $HOME/fuzzing_libexif/exif-samples-master/jpg/Canon_40D_photoshop_import.jpg |
Afl-clang-lto 仪表
使用 afl-clang-lto
重新对 libexif 和 exif 进行编译
1 | rm -r $HOME/fuzzing_libexif/install |
Fuzzing
1 | afl-fuzz -i $HOME/fuzzing_libexif/exif-samples-master/jpg/ -o $HOME/fuzzing_libexif/out/ -s 123 -- $HOME/fuzzing_libexif/install/bin/exif @@ |
界面
Debug
exe1 使用的是 gdb 调试,这一次要用 Eclipse IDE 调试
首先要先安装 Eclipse IDE
1 | # 安装Java环境 |
解压完成后,直接运行 eclipse 即可
运行后会有一个界面,直接点 launch 即可
在菜单栏中找到 File->Import,会出现以下界面,选择好 “Existing code as makefile project” 后 next
继续设置
如果一切顺利,应该能够在项目资源管理器选项卡中看到 “exif” 文件夹。
接着是配置调试参数,需要去Run -> Debug Configurations
进行设置。
Argument 中设置好报错文件位置
设置完成后就可以直接 Debug 了,程序会在主函数的开始处停止
再Run -> resume
就可以直接追溯到报错的地方