Fuzzing101:Exercise 2 - libexif 翻译+解题

Fuzzing101:Exercise 1 - Xpdf 翻译+解题

题目部分翻译

题目链接: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的另一个崩溃。

你将学到什么:

完成本练习后,您将了解如何:

  • 使用外部应用程序对库进行模糊测试
  • 使用afl-clang-lto ,这是一种比afl-clang-fast更快且提供更好结果的无碰撞仪器

环境:

所有的练习都在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

你应该看到类似的东西

Fuzzing101:Exercise 2 - libexif 翻译+解题_第1张图片

种子语料库创建:

现在我们需要获取一些 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

输出应该是这样的:

Fuzzing101:Exercise 2 - libexif 翻译+解题_第2张图片

Afl-clang-lto instrumentation

现在我们将使用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 @@

几分钟后,您应该会遇到多次崩溃:

Fuzzing101:Exercise 2 - libexif 翻译+解题_第3张图片

你可能感兴趣的:(Fuzzing101,安全性测试,测试覆盖率,代码覆盖率)