hu1y40's blog

hu1y40'blog
天堂的穹空遍布地狱之火的颜色,但也是天堂。
  1. 首页
  2. FUZZ
  3. 正文

Fuzzing101 4~6

2023年10月7日 1262点热度 0人点赞 0条评论

libtiff

0x00 环境准备

本实验均使用项目自带的虚拟机。

0x01 实验

1.1 环境准备

目录创建

cd $HOME
mkdir fuzzing_tiff && cd fuzzing_tiff/

下载tiff-4.0.4

wget https://download.osgeo.org/libtiff/tiff-4.0.4.tar.gz
tar -xzvf tiff-4.0.4.tar.gz

配置编译选项,并编译

CFLAGS="--coverage" LDFLAGS="--coverage" ./configure --prefix="$HOME/fuzzing_tiff/install/" --disable-shared

使用lcov获取信息

lcov --zerocounters --directory ./
# 在这个命令中,--zerocounters选项表示将代码覆盖率计数器重置为零,--directory ./表示指定当前目录为代码覆盖率信息的收集目录。
lcov --capture --initial --directory ./ --output-file app.info
# 在这个命令中,--capture选项表示收集代码覆盖率信息,--initial选项表示执行初始采样,这通常用于在测试开始前收集初始的代码覆盖率信息,--directory ./表示指定当前目录为代码覆盖率信息的收集目录,--output-file app.info表示将收集到的代码覆盖率信息保存到名为 app.info 的文件中。
$HOME/fuzzing_tiff/install/bin/tiffinfo -D -j -c -r -s -w $HOME/fuzzing_tiff/tiff-4.0.4/test/images/palette-1c-1b.tiff
lcov --no-checksum --directory ./ --capture --output-file app2.info

genhtml --highlight --legend -output-directory ./html-coverage/ ./app2.info
# 生成html输出

fig:

随后重新编译,使用ASAN模糊测试。

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

1.2 FUZZING

fig:

1.3 分析

博客有更详细的

libxml2

0x00 环境准备

本实验均使用项目自带的虚拟机。

0x01 实验

1.1 环境准备

目录创建

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样本下载:

mkdir afl_in && cd afl_in
wget https://raw.githubusercontent.com/antonio-morales/Fuzzing101/main/Exercise%205/SampleInput.xml
cd ..

自定义字典:

mkdir dictionaries && cd dictionaries
wget https://raw.githubusercontent.com/AFLplusplus/AFLplusplus/stable/dictionaries/xml.dict
cd ..

1.2 FUZZING

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 @@

fig:

1.3 分析

没有fuzz出crashCVE-2017-9048,有个无限循环。

fig:

样本是这样的,怀疑是对<的解析造成的。

fig:

SAX2.c的605行会进入一个循环。

fig:

cur = (const xmlChar *) 0x5555556b25c0 "<!DOCTYPE a SYSTEM \"<!DCOTYQE a", '<' <repeats 169 times>...

fig:

这个循环中会不断parse <这一个元素。但是并不会造成进行栈分配。只是移动cur指针。

多跟踪了几次,发现本质上是xml文档的多次处理,每次会重新处理一遍文档内容,然后每一次处理ctxt->depth会增加一次(1024次会跳出,或者到达了40次并且不处理huge xml)。

fig:

看这个堆栈推测就是创建了很多个解析外部实体的解析器,然后每一次解析又把该文档重新解析了一遍,从而导致了递归的调用,最后到达了1024的阈值就return了(或者到达了40并且不处理huge xml)。

一轮的循环如下。

创建新的解析器,解析到文档发现了最开始的<,执行xmlParseElement函数,使用新的解析器(其实最开始的是xmlParseContent不过没什么关系,)。

fig:

查到一个类似的漏洞,但是那个是无限递归,这个递归40次或1024次就跳出了。

https://www.cve.org/CVERecord?id=CVE-2017-16932

fig:

GIMP

0x00 环境准备

本实验均使用项目自带的虚拟机。

0x01 实验

1.1 环境准备

目录创建

cd $HOME
mkdir Fuzzing_gimp && cd Fuzzing_gimp

下载并解压 gegl-0.2.0

wget https://download.gimp.org/pub/gegl/0.2/gegl-0.2.0.tar.bz2
tar xvf gegl-0.2.0.tar.bz2 && cd gegl-0.2.0

更改源代码

sed -i 's/CODEC_CAP_TRUNCATED/AV_CODEC_CAP_TRUNCATED/g' ./operations/external/ff-load.c
sed -i 's/CODEC_FLAG_TRUNCATED/AV_CODEC_FLAG_TRUNCATED/g' ./operations/external/ff-load.c

构建gegl:

./configure --enable-debug --disable-glibtest --without-vala --without-cairo --without-pango --without-pangocairo --without-gdk-pixbuf --without-lensfun --without-libjpeg --without-libpng --without-librsvg --without-openexr --without-sdl --without-libopenraw --without-jasper --without-graphviz --without-lua --without-libavformat --without-libv4l --without-libspiro --without-exiv2 --without-umfpack
make -j$(nproc)
sudo make install
这里会构建有一些问题
直接sudo apt install libgegl-0.4-0

下载解压GIMP 2.8.16:

cd ..
wget https://mirror.klaus-uwe.me/gimp/pub/gimp/v2.8/gimp-2.8.16.tar.bz2
tar xvf gimp-2.8.16.tar.bz2 && cd gimp-2.8.16/

构建GIMP:

CC=afl-clang-lto CXX=afl-clang-lto++ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/Fuzzing_gimp/gegl-0.2.0/ CFLAGS="-fsanitize=address" CXXFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address" ./configure --disable-gtktest --disable-glibtest --disable-alsatest --disable-nls --without-libtiff --without-libjpeg --without-bzip2 --without-gs --without-libpng --without-libmng --without-libexif --without-aa --without-libxpm --without-webkit --without-librsvg --without-print --without-poppler --without-cairo-pdf --without-gvfs --without-libcurl --without-wmf --without-libjasper --without-alsa --without-gudev --disable-python --enable-gimp-console --without-mac-twain --without-script-fu --without-gudev --without-dbus --disable-mp --without-linux-input --without-xvfb-run --with-gif-compression=none --without-xmc --with-shm=none --enable-debug --prefix="$HOME/Fuzzing_gimp/gimp-2.8.16/install"
make -j$(nproc)
make install

1.2 FUZZING

cd ..
rm ./install/lib/gimp/2.0/plug-ins/*
ASAN_OPTIONS=detect_leaks=0,abort_on_error=1,symbolize=0 afl-fuzz -i './afl_in' -o './afl_out' -D -t 100 -- ./install/bin/gimp-console-2.8 --verbose -d -f @@

会出现超时,更改-t的值即可。

fig:

1.3 分析

没有fuzz出crashCVE-2016-4994,有个内存耗尽的hang。

这个太明显了,不分析数据来源了。

fig:

看了一下有没有类似的洞,vuldb上没找到老版本的,但是新版本有个CVE-2022-30067与其类似。

1.4 总结

本次使用持久模式对目标代码进行一系列的更改。正厂模式下,对于每一个生成的测试文件都会fork出一个新的目标进程进行处理,大量的fork会带来一定的开销。为此在持久模式下,每次fork得到的进程会对一批测试文将进行处理。不过使用持久模式,需要注意在循环中完成环境的重置、资源的释放,以避免初始状态错误或者资源耗尽的问题。

标签: FUZZ 合集 漏洞
最后更新:2023年10月7日

hu1y40

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • libtiff
    • 0x00 环境准备
    • 0x01 实验
      • 1.1 环境准备
      • 1.2 FUZZING
      • 1.3 分析
  • libxml2
    • 0x00 环境准备
    • 0x01 实验
      • 1.1 环境准备
      • 1.2 FUZZING
      • 1.3 分析
  • GIMP
    • 0x00 环境准备
    • 0x01 实验
      • 1.1 环境准备
      • 1.2 FUZZING
      • 1.3 分析
      • 1.4 总结

分类目录

  • 0day安全
  • Bypass
  • C++Prime
  • CTF
  • DoS
  • DoS
  • FUZZ
  • iot
  • JSONP
  • MISC
  • MISC
  • PHP伪协议
  • Python
  • REVERSE
  • sqli-labs
  • SQL注入
  • Trick
  • UAF
  • WEB
  • WEB
  • XXE
  • 书籍阅读
  • 二进制
  • 代码阅读
  • 信息搜集
  • 信息泄露
  • 加密与解密
  • 双重释放漏洞
  • 反序列化
  • 命令执行
  • 命令执行
  • 堆溢出
  • 密码学
  • 弱加密
  • 提权漏洞
  • 整数溢出
  • 文件上传
  • 未分类
  • 栈溢出
  • 格式化字符串漏洞
  • 模型
  • 汇编语言
  • 渗透测试
  • 漏洞分析
  • 漏洞利用
  • 漏洞战争
  • 漏洞挖掘
  • 病毒分析
  • 越界读取
  • 路径遍历
  • 逻辑漏洞
  • 配置不当
  • 钓鱼
  • 靶场
最新 热点 随机
最新 热点 随机
加密算法 2023年度总结 RTSPServer StackOverflow Vulnerability FUZZ 总览篇 MP4Box 无限循环漏洞 CVE-2023-40477 Winrar RCE漏洞分析
bugku 闪的好快 bugku Linux 加密算法 C++ Prime PyPI恶意存储库fshec2攻击分析 MP4Box 无限循环漏洞

COPYRIGHT © 2023 hu1y40's blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备2021009673号-1