hu1y40's blog

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

Fuzzing101 1~3

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

xpdf

0x00 环境准备

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

0x01 实验

1.1 环境准备

目录创建

cd $HOME
mkdir fuzzing_xpdf && cd fuzzing_xpdf/

安装依赖

sudo apt install build-essential

下载Xpdf3.02

wget https://dl.xpdfreader.com/old/xpdf-3.02.tar.gz
tar -xvzf xpdf-3.02.tar.gz

构建Xpdf

cd xpdf-3.02
sudo apt update && sudo apt install -y build-essential gcc
./configure --prefix="$HOME/fuzzing_xpdf/install/"
make
make install

libexif

0x00 环境准备

0x01 实验

1.1 环境准备

目录创建

cd $HOME
mkdir fuzzing_libexif && cd fuzzing_libexif/

安装依赖

cd libexif-libexif-0_6_14-release/
sudo apt-get install autopoint libtool gettext libpopt-dev
autoreconf -fvi
./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/"
make
make install

下载libexif0.6.14

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

然后安装exif0.6.15

cd $HOME/fuzzing_libexif
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
cd exif-exif-0_6_15-release/
autoreconf -fvi
./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/" PKG_CONFIG_PATH=$HOME/fuzzing_libexif/install/lib/pkgconfig
make
make install

语料库获取

cd $HOME/fuzzing_libexif
wget https://github.com/ianare/exif-samples/archive/refs/heads/master.zip
unzip master.zip

1.2 FUZZING

1.3 分析

bt进行栈回溯。

fig:

发现最后两个函数是exif_loader_get_data和exif_data_load_data。分别打断点。重新run一边。

前两个函数exif_data_new_mem和exif_data_log都正常执行了,所以跟进exif_data_load_data里看看。

到了offset函数的时候注意一下。值明显很大,不正常。

fig:

随后offset+6+2 > ds这里产生了溢出。

fig:

最后data基址+offset的buff进行访问的时候出现了错误。

fig:

offset来源于exif_get_slong函数,函数将一块内存地址转换成32位无符号整数。

fig:

其对应的内存是

fig:

也就是解析TIFFheader,获取第一个IFDhader偏移量的地方,具体可以去看Exif结构。

文件中是偏移0x22处。如果该处数据是0xFFFFFFF8~0xFFFFFFFF也就是[-8,0)就会触发该漏洞。

fig:

以上是CVE-2012-2836。

关于CVE-2009-3895,笔者想换种方式去调试。

所以选择了eclipse。

安装如下:

sudo apt install default-jdk
tar -xzvf eclipse-cpp-2021-03-R-linux-gtk-x86_64.tar.gz

随后导入项目 File -> Import ->Existing code as makefile project

fig:

随后选择Linux GCC并选择exif的源文件夹。

fig:

在之后配置一下debug configuration。Run -> Debug Configurations

fig:

argument选择crash文件。

fig:

然后查看一下崩溃的点,这里访问[rsi]报错。

fig:

按理说堆栈应该如此,但是由于不知名原因,笔者的符号表似乎未识别完全,无法记录exif_entry_fix函数,并且打不进去断点。

fig:

exif_get_long传入buf为e->data + i *exif_format_get_size (EXIF_FORMAT_LONG),查看e->data是正常的那么问题就出现在

i *exif_format_get_size (EXIF_FORMAT_LONG)上,后者是一个定值,那么问题就出现在i上,i<e->componets,所以查看e->componets。

fig:

查看源头并查看e->componets的值,这里可以去文件对应看一下。

fig:

fig:

libexif

0x00 环境准备

0x01 实验

1.1 环境准备

目录创建

cd $HOME
mkdir fuzzing_tcpdump && cd fuzzing_tcpdump/

安装依赖

cd libexif-libexif-0_6_14-release/
sudo apt-get install autopoint libtool gettext libpopt-dev
autoreconf -fvi
./configure --enable-shared=no --prefix="$HOME/fuzzing_libexif/install/"
make
make install

下载tcpdump-4.9.2

wget https://github.com/the-tcpdump-group/tcpdump/archive/refs/tags/tcpdump-4.9.2.tar.gz
tar -xzvf tcpdump-4.9.2.tar.gz

然后libpcap-1.8.0

wget https://github.com/the-tcpdump-group/libpcap/archive/refs/tags/libpcap-1.8.0.tar.gz
tar -xzvf libpcap-1.8.0.tar.gz

我们需要重命名libpcap-libpcap-1.8.0为libpcap-1.8.0. 否则,tcpdump找不到libpcap.a本地路径:

mv libpcap-libpcap-1.8.0/ libpcap-1.8.0

构建并安装 libpcap:

cd $HOME/fuzzing_tcpdump/libpcap-1.8.0/
./configure --enable-shared=no
make

构建安装tcpdump:

cd $HOME/fuzzing_tcpdump/tcpdump-tcpdump-4.9.2/
./configure --prefix="$HOME/fuzzing_tcpdump/install/"
make
make install

启用ASAN对libpcap和tcpdump进行构建。

rm -r $HOME/fuzzing_tcpdump/install
cd $HOME/fuzzing_tcpdump/libpcap-1.8.0/
make clean

cd $HOME/fuzzing_tcpdump/tcpdump-tcpdump-4.9.2/
make clean

cd $HOME/fuzzing_tcpdump/libpcap-1.8.0/
export LLVM_CONFIG="llvm-config-11"
CC=afl-clang-lto ./configure --enable-shared=no --prefix="$HOME/fuzzing_tcpdump/install/"
AFL_USE_ASAN=1 make

cd $HOME/fuzzing_tcpdump/tcpdump-tcpdump-4.9.2/
AFL_USE_ASAN=1 CC=afl-clang-lto ./configure --prefix="$HOME/fuzzing_tcpdump/install/"
AFL_USE_ASAN=1 make
AFL_USE_ASAN=1 make install

开始fuzz

afl-fuzz -m none -i $HOME/fuzzing_tcpdump/tcpdump-tcpdump-4.9.2/tests/ -o $HOME/fuzzing_tcpdump/out/ -s 123 -- $HOME/fuzzing_tcpdump/install/sbin/tcpdump -vvvvXX -ee -nn -r @@

1.2 FUZZING

fig:

1.3 分析

由于是ASAN编译。直接运行crash就能得到报错信息。

$HOME/fuzzing_tcpdump/install/sbin/tcpdump -vvvvXX -ee -nn -r ~/fuzzing_tcpdump/out/default/crashes/id:000000,sig:06,src:008020,time:4930546,execs:4212141,op:havoc,rep:4

fig:

SUMMARY: AddressSanitizer: heap-buffer-overflow /home/fuzz/fuzzing_tcpdump/tcpdump-tcpdump-4.9.2/./extract.h:184:20 in EXTRACT_16BITS,说明是堆溢出。

不过这里和CVE-2017-13028对不上,CVE-2017-13028是BOOTP,但是这里的是ospf6。查看4.9.2版本源码,显然CVE-2017-13028已修复。

fig:

fig:

这里就不进行更深一步的分析了,暂时只fuzz,简单分析一下。具体哪一个,大家可以尝试一下,个人觉得这里也是类似CVE-2017-13028,是未使用ND_TCHECK检测是否有数据造成的溢出读。

fig:

标签: 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
取消回复
文章目录
  • xpdf
    • 0x00 环境准备
    • 0x01 实验
      • 1.1 环境准备
  • libexif
    • 0x00 环境准备
    • 0x01 实验
      • 1.1 环境准备
      • 1.2 FUZZING
      • 1.3 分析
  • libexif
    • 0x00 环境准备
    • 0x01 实验
      • 1.1 环境准备
      • 1.2 FUZZING
      • 1.3 分析

分类目录

  • 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漏洞分析
0day安全 第11章实验 加密与解密 第3章实验 sqli-labs 31-40 bugku Linux CVE-2010-3333 Microsoft Office RTF栈溢出漏洞 bugku cisco

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

Theme Kratos Made By Seaton Jiang

鄂ICP备2021009673号-1