6.Peach随机Fuzz【工业控制系列】
前言
我们通过上次的使用Peach Fuzz对Modbus协议模拟发送数据包中发现其实发送的都是原有的数据包仿造。但是只是单纯的对源数据输出,并未进行报文特定内容随机。 还是较难测试快测试出相关漏洞。


本次实验是对Fuzz数据中对所需要的字段进行随机数fuzz,可以较为有效的测试出相关漏洞。
修改仿真
因为之前的课程fuzz数据均是针对于modbus的04功能码进行的,但是本节中进行的fuzz是进行fuzz modbus协议功能码;所以对Modbus仿真进行修改,进行模拟COIL STATUS、 INPUT STATUS、INPUT REGISTER、HOLDING REGISTER。数据均是从Address 1开始,Lengh长度为100。分别进行模拟100个寄存器信息。保证在进行fuzz其他功能码的时候,模拟设备因为不存在相关点信息提示的报错。(在真实漏洞挖掘环境中可以忽略此步骤)

随机Fuzz应用
在第三节【Modbus介绍】中Modbus常见功能码进行了讲解,这里就针对Modbus功能码字段进行Fuzz,在真实的环境中可以完成针对与设备尝试Fuzz未知的功能码。
这里直接将上节课中的编写的XML文件简单的修改,对send_data数据中name 03、 name 04进行修改即可。
将数据包的功能码字节进行确定为04 name中的01。
修改03的size为24,将04 name的01数据放入03 value中,修改04的size为8,value中只保留01,删除mutable="false"。即可完成针对于modbus功能码的随机fuzz。
可以针对数据包与自己测试,进行删除mutable="false" 即可完成value的随机fuzz。 Size为数据字节中大小;mutable为是否启动随机变量。
<DataModel name="send_data">
<Block name="mod">
<!-- Modbus生成数据 34 00 00 00 00 06 01 01 00 00 00 64-->
<Number name="01" size="16" value="34 00" valueType="hex" signed="false" mutable="false" />
<Number name="02" size="16" value="00 00" valueType="hex" signed="false" mutable="false" />
<Number name="03" size="24" value="00 06 01" valueType="hex" signed="false" mutable="false" />
<Number name="04" size="8" value="01" valueType="hex" signed="false" />
<Number name="05" size="16" value="00 00" valueType="hex" signed="false" mutable="false" />
<Number name="06" size="16" value="00 64" valueType="hex" signed="false" mutable="false" />
</Block>
</DataModel>这里需要改动如下几个属性
size:这是数据字段的大小,单位通常是字节。value:这是发送的实际数据。mutable:这个属性决定了数据是否可以在Fuzz测试过程中改变。如果设为true,则Peach Fuzzer将会随机改变这个字段的值。去掉也是同等与允许
运行测试
此次抓包中发现,Wireshark数据包中的info字段,已经完全修改,即可完成针对于Modbus功能码的测试
