关于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命令结果如下:
红色圈的地方很明显是解决接受数据即是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。