zoukankan      html  css  js  c++  java
  • 关于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指令

    1.  peach -t peach_xml_file                                    对pit文件查错
    2.  peach -p 10,2 peach_xml_flie [test_name]         好像跟并发有关,不会用
    3. peach -1 --debug peach_xml_file                        调试运行Pit?

    1.mutable="false" token="true" 这两个属性很有用,用来定义各种magic

    2.Number与String的区别在于比如都指定"0"时一个是数字一个是字符。

    3.长度指定。Blob——length、String——lengthNumber——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]

     

  • 相关阅读:
    C# 单点登录
    长度12的数组,要求对数据分为3组,每组数据对应位置的数字为前几位的和,并返回12位数组
    react项目初始化
    vue 过滤器的使用(解决forEach遇到的问题)
    nuxt中less使用
    vue项目less 使用
    Webpack中的sourceMap配置
    webpack 同一文件打包两次生成两个文件
    webpack---图片打包前和打包后名称一致的配置
    The computed property "userName" is already defined in data.
  • 原文地址:https://www.cnblogs.com/Ox9A82/p/5599892.html
Copyright © 2011-2022 走看看