关于Peach v3 模糊测试脚本pit文件when属性

最近在做Fuzzing测试,使用Peach v3测试框架,期间在编写pit脚本遇见一些问题,搜寻好长时间才找到解决办法。

网络上关于pit语法解释不够详细,对when属性讲解的更少。

我测试的时候想使用pit文件的when属性,找了好多资料,最后在官网找到相关介绍,如下(地址:http://community.peachfuzzer.com/v3/Action.html)


<DataModel name="InputModel">
        <Number name="Type" size="32" />
</DataModel>

<DataModel name="OutputModelA">
        <Number name="Type" size="32" value="11 22 33 44" valueType="hex" />
</DataModel>

<DataModel name="OutputModelB">
        <Number name="Type" size="32" value="AA BB CC DD" valueType="hex" />
</DataModel>

<StateModel name="StateModel" initialState="InitialState">
        <State name="InitialState">
                <Action type="input">
                        <DataModel ref="InputModel" />
                </Action>

                <Action type="changeState" ref="State2" when="int(StateModel.states['InitialState'].actions[0].dataModel['Type'].InternalValue) == 2"/>

                <Action type="changeState" ref="State3" when="int(StateModel.states['InitialState'].actions[0].dataModel['Type'].InternalValue) == 3"/>

        </State>

        <State name="State2">
                <Action type="output">
                        <DataModel ref="OutputModelA" />
                </Action>
        </State>

        <State name="State3">
                <Action type="output">
                        <DataModel ref="OutputModelB" />
                </Action>
        </State>
</TheStateModel>


when属性的表达式是ture时转跳转执行。

该行语句就是when属性用法,但是它这里是接受到(整数型的2)状态发生转变,我想接受指定字符串时状态发生改变,例如接受到220 Server Welcome !找了好多办法,一直没成功,主要精力放在["Type"]、InternaValue、浪费很多时间

<Action type="changeState" ref="State2" when="int(StateModel.states['InitialState'].actions[0].dataModel['Type'].InternalValue) == 2"/>


很明显,StateModel.states['InitialState'].actions[0].dataModel['Type']含义是初始状态第一个动作接受的数据:

<Number name="Type" size="32" />

的值

peach官网同样老兄提出问题“How can I change state by receive data of socket”地址:https://forums.peachfuzzer.com/forum/peach-community-edition/general-support/3924-how-can-i-change-state-by-receive-data-of-socket

问题没人解释。

使用Peach -1 --debug命令结果如下:

关于Peach v3 模糊测试脚本pit文件when属性

红色圈的地方很明显是解决接受数据即是220 ftp0.99server,但是就是无法使用when属性中使用表达式

后来我找到解决办法是:


<DataModel name="InputModel">
        <Number name="Type" size="32" />
</DataModel>
更改为如下
<DataModel name="InputModel">
        <String name="Type" size="32" />
</DataModel>

就是原整数类型改为String类型


when属性更改:

<Action type="changeState" ref="State2" when="str(StateModel.states['InitialState'].actions[0].dataModel['Type'].DefaultValue) == '***期望字符串'"/>


解决办法很简单,但是不太懂xml的我中间遇见很多坑,包括引号问题(注意字符串需要引号),还有str、int问题


需要再说明一下:DefaultValue 可以使用 int(), str(), etc.、InternalValue、Value - binary value written out (is a BitStream type)


写的不是很详细,还有其他pit格式规范后续更新,欢迎交流peach。