Fuzz JSON with Peach

时间:2014-10-08 18:10:20

标签: json rest flask fuzzing

我通过阅读http://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask在Flask中创建了一个基于REST的小型Web服务,现在我想使用Peach框架模糊JSON。我知道它使用了一个坑文件(XML)来进行模糊测试,但是我的小脑子无法制作出可以满足我目的的坑文件。我搜索了很多关于桃坑文件但是一切都徒劳无功。 我需要一个坑文件或任何人都可以告诉如何创建一个用于模糊有效载荷的坑文件。

1 个答案:

答案 0 :(得分:2)

有一个很好的关于桃子可用的教程there

需要定义几个元素:

  • 描述您要发送的数据格式的数据模型。
  • 描述模糊器行为的状态模型。
  • 代理人在模糊测试下运行和监控应用程序。
  • 将所有定义结合在一起的测试。

以下是教程中Peach Pit文件的示例。

<Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">
  <DataModel name="DataHTER">
    <String value="HTER " mutable="false" token="true"/>
    <String value=""/>
    <String value="\r\n" mutable="false" token="true"/>
  </DataModel>
  <StateModel name="StateHTER" initialState="Initial">
    <State name="Initial">
      <Action type="input" ><DataModel ref="DataResponse"/></Action>
      <Action type="output"><DataModel ref="DataHTER"/></Action>
      <Action type="input" ><DataModel ref="DataResponse"/></Action>
    </State>
  </StateModel>
  <DataModel name="DataResponse">
    <String value=""/>
  </DataModel>
  <Agent name="RemoteAgent" location="tcp://127.0.0.1:9001">
  <!-- Run and attach windbg to a vulnerable server. -->
    <Monitor class="WindowsDebugger">
      <Param name="CommandLine" value="C:\Documents and Settings\Administrator\Desktop\vulnserver\vulnserver.exe"/>
      <Param name="WinDbgPath" value="C:\Program Files\Debugging Tools for Windows (x86)" />
    </Monitor>
  </Agent>
  <Test name="TestHTER">
    <Agent ref="RemoteAgent"/>
    <StateModel ref="StateHTER"/>
    <Publisher class="TcpClient">
      <Param name="Host" value="127.0.0.1"/>
      <Param name="Port" value="9999"/>
    </Publisher>
    <Logger class="File">
      <Param name="Path" value="Logs"/>
    </Logger>
  </Test>

如果要使用JSON数据模型,可以按照recommendation of one of the peach architect进行操作。

1)定义与JSON对应的数据模型。

JSON对象

{
  "name":"John Smith",
  "address":{
    "address1":"555 Main St.",
    "city":"Seattle"
  }
}

数据模型

<DataModel>
  <String name="name" value="John Smith" />
  <Block name="address">
    <String name="address1" value="555 Main St." />
    <String name="city" value="Seattle" />
  </Block>
</DataModel>

然后,您必须在C#中编写自己的自定义发布者。这是一个tutorial