文章总结: 本文档详细介绍了libexif库的功能分析、漏洞复现环境搭建及Eclipse-CDT调试方法。首先阐述libexif作为处理JPEG/TIFF图像EXIF元数据的开源C库的核心功能与应用场景,随后指导读者编译安装libexif-0.6.14及exif命令行工具,并系统性地总结了针对该库的模糊测试变异策略,涵盖结构层面、偏移指针、数值字段、数据内容等多维度变异方法,特别针对CVE-2009-3895和CVE-2012-2836漏洞设计了特定攻击向量。最后详细说明了Eclipse-CDT的安装配置流程及GDB调试参数设置,为安全研究人员提供了完整的漏洞分析与调试实践指南。 综合评分: 78 文章分类: 漏洞分析,二进制安全,安全工具,安全开发,实战经验
或使用 jhead
jhead image.jpg
或使用 ImageMagick
identify -format “%[EXIF:*]” image.jpg
或使用 file
file – image.jpg < image.jpg
此处使用文章中的exif
| |
| — |
| bash下载并解压libexif-0.6.14wget https://github.com/libexif/libexif/archive/refs/tags/libexif-0614-release.tar.gztar -xzvf libexif-0614-release.tar.gz构建并安装libexif:cd libexif-libexif-0614-release/编译使用了 autoconf ,所以需要安装一些额外的库,如果已经安装无需关注sudo apt-get install autopoint libtool gettext libpopt-devautoreconf -fvi./configure –enable-shared=no –prefix=”$PWD/install/”makemake install 选择接口应用由于libexif是一个库,我们需要另一个应用来利用这个库,并且会被模糊处理。这个任务我们用 exif 命令行。输入以下内容以下载并解压exif 命令行 0.6.15:wget https://github.com/libexif/exif/archive/refs/tags/exif-0615-release.tar.gztar -xzvf exif-0615-release.tar.gz现在,我们可以构建并安装exif命令行工具 cd exif-exif-0615-release/autoreconf -fvi./configure –enable-shared=no –prefix=”$PWD/install/” PKGCONFIGPATH=$PWD/../libexif-libexif-0614-release/install/lib/pkgconfigmakemake install 要测试一切是否正常,只需输入:install/bin/exif |
3.语标库的创建
既然我们使用exif,那么对这个程序的功能需要做一个大概了解,使用脚本,看里面有哪些程序收集
使用exif这个程序,其中这个程序功能介绍如下
exif是 libexif 项目官方提供的命令行工具,专门用于查看和操作 JPEG/TIFF 图像中的 EXIF 元数据。
根据程序与libexif库的功能我们使用变异过后的图像,进行变异,增大变异范围,其主要变异有如下,
针对 libexif 模糊测试的变异方法
- #### 结构层面变异
| 变异目标 | 具体变异方法 | 预期效果 | | — | — | — | | JPEG标记 | 删除/损坏SOI(0xFFD8)或EOI(0xFFD9)标记 | 早期解析失败 | | APP1长度 | 设为0、0xFFFF、大于文件实际长度 | 越界读取/写入 | | APP1位置 | 在EXIF数据中插入其他APP段 | 结构混淆 | | 字节序 | II↔MM交换、设为XX等无效值 | 解析方向错误 | | TIFF魔数 | 0x002A改为其他值(0x0000,0xFFFF) | 早期拒绝或异常处理 |
- #### 偏移与指针变异
| 变异目标 | 具体变异方法 | 针对漏洞 | | — | — | — | | IFD偏移 | 设为0、文件末尾+1、0xFFFFFFFF | CVE-2009-3895 | | 标签偏移 | 指向文件外、自引用、循环引用 | CVE-2012-2836 | | 下一个IFD | 设为当前IFD位置(循环) | 无限循环 | | GPS偏移 | 指向无效内存区域 | 空指针解引用 |
- #### 数值字段变异
| 字段类型 | 变异值 | 攻击类型 | | — | — | — | | IFD条目数 | 0、0xFFFF、0x7FFFFFFF | 边界溢出 | | 组件数(Count) | 0、0xFFFFFFFF、导致32位溢出的值 | 整数溢出 | | 数据类型 | 0(无效)、>12(未定义)、与标签不匹配 | 类型混淆 | | 标签编号 | 未定义标签、保留范围、私有标签 | 未处理分支 |
- #### 数据内容变异
| 数据类型 | 变异策略 | 触发条件 | | — | — | — | | 字符串 | 删除终止符、插入空字节、超长(>64K) | 缓冲区溢出 | | ASCII | 非ASCII字符、控制字符、无效UTF-8 | 编码错误 | | 有理数 | 分母为0、分子/分母极大值 | 除零异常 | | 日期时间 | 错误格式、无效日期、超范围 | 解析异常 |
- #### 特殊构造变异
| 构造类型 | 变异方法 | 针对CVE | | — | — | — | | 循环IFD | IFD1指向IFD0,形成环 | 2009-3895 | | 深度嵌套 | 多层IFD嵌套(>100层) | 栈溢出 | | 交叉引用 | 标签A引用B,B引用A | 内存泄漏 | | 部分有效 | 结构前半有效,后半混乱 | 状态不一致 |
- #### 边界条件变异
| 边界类型 | 测试值 | 检测问题 | | — | — | — | | 文件边界 | 偏移=文件大小、偏移=文件大小-1 | 越界读取 | | 长度边界 | 长度=0、长度=最大分配-1 | 差一错误 | | 对齐边界 | 不对齐的偏移(奇数地址) | 对齐错误 | | 符号边界 | 有符号解释为负数的偏移 | 符号问题 |
- #### CVE-2009-3895特定变异
| 攻击向量 | 变异位置 | 触发条件 | | — | — | — | | 空指针 | IFD偏移设为0,但条目数>0 | 解引用空指针 | | 未初始化 | 创建部分有效IFD,跳过初始化 | 使用未初始化内存 | | 释放后使用 | 复杂IFD结构,提前释放 | 双重释放/释放后使用 | | 错误路径 | 构造使函数进入非常规错误处理 | 错误路径漏洞 |
- #### CVE-2012-2836特定变异
| 攻击向量 | 变异方法 | 内存影响 | | — | — | — | | 越界读取 | 偏移指向文件末尾+1000 | 读取未分配内存 | | 整数溢出 | 组件数×类型大小>2³²-1 | 分配过小缓冲区 | | 长度溢出 | Count=0xFFFFFFFF,类型大小=1 | 长度计算溢出 | | 递归溢出 | 嵌套结构,长度计算累积溢出 | 指数级内存消耗 |
最后进行fuzz
4.Eclipse-CDT调试
下载
https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2025-12/R/eclipse-java-2025-12-R-linux-gtk-x86_64.tar.gz&mirror_id=1317
解压
tar -xzvf eclipse-java-2025-12-R-linux-gtk-x86_64.tar.gz
进入解压后的目录:
cd eclipse
运行Eclipse可执行文件:
./eclipse
打开 Eclipse,点击顶部菜单栏的Help → Install New Software;
在 “Work with” 输入框中,输入 CDT 的官方更新站点
https://download.eclipse.org/tools/cdt/releases/latest
输入完成后按回车键,触发 Eclipse 重新加载软件列表
在搜索框输入 “C/C++”,仅勾选以下 3 个核心组件:
C/C++ Development Tools
C/C++ Development Platform
C/C++ Common GDB Support;
勾选然后下一步,安装完成重启
后面再file中选import,如下勾选
Run -> Debug Configurations
下来我们需要设置输入参数。为此,转到”Arguments”相应选项卡并设置其中一个 AFL 崩溃文件的路径
有问题可以设置路径以及gdb路径
set substitute-path /work /home/lab/work
参考链接:
https://github.com/antonio-morales/Fuzzing101/tree/main/Exercise%202
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:智检安全研习社 《libexif 漏洞复现以及eclipse-cdt调试》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论