libtiff
0x00 环境准备
本实验均使用项目自带的虚拟机。
0x01 实验
1.1 环境准备
目录创建
cd $HOME
mkdir fuzzing_vlc && cd fuzzing_vlc
下载vlc-3.0.7.1
wget https://download.videolan.org/pub/videolan/vlc/3.0.7.1/vlc-3.0.7.1.tar.xz
tar -xvf vlc-3.0.7.1.tar.xz && cd vlc-3.0.7.1/
安装依赖:
sudo apt-get install git build-essential
sudo apt-get install pkg-config libtool automake
sudo apt-get install autopoint gettext
sudo apt-get install libxcb-shm0-dev libxcb-xv0-dev
sudo apt-get install libxcb-keysyms1-dev libxcb-randr0-dev
sudo apt-get install libxcb-composite0-dev
sudo apt-get --no-install-recommends build-dep vlc
# 一般source.list 会把deb-src注释掉,记得去掉注释
配置编译选项,并编译
./configure --prefix="$HOME/fuzzing_vlc/vlc-3.0.7.1/install" --disable-a52 --disable-lua --disable-qt
make -j$(nproc)
下载样本
wget https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise%207/InputCorpus/short2.wmv
wget https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise%207/InputCorpus/veryshort.wmv
对函数进行patch以使用持久模式。
wget https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise%207/fuzzing_harness.patch
patch -p1 < ./fuzzing_harness.patch
# 在这里,-p1 表示去掉补丁文件中的第一级目录路径。< path/to/patchfile.patch 表示从文件中读取补丁内容。
重新编译该文件。
make vlc-demux-run -j$(nproc) LDFLAGS="-fsanitize=address"
配置AFL_LLVM_ALLOWLIST告诉哪些部分需要插桩:
wget https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise%207/Partial_instrumentation
重新编译vlc
CC="afl-clang-fast" CXX="afl-clang-fast++" ./configure --prefix="$HOME/fuzzing_vlc/vlc-3.0.7.1/install" --disable-a52 --disable-lua --disable-qt --with-sanitizer=address
AFL_LLVM_ALLOWLIST=$HOME/fuzzing_vlc/vlc-3.0.7.1/Partial_instrumentation make -j$(nproc) LDFLAGS="-fsanitize=address"
构建 fuzzing harness:
cd test
make vlc-demux-run -j$(nproc) LDFLAGS="-fsanitize=address"
cd ..
1.2 FUZZING
-t参数根据配置来
afl-fuzz -t 100 -m none -i './afl_in' -o './afl_out' -x asf_dictionary.dict -D -M master -- ./test/vlc-demux-run @@
结果是我启动fuzzing即崩溃,后来加选项忽略了问题,启动了,但是我感觉这不是正确的解决方法。
1.3 分析
由于虚拟机崩了没保存crash,且我跑了好多天只有hangs,个人认为只是超时设置的原因,所以不做分析了,读完afl源码再回来看看。
文章评论