Fuzz-Exercise-Level1
Fuzzing101 Exercise 1:
这是一个开源的Fuzzing学习的仓库:https://github.com/antonio-morales/Fuzzing101/tree/main/ 里面有十个fuzz相关的练习,适合入门fuzz
10道练习题都是在ubuntu20.04环境下进行的,所以需要先安装一个ubuntu20.04的虚拟机用于本次fuzz学习。它给出了一个ubuntu20.04虚拟机镜像,
下载地址: https://drive.google.com/file/d/1_m1x-SHcm7Muov2mlmbbt8nkrMYp0Q3K/view , 虚拟机用户密码:fuzz
Exercise 1 Xpdf_CVE-2019-13288:
1. 下载并编译fuzz的目标: Xpdf
为要进行模糊测试的项目创建一个新目录:
1 | cd $HOME |
需要安装一些基础的build工具(即 make 和 gcc)。
1 | sudo apt install build-essential |
下载fuzz目标: Xpdf 3.02:
1 | wget https://dl.xpdfreader.com/old/xpdf-3.02.tar.gz |
编译Xpdf:
1 | cd xpdf-3.02 |
下载一个pdf模板用来测试xpdf是否编译成功
1 | cd $HOME/fuzzing_xpdf |
测试Xpdf的其中一个编译产物pdfinfo的正确性
1 | $HOME/fuzzing_xpdf/install/bin/pdfinfo -box -meta $HOME/fuzzing_xpdf/pdf_examples/helloworld.pdf |
如果编译正确,输出结果类似于:
2. 配置AFL++
首先在虚拟机中下载docker:
1 | sudo apt install docker |
由于docker需要配置代理才能拉取外网的docker镜像,所以:
1 | sudo mkdir -p /etc/systemd/system/docker.service.d |
1 | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf >/dev/null <<'EOF' |
此处192.168.65.1是虚拟机的host机的ip地址,7890为clash的端口号。且clash需要打开TUN模式。如果代理配置成功,那么虚拟机中就可以用docker pull拉取AFL++的镜像了:
1 | docker pull aflplusplus/aflplusplus:latest |
4. 运行AFL++对插桩版的Xpdf进行模糊测试:
编译插桩版AFL++:
先clean:
1 | rm -r $HOME/fuzzing_xpdf/install |
在docker中编译插桩版的AFL++:
1 | export LLVM_CONFIG="llvm-config-11" |
运行AFL++:
1 | afl-fuzz -i $HOME/fuzzing_xpdf/pdf_examples/ -o $HOME/fuzzing_xpdf/out/ -s 123 -- $HOME/fuzzing_xpdf/install/bin/pdftotext @@ $HOME/fuzzing_xpdf/output |
5. AFL++的最终测试情况:
6. 用GDB调试第一个crash:
下载gdb:
1 | sudo apt install gdb |
用gdb调试需要编译有符号版本的目标程序(需要加-g选项)
1 | rm -r $HOME/fuzzing_xpdf/install |
在docker中用gdb启动目标程序:
1 | gdb --args $HOME/fuzzing_xpdf/install/bin/pdftotext $HOME/fuzzing_xpdf/out/default/crashes/<your_filename> $HOME/fuzzing_xpdf/output |
最后触发segment fault以后用bt指令查看栈得出结果:
发现调用了很多遍的Parser::getObj根据CVE-2019-13288的文档可以得出确实就是这个bug导致了无限递归
- Title: Fuzz-Exercise-Level1
- Author: zhaojunqi
- Created at : 2026-03-10 16:21:01
- Updated at : 2026-03-11 14:33:08
- Link: https://redefine.ohevan.com/2026/03/10/Fuzz-Exercise-Level1/
- License: This work is licensed under CC BY-NC-SA 4.0.