关于Fuzz——peach的学习
最近在搞漏洞挖掘,之前写过一个文件格式漏洞挖掘的博文,使用的是光刃牛写的Alpha Fuzz工具。感觉样本生成的质量不是很好,这次打算使用一下老牌的Fuzz工具peach。学长介绍了一下说peach的样本生成算法比较屌,质量比较高。所以这次来学习一下。
另外最近打算搞android方面的漏洞挖掘和分析,博客也没怎么写。这次也是想学习一下android平台的漏洞挖掘,感觉android平台好用的工具不多,需要自己去研究,大牛们基本也都是有自己的“秘密工具”。
首先说一下,peach是基于文件格式进行生成的原则进行产生样本的。所以使用的时候需要去提供文件格式的详细信息。但是也支持提供文件样本,基于文件样本变异去Fuzz。peach是用python写的,官方提供了python源码和编译成exe的版本。peach最好配合windbg使用。进行网络协议fuzz的话,最好配合wireshark使用。
peach pit是用xml写的,用来描述文件格式的文件。peach pit的内容包含了使用工具进行Fuzz的整个过程,包括了测试样本的生成、Fuzz过程的设置和捕获异常的操作等,所以这个peach pit文件决定了整个的Fuzz测试过程。
下面学习一下这个文件的结构。
首先肯定是xml文件,结构示意图如下

其中可以在一个 Peach Pit 文件里指定任意数目的 DataModel,一般复杂的数据结构都会拆成几部分,增强可读性和可重用性。为了达到这个目的,提供了ref属性,这个属性只能让DataModel和Block标签使用。目的是为了是分开的几块提供重复使用,避免重复编写的。常见的属性和标签如下:
属性:
name-数据模型的名字[必须]
ref-引用模版数据模型[可选],这个用于给DataModel标签使用。目的是为了是分开的几块提供重复使用,避免重复编写的。
size-这个标签代表的数据的大小(以bit为单位)
value-这个标签代表的数据的内容,比如字符串<String name="exmple" value="Hello world!">
minOccours-Block标签使用,表示一个Block的重复出现的最低次数(用于重复出现数据使用)
maxOccours-Block标签使用,表示一个Block的重复出现的最高次数(用于重复出现数据使用)
size-Number-数字使用,指定数字的进制数
signed-数字使用,指定是否有符号
mutable-这个属性标志当前的数据是否可变,因为如果是magic之类的话要设为不可变。
有效的子元素:
Block 组合块
Choice 指定标签中任意一个块(不是块也可以?)是有效的,类似于switch。也是用来随机生成数据的。
String 字符串
Number 有signed属性表示有无符号,
Blob 无类型的数据
Flags 以位为单位的数据
Fixup 求校验值用
Relation 用于动态生成值的。有特有的type属性配合特有的of属性使用。
Transformer
这个是Flags标签的使用方法,可见是一个Flag列表。
<Flags name="options" size="16">
<Flag name="compression" position="0" size="1" />
<Flag name="compressionType" position="1" size="3" />
<Flag name="opcode" position="10" size="2" value="5" />
</Flags>
Block 元素是用于组合几个标签使用的,因为多个标签不能一起引用,所以把几个标签放入一个Block中就可以一起引用了。Block不能单独使用,因为没有意义。
Relation 用于动态生成数据使用的,因为文件可能会有各种校验值,就可以使用这个值来生成,与之对应的还有Fixup 用来生成校验值的。
以上大部分都是抄的-。-没有错。下面写点自己的东西
peach指令
- peach -t peach_xml_file 对pit文件查错
- peach -p 10,2 peach_xml_flie [test_name] 好像跟并发有关,不会用
- peach -1 --debug peach_xml_file 调试运行Pit?
1.mutable="false" token="true" 这两个属性很有用,用来定义各种magic
2.Number与String的区别在于比如都指定"0"时一个是数字一个是字符。
3.长度指定。Blob——length、String——length、Number——size、Flag——size。其中前两个的单位是byte,后两个单位是bit。
4.<Choice>标签很有用,这个标签用来处理枚举值再好不过了。
5.用<Block>把每个块分出来很方便。
6.我发现其实pit里的数据类型就<Blob>、<Number>、<String>三种
7.常用的属性其实就三个value、size、length、name
8.表示长度时要记得signed="false"
9. minOccurs="0" maxOccurs="50" 要成对出现,不然会报错
<Publisher class="file.FileWriter">
</Publisher>
这一对标签是Test标签中用于输出的类,参数如下。示例<Param name="FileName" value="FuzzedFile"/>
Supported Parameters: FileName: [REQUIRED] Name of file to open for reading/writing
Append: Append to end of file [true/false, default flase]
Overwrite: Replace existing file? [true/false, default true]
关于Fuzz——peach的学习的更多相关文章
- MP3 Fuzz学习
这篇文章主要是学习一波MP3格式fuzz的知识.目录如下 0x0.MP3格式的构成 0x0.MP3格式的构成 MP3是一种通俗叫法,学名叫MPEG1 Layer-3.MP3是三段式的结构,依次由ID3 ...
- 使用peach工具进行fuzz测试
本文简要介绍了Fuzz 工具Peach的使用,并通过文件格式 Fuzz举例阐述了 Peach Pit 文件的编写. 本文转自“绿盟科技博客”:http://blog.nsfocus.net/peach ...
- Android的fuzz测试技术之符号执行浅谈-android学习之旅(82)
简单的漏洞越来越少,需要改进目前的方法 : 通过符号执行,得出执行路径,然后在进行fuzzy是较为有效的方法之一 1)为待测单元自动地生成可到达的测试数据,即提高测试目标的覆盖率 2)根据特定的漏洞模 ...
- ref:一系列用于Fuzzing学习的资源汇总
ref:http://www.freebuf.com/articles/rookie/169413.html 一系列用于Fuzzing学习的资源汇总 secist2018-04-30共185833人围 ...
- Peach+Fuzzer
目录 1 Peach是什么....................................................................................... ...
- 在 Peach 中使用发布者进行调试
0x01 桃子平台 桃子平台(Peach)是一款流行的 Fuzz 平台,主要用作二进制文件及网络协议的模糊测试.其原理遵循基本的模糊测试流程,比较有特色的是它依赖用户所编写的 Pit 文件,同时输入的 ...
- python 学习笔记十三 JQuery(进阶篇)
jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 安装jQuery 有两个版本的 jQuery 可供下载: Production versio ...
- python学习之路-day5-模块
本节内容: 模块详解 1.模块定义 2.os&sys模块 3.time&datetime模块 4.random模块 5.shutil模块 6.shelve模块 7.configpars ...
- MongoDB的学习--文档的查询
继续关于<MongoDB权威指南>记录,今天的内容是文档的查询~~ MongoDB官网地址:http://www.mongodb.org/ 我使用的是MongoDB 2.4.8 find函 ...
随机推荐
- K8S从私有仓库拉取镜像
通常来讲,我们在通过公共镜像仓库拉取docker镜像的时候,不需要任何的认证操作,但我们在构建了企业的私有镜像以后,就不得不在拉取镜像之前通过用户名密码来完成认证. 在docker单机环境中,我们可以 ...
- golang 性能测试pprof
golang 性能测试包是位于 net/http 包下的 pprof,其相关介绍可以参看具体的 官方文档 有关 golang 性能测试使用特别简单,在 main 包中的引包位置直接引入: import ...
- Hadoop基础-Hadoop快照管理
Hadoop基础-Hadoop快照管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.快照的作用 快照可以迅速对文件(夹)进行备份,不产生新文件,使用差值存储,默认是禁用状态. ...
- 服务器安全策略之《启用Windows 防火墙情况下配置允许SQL Server远程连接》
为了服务器的安全,通常情况下我们需要启用Windows 防火墙,然而在启用了Windows 防火墙后会发现会引发一系列的问题,比如无法通过本地远程服务器桌面.无法在本地远程连接SQL Server等, ...
- koa中间件机制
Koa是Express原班人马打造的一个更小,基于nodejs平台的下一代web开发框架. koa2利用的是async/await,洋葱圈模型. 1. koa2中间件基本用法
- 前端路由的两种模式: hash 模式和 history 模式
随着 ajax 的使用越来越广泛,前端的页面逻辑开始变得越来越复杂,特别是spa的兴起,前端路由系统随之开始流行. 从用户的角度看,前端路由主要实现了两个功能(使用ajax更新页面状态的情况下): 记 ...
- JavaScript setInterval 与 setTimeout 区别
setInterval:一直循环调用函数,不会停止:需要用 clearInterval 去停止 setTimeout:只调用一次
- Shell记录-Shell脚本基础(四)
while循环,使您能够重复执行一组命令,直到某些条件发生.它通常用于当你需要反复操纵的变量值. 语法 while command do Statement(s) to be executed if ...
- webapi框架搭建-数据访问ef code first
webapi框架搭建系列博客 为什么用ef? 我相信很多博友和我一样都有这种“选择困难症”,我曾经有,现在也有,这是技术人的一个通病——总想用“更完美”的方式去实现,导致在技术选择上犹豫不决,或总是推 ...
- 【leetcode 简单】 第八十五题 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...