前言: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指纹提取的几种方法的更多相关文章

  1. android 让一个控件按钮居于底部的几种方法

    android 让一个控件按钮居于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_ ...

  2. [Android] Android 让UI控件固定于底部的几种方法

    Android 让UI控件固定于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_p ...

  3. 给Repeater控件里添加序号的5种方法

    Repeater是我们经常用的一个显示数据集的数据控件,经常我们希望在数据前显示数据的序号,那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的 ...

  4. 利用来JS控制页面控件显示和隐藏有两种方法

    利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一:  1 2 document.getEle ...

  5. [转]android 让一个控件按钮居于底部的几种方法

    本文转自:http://www.cnblogs.com/zdz8207/archive/2012/12/13/2816906.html android 让一个控件按钮居于底部的几种方法 1.采用lin ...

  6. Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法

    在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方 ...

  7. 解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168

    目前比较流行的是使用SWFUpload控件,这个控件的详细介绍可以参见官网http://demo.swfupload.org/v220/index.htm 在使用这个控件批量上传文件时发现中文文件名都 ...

  8. QT 窗体控件的透明度设置(三种方法)

    整个窗体 当设置QT的窗体(QMainWindow, QDialog)时,直接用 targetForm->setWindowOpacity()   函数即可实现,效果为窗体及窗体内所有控件都透明 ...

  9. pictureBox控件获得图片路径的三种方法及自适应大小属性

    1.绝对路径: this.pictureBox2.Image=Image.FromFile("D:\\001.jpg"); 2.相对路径: Application.StartupP ...

随机推荐

  1. 源码详解系列(八) ------ 全面讲解HikariCP的使用和源码

    简介 HikariCP 是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,和 dr ...

  2. 安装Mysql时提示尚未安装Python 解决方案

    我明明安装了python,结果在安装mysql是却提示没有安装python. 原因,没有将python添加到path中. 解决方法:卸载python,然后重装python,在安装界面中勾选将path添 ...

  3. LeetCode 684. Redundant Connection 冗余连接(C++/Java)

    题目: In this problem, a tree is an undirected graph that is connected and has no cycles. The given in ...

  4. k8s系列---故障

    kubectl get namespace prom Terminating 45h namespace 出现Terminating 状态,一直删不掉 解决: 1:导出namespace的json文件 ...

  5. 浅析Internet上使用的安全协议

    Internet上使用的安全协议 网络安全是分层实现的,从应用层安全到数据链路层安全. 一.运输层安全协议:安全套接字SSL 1.1.简介 SSL 是安全套接层 (Secure Socket Laye ...

  6. vue路由--使用router.push进行路由跳转

    手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com/),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元 route-link是在html中静态定 ...

  7. 记录 2020年2月26日 java的一次远程技术面试

    1. 自我介绍 2.String 类型为什么是final类型?String 为啥不可变? String 类型是final类型原因: 1.不可变性支持线程安全(为了线程安全) 2.不可变性支持字符串常量 ...

  8. Android EditText不可编辑单行显示能滑动查看内容

    遇到问题 有时为了节约界面控件,可以界面的美观,我们会使用单行显示 singleLine,如果使用 Enable = false 输入框文字呈现灰色,并且也无法操作. 想要实现的效果是,单行显示,不能 ...

  9. 1、SSH无密码访问

    1.在需要无密码登录远程服务器的机器上(如A→B服务器)生成密码对 A:服务器操作: ssh-keygen -t rsa :输出的内容直接一路回车即可(enter) 执行上面一步,会在~/.ssh目录 ...

  10. C#的委托案例

    C#实现(Delegate)的委托就不多说了,直接上代码,看代码中的注释: namespace Delegate { delegate void DGSayiHi(string name);//声明委 ...