Fuzzing101:Exercise 5 - LibXML2 翻译+解题
题目链接:https://github.com/antonio-morales/Fuzzing101/tree/main/Exercise%205
在本次练习中,我们将对LibXML2 XML 解析库进行模糊测试。目标是在 LibXML2 2.9.4 中找到CVE-2017-9048的崩溃/PoC 。
你将学到什么:
完成本练习后,您将了解如何:
- 使用自定义字典(或现有字典)帮助模糊器找到新的执行路径
- 多核并行模糊测试工作
有关字典的知识,可以去看我的这篇文章:AFL的字典
下载并构建目标:
让我们首先得到我们的fuzzing目标。为您想要fuzzing的项目创建一个新的目录
cd $HOME
mkdir Fuzzing_libxml2 && cd Fuzzing_libxml2
下载并解压libxml2 - 2.9.4.tar.gz
wget http://xmlsoft.org/download/libxml2-2.9.4.tar.gz
tar xvf libxml2-2.9.4.tar.gz && cd libxml2-2.9.4/
构建并安装libxml2:
sudo apt-get install python-dev
CC=afl-clang-lto CXX=afl-clang-lto++ CFLAGS="-fsanitize=address" CXXFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address" ./configure --prefix="$HOME/Fuzzing_libxml2/libxml2-2.9.4/install" --disable-shared --without-debug --without-ftp --without-http --without-legacy --without-python LIBS='-ldl'
make -j$(nproc)
make install
种子语料库的构建
首先,我们需要获取一些 XML 样本。我们将使用此存储库中提供的SampleInput.xml:
mkdir afl_in && cd afl_in
wget https://raw.githubusercontent.com/antonio-morales/Fuzzing101/main/Exercise%205/SampleInput.xml
cd ..
自定义字典
现在,需要创建一个XML字典。或者,使用AFL++提供的字典(这里我们使用的就是AFL++提供的字典):
mkdir dictionaries && cd dictionaries
wget https://raw.githubusercontent.com/AFLplusplus/AFLplusplus/stable/dictionaries/xml.dict
cd ..
模糊测试:
官方教程使用了多核并行模糊测试:
afl-fuzz -m none -i ./afl_in -o afl_out -s 123 -x ./dictionaries/xml.dict -D -M master -- ./xmllint --memory --noenc --nocdata --dtdattr --loaddtd --valid --xinclude @@
afl-fuzz -m none -i ./afl_in -o afl_out -s 234 -S slave1 -- ./xmllint --memory --noenc --nocdata --dtdattr --loaddtd --valid --xinclude @@