Fuzzing101 exercise 2 这次主要学习了要想fuzz一个库,不但需要编译一下库,还要找到一个使用这个库的程序并把库静态链接进去
本次实验不用docker了,因为感觉一直用docker不太方便,首先配置AFL++:
先装依赖: 1 2 3 4 5 sudo apt updatesudo 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.shsudo ./llvm.sh 20export LLVM_CONFIG=llvm-config-20
再编译AFL++: 1 2 3 cd AFLplusplusmake 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-devautoreconf -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_libexifwget 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: