AdbeRdr
0x00 环境准备
本实验均使用项目自带的虚拟机。
0x01 实验
1.1 环境准备
目录创建
cd $HOME
mkdir fuzzing_adobe && cd fuzzing_adobe
安装afl-qemu
sudo apt install ninja-build libc6-dev-i386
cd ~/Downloads/AFLplusplus/qemu_mode/
CPU_TARGET=i386 ./build_qemu_support.sh
# 安装完把afl-qemu-trace丢到/usr/local/bin下
安装依赖:
sudo apt-get install libxml2:i386
配置编译选项,并编译
./configure --prefix="$HOME/fuzzing_vlc/vlc-3.0.7.1/install" --disable-a52 --disable-lua --disable-qt
make -j$(nproc)
下载并安装AdbeRdr9.5.1-1_i386linux_enu.deb:
wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.1/enu/AdbeRdr9.5.1-1_i386linux_enu.deb
sudo dpkg -i AdbeRdr9.5.1-1_i386linux_enu.deb
# 安装报错就重新安装软件依赖
sudo apt-get install libgtk2.0
sudo apt --fix-broken install
语料库创建。
wget https://corpora.tika.apache.org/base/packaged/pdfs/archive/pdfs_202002/libre_office.zip
unzip libre_office.zip -d extracted
#复制小于2kn的文件加快模糊测试过程
mkdir -p $HOME/fuzzing_adobe/afl_in
find ./extracted -type f -size -2k \
-exec cp {} $HOME/fuzzing_adobe/afl_in \;
重新编译该文件。
make vlc-demux-run -j$(nproc) LDFLAGS="-fsanitize=address"
配置AFL_LLVM_ALLOWLIST告诉哪些部分需要插桩:
wget https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise%207/Partial_instrumentation
重新编译vlc
CC="afl-clang-fast" CXX="afl-clang-fast++" ./configure --prefix="$HOME/fuzzing_vlc/vlc-3.0.7.1/install" --disable-a52 --disable-lua --disable-qt --with-sanitizer=address
AFL_LLVM_ALLOWLIST=$HOME/fuzzing_vlc/vlc-3.0.7.1/Partial_instrumentation make -j$(nproc) LDFLAGS="-fsanitize=address"
构建 fuzzing harness:
cd test
make vlc-demux-run -j$(nproc) LDFLAGS="-fsanitize=address"
cd ..
1.2 FUZZING
1.2.1 第一种
ACRO_INSTALL_DIR=/opt/Adobe/Reader9/Reader ACRO_CONFIG=intellinux LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'/opt/Adobe/Reader9/Reader/intellinux/lib' afl-fuzz -Q -i ./afl_in/ -o ./afl_out/ -t 2000 -- /opt/Adobe/Reader9/Reader/intellinux/bin/acroread -toPostScript @@
对闭源应用程序进行模糊测试的最简单方法就是使用-Q 参数运行 afl-fuzz 。
运行 afl-fuzz 时需要小心,因为它/opt/Adobe/Reader9/bin/acroread是一个 shell 脚本。真正的二进制路径如下/opt/Adobe/Reader9/Reader/intellinux/bin/acroread。
但如果您尝试执行它,您将收到如下错误:acroread must be executed from the startup script。这就是为什么我们需要设置ACRO_INSTALL_DIR和ACRO_CONFIGenvvars。我们还将设置LD_LIBRARY_PATH定义在其中搜索动态可链接库的目录。
1.2.1 第二种
安装 valgrind 和 kcachegrind:
sudo apt-get install valgrind
sudo apt-get install kcachegrind
Valgrind 和 KCacheGrind 是两个与性能分析和调试相关的工具,通常用于检测和解决软件中的内存错误和性能问题。
生成callgrind报告:
ACRO_INSTALL_DIR=/opt/Adobe/Reader9/Reader ACRO_CONFIG=intellinux LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'/opt/Adobe/Reader9/Reader/intellinux/lib' valgrind --tool=callgrind /opt/Adobe/Reader9/Reader/intellinux/bin/acroread -toPostScript [samplePDF]
kcachegrind # 查看
随后开启Fuzzing:
AFL_QEMU_PERSISTENT_ADDR=0x08546A00 AFL_QEMU_PERSISTENT_GPR=1 ACRO_INSTALL_DIR=/opt/Adobe/Reader9/Reader ACRO_CONFIG=intellinux LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'/opt/Adobe/Reader9/Reader/intellinux/lib' afl-fuzz -Q -i ./afl_in/ -o ./afl_out1/ -m none -t 2000 -- /opt/Adobe/Reader9/Reader/intellinux/bin/acroread -toPostScript @@
1.3 FUZZING
1.4 分析
AFL_USE_QASAN=1 ACRO_INSTALL_DIR=/opt/Adobe/Reader9/Reader ACRO_CONFIG=intellinux LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'/opt/Adobe/Reader9/Reader/intellinux/lib' /usr/local/bin/afl-qemu-trace -- /opt/Adobe/Reader9/Reader/intellinux/bin/acroread -toPostScript crash1.pdf
记得crash文件一定要以pdf为后缀。
这里的洞对不上。。。
文章评论