工控安全-PLC指纹提取的几种方法
前言:PLC为可编程逻辑控制器,采用S7协议。其硬件本身存在许多漏洞,可以利用kali里面的漏洞模块或者modbus工具对其进行攻击,甚至直接可以进行未授权访问,只要其开启对外网的端口服务,那么我们就可以利用其私有协议进行指纹提取、模糊测试、漏洞利用来最终达到控制PLC。指纹提取占据比较重要的位置,因为我们只要把指纹提取的工作做好,那么我门就可以针对什么版本的PLC进行1day的打击。因为工控硬件的更新换代始终很慢。
这里采用的是一个西门子PLC的仿真软件来进行实验的。
0x01 nmap指纹识别
在虚拟机中开启西门子S7 PLC仿真软件,ip不用改,如果nmap扫不出,再改成本地ip
nmap扫描整个网段中开放102端口的存活ip
nmap -p102 -n 192.168.163.1/ --open
先看看启动了PLC的虚拟机的ip
然后在物理机上扫描
发现整个内网中开放102端口的ip
接下来就可以用nmap的s7-info.nse脚本探测其指纹信息
nmap -p102 -n 192.168.1.116 --open --script=s7-info.nse
0x02 PLC连接信息采集工具
下载PLC连接测试工具对PLC的信息进行采集,获取到详细的指纹,ip地址填plc所在的ip,即存在plc仿真软件的虚拟机
然后连接,即可获取很详细的指纹信息
0x03 wireshark抓包进行流量分析获取PLC指纹信息
打开wireshark,开始抓包,筛选cotp
然后打开PLC连接工具进行连接
然后就捕获到了s7协议的包
747号的包是物理机向PLC请求通讯;749号数据包是物理机向plc请求配置通讯;等750号plc同意之后;752号物理机开始发送数据进行通讯;
下面从plc的ip192.168.1.116发送到物理机192.168.1.100的数据包就是plc的指纹信息,比如说755号的数据包。
可以看到PLC的CPU型号、序列号等指纹信息。
当然还有几种方法可以获取到PLC的指纹信息,比如说可以利用python模拟抓包来获取。但以上三种是最为常用方便的。
附上TideSec安全团队总结(更全面):
http://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247484526&idx=1&sn=92b6b46bd6471ba2bc7b51cad1c86fe1&chksm=ce5e260ff929af19db8a74f7c0309049c4eabc4b972d9ac03810bc3a4a791b6384864942294f&mpshare=1&scene=23&srcid=1024zQya2YBwrCEztoHnVbyn&sharer_sharetime=1571891653504&sharer_shareid=45176a46e594e1ff053abe513bfce4be#rd
工控安全-PLC指纹提取的几种方法的更多相关文章
- android 让一个控件按钮居于底部的几种方法
android 让一个控件按钮居于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_ ...
- [Android] Android 让UI控件固定于底部的几种方法
Android 让UI控件固定于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_p ...
- 给Repeater控件里添加序号的5种方法
Repeater是我们经常用的一个显示数据集的数据控件,经常我们希望在数据前显示数据的序号,那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的 ...
- 利用来JS控制页面控件显示和隐藏有两种方法
利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: 1 2 document.getEle ...
- [转]android 让一个控件按钮居于底部的几种方法
本文转自:http://www.cnblogs.com/zdz8207/archive/2012/12/13/2816906.html android 让一个控件按钮居于底部的几种方法 1.采用lin ...
- Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法
在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方 ...
- 解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168
目前比较流行的是使用SWFUpload控件,这个控件的详细介绍可以参见官网http://demo.swfupload.org/v220/index.htm 在使用这个控件批量上传文件时发现中文文件名都 ...
- QT 窗体控件的透明度设置(三种方法)
整个窗体 当设置QT的窗体(QMainWindow, QDialog)时,直接用 targetForm->setWindowOpacity() 函数即可实现,效果为窗体及窗体内所有控件都透明 ...
- pictureBox控件获得图片路径的三种方法及自适应大小属性
1.绝对路径: this.pictureBox2.Image=Image.FromFile("D:\\001.jpg"); 2.相对路径: Application.StartupP ...
随机推荐
- 大话IDL编程之函数功能调用(envi_doit、ENVIRaster、ENVITask)
2020年2月1日.好长时间没更新博客,还真有点不习惯.受新型冠性病毒的影响,平时街上熙熙攘攘的人流了无踪影,2020的春节竟然来的如此冷清.为响应“呆在家里就是做贡献的号召”,在家一宅就是十多天.闲 ...
- 我的一个React路由嵌套(多级路由),路由传参之旅
在上一篇react路由之旅中,我们简单地配置了react,进行了react路由及相关知识的学习,引入以及实现一个局部跳转的功能,接下来就是深入学习路由的嵌套以及传参,这是工作中主要用要的. 我的rea ...
- php 安装 event 和 libevent 扩展
这里使用的是php7.0.24 ,php是yum安装的 一.安装event扩展 用yum无法安装event扩展 手动安装 php 必须要开启 sockets 功能,需要安装php的socket扩展,才 ...
- Vim 安装和配置、优化
Vim 介绍 Vim 官网:http://www.vim.org/ Vim 安装 CentOS:sudo yum install -y vim Ubuntu:sudo apt-get install ...
- Day17-18前端学习之路——Javascript事件
用户在某个元素上点击鼠标或悬停光标. 用户在键盘中按下某个按键. 用户调整浏览器的大小或者关闭浏览器窗口. 一个网页停止加载. 提交表单. 播放.暂停.关闭视频. 发生错误. 更多事件:https:/ ...
- 函数式编程/lambda表达式入门
函数式编程/lambda表达式入门 本篇主要讲解 lambda表达式的入门,涉及为什么使用函数式编程,以及jdk8提供的函数式接口 和 接口的默认方法 等等 1.什么是命令式编程 命令式编程就是我们去 ...
- Xcode如何集成Pod教程
一般开发都会用到很多第三方的框架,利用好他们可以加快开发进度,为了更方便将第三方的框架集成到我们的项目中,Pod是个很好的选择,现在说一下该怎么将Pod集成到我们的Xcode中 第一种方法 命令行的方 ...
- Springboot feign 传递request信息
基础实现 requestInterceptor 实现类中添加信息 public class NativeFeignConf { @Bean public RequestInterceptor getR ...
- Mysql 保存emoji表情报错
保存emoji表情错误 首先错误表现,抛出业务层报错之外,根源的数据库错误是: sql 错误码 1366 字符集相关错误. uncategorized SQLException; SQL state ...
- 多线程共享变量和 AsyncLocal
>>返回<C# 并发编程> 1. 简介 2. 异步下的共享变量 3. 解析 AsyncLocal 3.1. IAsyncLocalValueMap 的实现 3.2. 结论 1. ...