题目链接:https://github.com/antonio-morales/Fuzzing101/tree/main/Exercise%202
大佬不同解题思路:Fuzzing101-2:libexif
这次我们将对libexif EXIF 解析库进行模糊测试。目标是在 libexif 0.6.14 中找到CVE-2009-3895的崩溃/PoC 和CVE-2012-2836的另一个崩溃。
完成本练习后,您将了解如何:
所有的练习都在Ubuntu 20.04.2 LTS上进行了测试。强烈建议您使用相同的操作系统版本,以避免不同的模糊结果。
让我们首先得到我们的fuzzing目标。为您想要fuzzing的项目创建一个新的目录
cd $HOME
mkdir fuzzing_libexif && cd fuzzing_libexif/
下载并解压libexif-0.5.14:
wget https://github.com/libexif/libexif/archive/refs/tags/libexif-0_6_14-release.tar.gz
tar -xzvf libexif-0_6_14-release.tar.gz
构建并安装libexif:
cd libexif-libexif-0_6_14-release/
sudo apt-get install autopoint libtool gettext libpopt-dev
autoreconf -fvi
./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/"
make
make install
由于 libexif 是一个库,因此我们需要另一个使用该库的应用程序,并且该应用程序将被模糊化。对于此任务,我们将使用exif 命令行。
PS:如何调试的是库,需要调用接口进行fuzz
①自己写/找一个harness,然后编译链接
②直接找调用了库文件的应用,本题就采用该方法
输入以下命令下载并解压缩 exif 命令行 0.6.15:
cd $HOME/fuzzing_libexif
wget https://github.com/libexif/exif/archive/refs/tags/exif-0_6_15-release.tar.gz
tar -xzvf exif-0_6_15-release.tar.gz
现在,我们可以构建并安装 exif 命令行实用程序:
cd exif-exif-0_6_15-release/
autoreconf -fvi
./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/" PKG_CONFIG_PATH=$HOME/fuzzing_libexif/install/lib/pkgconfig
make
make install
要测试一切是否正常工作,只需键入:
$HOME/fuzzing_libexif/install/bin/exif
你应该看到类似的东西
现在我们需要获取一些 exif 样本。我们将使用以下存储库中的示例图像: https: //github.com/ianare/exif-samples。您可以通过以下方式下载:
cd $HOME/fuzzing_libexif
wget https://github.com/ianare/exif-samples/archive/refs/heads/master.zip
unzip master.zip
举个例子,我们可以这样做:
$HOME/fuzzing_libexif/install/bin/exif $HOME/fuzzing_libexif/exif-samples-master/jpg/Canon_40D_photoshop_import.jpg
输出应该是这样的:
现在我们将使用afl-clang-lto作为编译器来构建 libexif:
rm -r $HOME/fuzzing_libexif/install
cd $HOME/fuzzing_libexif/libexif-libexif-0_6_14-release/
make clean
export LLVM_CONFIG="llvm-config-11"
CC=afl-clang-lto ./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/"
make
make install
cd $HOME/fuzzing_libexif/exif-exif-0_6_15-release
make clean
export LLVM_CONFIG="llvm-config-11"
CC=afl-clang-lto ./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/" PKG_CONFIG_PATH=$HOME/fuzzing_libexif/install/lib/pkgconfig
make
make install
现在,您可以使用以下命令运行模糊器:
afl-fuzz -i $HOME/fuzzing_libexif/exif-samples-master/jpg/ -o $HOME/fuzzing_libexif/out/ -s 123 -- $HOME/fuzzing_libexif/install/bin/exif @@
几分钟后,您应该会遇到多次崩溃: