Fuzz-Exercise-Level2

zhaojunqi Lv3

Fuzzing101 exercise 2

这次主要学习了要想fuzz一个库,不但需要编译一下库,还要找到一个使用这个库的程序并把库静态链接进去

本次实验不用docker了,因为感觉一直用docker不太方便,首先配置AFL++:

先装依赖:

1
2
3
4
5
sudo apt update
sudo apt install -y build-essential git make python3-dev automake cmake \
flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo \
libgtk-3-dev lld llvm llvm-dev clang ninja-build cpio libcapstone-dev \
wget curl libpython3-dev gcc git

拉 AFL++:

1
git clone https://github.com/AFLplusplus/AFLplusplus

这个ubuntu版本太老,用apt没法直接下llvm-config-14+,所以用官方给出的安装包安装了一个llvm工具链,版本为20

1
2
3
4
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 20
export LLVM_CONFIG=llvm-config-20

再编译AFL++:

1
2
3
cd AFLplusplus
make source-only
make install

下载并编译Afl-clang-lto插桩版的libexif库(fuzz目标):

1
2
3
4
5
6
7
8
9
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
cd libexif-libexif-0_6_14-release/
sudo apt-get install autopoint libtool gettext libpopt-dev
autoreconf -fvi
export LLVM_CONFIG="llvm-config-11"
CC=afl-clang-lto ./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/"
make
make install

由于 libexif 是一个库,所以需要一个使用这个库的应用程序作为这个fuzz目标的载体,这里的例子是exif:

下载并编译插桩版的exif(使用libexif库):

1
2
3
4
5
6
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
autoreconf -fvi
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

创建初始语料库:

1
2
3
cd $HOME/fuzzing_libexif
wget https://github.com/ianare/exif-samples/archive/refs/heads/master.zip
unzip master.zip

开始Fuzz:

1
afl-fuzz -i $HOME/fuzzing_libexif/exif-samples-master/jpg/ -o $HOME/fuzzing_libexif/out/ -s 123 -- $HOME/fuzzing_libexif/install/bin/exif @@

效果如图所示:

然后这个练习2教了怎么用eclipse图形化界面调试:

下载JAVA SDK:

1
sudo apt install default-jdk

下载eclipse并解压:

1
2
wget https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2021-03/R/eclipse-cpp-2021-03-R-linux-gtk-x86_64.tar.gz
tar -xzvf eclipse-cpp-2021-03-R-linux-gtk-x86_64.tar.gz

然后执行eclipse:

启动 Eclipse 后,进入“文件”->“导入”->,然后选择“C/C++”->“现有代码作为 makefile 项目”。接着我们需要选择“Linux GCC”,并浏览到 Exif 源代码文件夹
进入 Run -> Debug Configurations 。然后我们选择我们的 exif 项目,并浏览到 exif 二进制文件:
接下来,我们需要设置输入参数。为此,进入 "Arguments" 标签页,并设置其中一个 AFL 崩溃的路径。
最后,我们只需点击 "Debug" 即可开始调试会话,程序将在 main 函数的开始处停止。

初步按调用栈的不同分成了下面的5类bug:

  • Title: Fuzz-Exercise-Level2
  • Author: zhaojunqi
  • Created at : 2026-04-10 17:16:17
  • Updated at : 2026-04-10 17:31:17
  • Link: https://redefine.ohevan.com/2026/04/10/Fuzz-Exercise-level2/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments