6.Peach随机Fuzz【工业控制系列】

前言

​ 我们通过上次的使用Peach FuzzModbus协议模拟发送数据包中发现其实发送的都是原有的数据包仿造。但是只是单纯的对源数据输出,并未进行报文特定内容随机。 还是较难测试快测试出相关漏洞。

image-20240419223346888

image-20240419232305376

本次实验是对Fuzz数据中对所需要的字段进行随机数fuzz,可以较为有效的测试出相关漏洞。

修改仿真

因为之前的课程fuzz数据均是针对于modbus04功能码进行的,但是本节中进行的fuzz是进行fuzz modbus协议功能码;所以对Modbus仿真进行修改,进行模拟COIL STATUSINPUT STATUSINPUT REGISTERHOLDING REGISTER。数据均是从Address 1开始,Lengh长度为100。分别进行模拟100个寄存器信息。保证在进行fuzz其他功能码的时候,模拟设备因为不存在相关点信息提示的报错。(在真实漏洞挖掘环境中可以忽略此步骤)

image-20240419224654656

随机Fuzz应用

​ 在第三节【Modbus介绍】Modbus常见功能码进行了讲解,这里就针对Modbus功能码字段进行Fuzz,在真实的环境中可以完成针对与设备尝试Fuzz未知的功能码。

​ 这里直接将上节课中的编写的XML文件简单的修改,对send_data数据中name 03name 04进行修改即可。

​ 将数据包的功能码字节进行确定为04 name中的01

​ 修改03size24,将04 name01数据放入03 value中,修改04size8value中只保留01,删除mutable="false"。即可完成针对于modbus功能码的随机fuzz

​ 可以针对数据包与自己测试,进行删除mutable="false" 即可完成value的随机fuzzSize为数据字节中大小;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功能码的测试

image-20240419232116158

本文链接:

https://www.linqi.net.cn/index.php/archives/529/