7.Peach 监听模块【工业控制系列】

前言

​ 前面讲解的课程主要针对Modbus协议的攻击进行Fuzz测试。但是由于是对设备进行的测试过程中我们无法实时的监测设备状态,本章中我们将学习引入监听模块, 对被测试设备进行主动监听,更好的确定设备存在的异常。

监听模块

Peach中默认可以进行socketping监听两种状态。

​ 这里我们使用Ping监听设备状态,在代码中新建agent,Monitor类型为Ping;设置主机为192.168.43.245

<!--监听配置信息-->
<Agent name="Local">
    <Monitor class="Ping">
        <Param name="Host" value="192.168.43.245" />
    </Monitor>

​ 在发送中引入Agent。名称为刚才配置的Agent name字段。

<!--设置发送IP与端口-->
<Test name="Default">
    <Agent ref="Local" /><!--在发送中进行ping检测-->
    <StateModel ref="TheState" />
    <Publisher class="tcp.Tcp">
        <Param name="Host" value="192.168.43.245" />
        <Param name="Port" value="502" /> 
    </Publisher>
</Test>

​ 修改完成的XML为:

<?xml version="1.0" encoding="utf-8"?>
<Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">
    <!--生成发送数据-->
    <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>
    <!--发送函数-->
    <StateModel name="TheState" initialState="initialState">
        <State name="initialState">
            <Action type="output">
                <DataModel ref="send_data" />
            </Action>
        </State>
    </StateModel>
    <!--监听配置信息-->
    <Agent name="Local">
        <Monitor class="Ping">
            <Param name="Host" value="192.168.43.245" />
        </Monitor>
    </Agent>
    <!--设置发送IP与端口-->
    <Test name="Default">
        <Agent ref="Local" /><!--在发送中进行ping检测-->
        <StateModel ref="TheState" />
        <Publisher class="tcp.Tcp">
            <Param name="Host" value="192.168.43.245" />
            <Param name="Port" value="502" /> 
        </Publisher>
    </Test>
</Peach>

运行测试

​ 再次运行时候,使用Wireshark进行过滤Modbus or icmp已经出现了相关结果。

image-20240419233533735

​ 运行命令为:peach.exe XML --debug

​ 这里因为是使用的虚拟机,将虚拟机链接网络的网卡进行断开链接,进行模拟一下服务端设备无法ping通情况。

image-20240419233720997

Socket 监听测试

Socket是更为精准的进行级别监听,查看端口是否存在;但是同样也存在弊区,因为使用socket会导致Fuzz测试速度变慢。

<!--socket监听方式-->
<Monitor Class="Socket">
    <Param name="Host" value="192.168.43.245" />
    <Param name="Socket" value="502" />
</Monitor>

本文链接:

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