Fuzz101_libtiff

项目搭建

获取项目

1
2
3
4
5
6
cd $HOME
mkdir fuzz_libtiff && cd fuzz_libtiff

wget https://download.osgeo.org/libtiff/tiff-4.0.4.tar.gz
tar -zxvf tiff-4.0.4.tar.gz
cd $HOME/fuzz_libtiff/tiff-4.0.4

正常编译

1
2
3
4
cd $HOME/fuzz_libtiff/tiff-4.0.4
./configure --prefix="$HOME/fuzz_libtiff/install/"
make
make install

添加lcov重新构建

1
2
3
4
sudo apt install lcov
CFLAGS="--coverage" LDFLAGS="--coverage" ./configure --prefix="$HOME/fuzz_libtiff/install/" --disable-shared
make
make install

收集覆盖率数据

1
2
3
4
5
6
cd $HOME/fuzz_libtiff/tiff-4.0.4/
lcov --zerocounters --directory ./ #重置以前的计数器
lcov --capture --initial --directory ./ --output-file app.info #返回“基线”覆盖率数据文件,该文件包含每条检测线的零覆盖率
$HOME/fuzz_libtiff/install/bin/tiffinfo -D -j -c -r -s -w $HOME/fuzz_libtiff/tiff-4.0.4/test/images/palette-1c-1b.tiff #运行要分析的应用程序。您可以使用不同的输入多次运行它
lcov --no-checksum --directory ./ --capture --output-file app2.info:将当前覆盖状态保存到 app2.info 文件中
genhtml --highlight --legend -output-directory ./html-coverage/ ./app2.info #生成 HTML 输出

使用afl-lto构建

1
2
3
4
5
6
7
8
rm -r $HOME/fuzz_libtiff/install
cd $HOME/fuzz_libtiff/tiff-4.0.4/
make clean
export LLVM_CONFIG="llvm-config-11"
CC=afl-clang-lto ./configure --prefix="$HOME/fuzz_libtiff/install/" --disable-shared
AFL_USE_ASAN=1 make -j4
AFL_USE_ASAN=1 make install
afl-fuzz -m none -i $HOME/fuzz_libtiff/tiff-4.0.4/test/images/ -o $HOME/fuzz_libtiff/out/ -s 123 -- $HOME/fuzz_libtiff/install/bin/tiffinfo -D -j -c -r -s -w @@

本地构建

1
CFLAGS="-g -O0" ./configure --prefix="$HOME/fuzz_libtiff/install/" --disable-shared

crashes分析

使用ASAN分析
avatar
正常编译后使用tiffinfo运行crashes,如图
avatar
到这一步基本就可以直接交cve了,如果想要实现利用可以再深入调试一下