Peach3 元素详细解析(三)
-
- 7 测试
- 8 Publishers
- 9 Loggers
- 10 变异策略
- 11 变异器
-
-
- ArrayNumericalEdgeCasesMutator
- ArrayRandomizeOrderMutator
- ArrayReverseOrderMutator
- ArrayVarianceMutator
- BlobBitFlipperMutator
- BlobDWORDSliderMutator
- BlobMutator
- DataElementDuplicateMutator
- DataElementRemoveMutator
- DataElementSwapNearNodesMutator
- FiniteRandomNumbersMutator
- NumericalEdgeCaseMutator
- NumericalVarianceMutator
-
7 测试
Test 元素被用于配置一个指定的 fuzzing 测试,这个配置通过一个 Publisher 和其他选项 (比如 including/excluding 等被变异的元素、Agents、fuzzing 策略)组合成一个 StateModel。 多个 test 元素是支持的,在 Peach 命令行使用中,只需简单提供 test 元素的名字即可。
属性:
Name—必备的,test 元素的名字,默认为“Default”。
Waittime—每次测试之间的等待时间,默认为 0。
Faultwaittime—在开始下一次迭代时等待错误的时间,默认为 0。
controlIneration—我们只需控制迭代的频率,默认为 0。
有效子元素:
Agent(可选)
StateModel(必须)
Publisher(必须)
Include(可选)
Exclude(可选)
Strategy(可选)
Logger(可选,推荐)
8 Publishers
Publishers是Peach发送和接收数据的I/O接口,Publisher支持基于流和操作的调用。当fuzzer运行时,除了slurp之外,所有的action使用一个Publisher来执行操作。不同的Publishers支持不同的action类型。比如,文件Publisher支持从一个文件读取数据作为输入,把数据写入一个文件作为输出,但是不支持接收或者调用。这和com Publisher不同,它支持调用,但不支持输入、输出或接收。所有的 fuzzing 定义必须使用至少一个 Publisher,如 果需要的话也可以选择多个 Publishers。当使用多个 Publisher 的时候,每个 action 必须指定 它引用了哪个 Publisher,通请参考 action 的 publisher 属性中的 name 属性。如果 Publisher 属性丢失了,action 将执行 Test 中定义的第一个 Publisher。
8.1 网络Publishers
当进行网络协议fuzzing的时候,Publisher常常被用于包含目标协议的协议。比如,当进行http 协议 fuzzing 的时候,使用 Tcp Publisher。当进行 TCPfuzzing 的时候,使用 IPv4 或 IPv6 Publisher。当进行 IPv4 fuzzing 的时候,使用 ethernet Publisher。
8.2 自定义Publisher
Peach支持创建自定义Publisher。建议先对一些现有 Publisher 代码进行审核,以了解 Publisher 怎么运行。创建一个自定义的 Publisher 不需要改变 Peach 的源代码。相反,代码 放被一个新的.NET 程序集(dll)中,然后把 dll 添加进 Peach bin 文件夹中,Peach 会自动地 识别新的 Publisher,并使它可用。
8.3 Publisher
(1)com
Com Publisher允许调用方法和com对象上的属性
参数:clsid–com clsid。
操作:Call—调用一个方法。Getproperty—获取属性值。Setproperty—设置属性值。
(2)console
Console Publisher 将会输出数据到标准输出。
参数:没有。操作:Output—需要显示的数据。
(3)consoleHex
consoleHex Publisher 将会输出数据到一个标准输出。数据将会以十六进制格式显示。
参数:Bytesperline—每行文本字节数,可选,默认为 16。操作:Output—要示的数据。
(4)File
File Publisher 将会打开一个文件来读和写。
参数:
Filename—要打开文件的名字。
Overwrite—覆盖存在的文件,可选,默认为真。
Append—向存在的文件附加数据,可选默认为假。 操作:
Output—数据被写进一个文件。
Input—从文件读取数据。
</