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
功能码的测试