工控CTF

概述

工控其实就是工业控制自动化,实际上是属于自动化的一部分。

工业自动化是在工业生产中广泛采用自动控制、自动调整装置,用以代替人工操纵机器和机器体系进行加工生产的趋势。在工业生产自动化条件下,人只是间接地照管和监督机器进行生产。

广义的工控其实就是IOT。

工控的三层结构

  • 现场表计(电,气,液)动机构
  • 逻辑控制系统,也就是PLC和DCS
  • 上位机(操作员控制系统)

需要学习的知识

  • PLC编程
  • 组态
  • 数电模电
  • 网络拓扑结构

工控CTF

工控安全

现场设备安全

  • 硬件保护
  • 网络认证

控制系统安全

  • 系统安全
  • 网络认证
  • 重放攻击

操作员系统安全

CTF

  • 初级

    杂项(隐写,逆向,取证,脑洞,爆破)

  • 中级

    协议分析,组态分析(大部分)

  • 高级

    逆向(IOT)

  • 顶级

    社会工程学

前置知识

由于工控CTF中常见的就是隐写和协议分析,隐写一般就是常见的流量分析,这里就不赘述了,国资师傅上课的时候并没有将modbus协议的详细介绍,我网上学了点,这里稍微总结一下

这里还有一个学习连接

https://blog.csdn.net/as480133937/article/details/123197782

modbus

Modbus是一种数据通信协议,最初由 Modicon(现为施耐德电气)于 1979 年发布,用于其可编程逻辑控制器(PLC)。Modbus 已成为*事实上的* 标准通信协议,并且是连接工业电子设备的常用方式。

modbus一般分为三种类型

  • modbus ASCII

    modbus ASCII协议采用ASCII码进行消息编码

  • modbus RTU

    modbus RTU采用二进制编码和CRC错误校验,因此配置为modbus ASCII模式的设备无法与modbus RTU进行通信

  • modbus TCP/IP

modbus RTU

modbus RTU采用三种接口进行通信

  • RS-232(通信距离小于15米时使用)
  • RS-485(通信距离大于于15米时使用,比较流行,单位距离下可以接32个从机,接入的从机大于32个就必须使用中继器,通信距离最远可以达到1200m)
  • RS-422(通信距离小于15米时使用)

所有设备必须使用相同的波特率,9600到19600之间。主机可以写从机也可以读从机。主机一般使用的SCADA和HMI等主机设备。必须采用菊花链的方式进行连接,不能使用星型拓扑结构。

modbus TCP/IP(MBAP)

设备之间用网线通过交换机进行连接,RTU模式也可以通过封装为数据包用网线通过交换机进行交换。modbus TCP/IP使用的是MBAP的消息封装方式。

modbus协议定义的数据模型

  • 线圈(访问长度为(位)bit),可读可写
  • 离散量输入(访问长度为(位)bit),只读
  • 输入寄存器(访问长度为(字)word),只读
  • 保持寄存器(访问长度为(字)word),可读可写

modbus协议的地址模型

  • 线圈地址范围(00001-09999)
  • 离散量输入地址范围(10001-19999)
  • 输入寄存器地址范围(30001-39999)
  • 保持寄存器地址范围(40001-49999)

modbus RTU的信息帧

八位地址码+八位功能码+N*8位数据区+16为错误校验码

  • 地址码:每个从机具有唯一的地址码
  • 功能码:协议定义功能码为1-127,如果协议返回的功能码一致,表示从机执行成功1,如果从机返回的功能码最高位为1,表示从机没有响应操作或者发送出错。
  • 数据区:不同的功能码对应的数据区是不一样的。
  • CRC校验码:CRC校验

例题

传统misc

2023_ciscn初赛_Misc-modbus

首先打开文件协议分级分析一下发现是modbus/tcp的协议

image-20230725203159257

通过对功能码的解析,发现该流量包时是读取保持寄存器

image-20230725203614966

image-20230725203637445

然后过滤一个方向的数据包看看发送的消息有没有可能存在隐写,发现果然数据包直接有一个字段值存在规律的,于是我们提取出来是MMYWMX3GNEYWOXZRGAYDA===

image-20230725203858993

解码出来的结果是c1f_fi1g_1000

image-20230725204311697

2023工业互联网安全新疆摩多的RTU

通过题目和给出的文件分析,可以知道这是modbus的RTU协议,于是我们找到对应的RTU协议,然后分析即可

这里新增一个知识点

image-20230725205645802

image-20230725210514452

再对应分析发现就是一个读取从机寄存器数据的报文,于是我们将数据提取出来转换为对应编码即可

\u0066\u006C\u0061\u0067\u007B\u0038\u0062\u0030\u0030\u0064\u0064\u0030\u0031\u0034\u0031\u0033\u0034\u0038\u0061\u0065\u0039\u0066\u0066\u0039\u0061\u0061\u0066\u0063\u0061\u0062\u0035\u0061\u0036\u0030\u0031\u0061\u0037\u007D

flag{8b00dd0141348ae9ff9aafcab5a601a7}

协议分析

2023工业互联网安全江西风机故障分析

简单统计一下,发现还是modbus的报文居多,由于这道题没有给题目描述,所以根据2021年的一道类似的协议分析类型的题来看,应该是找风机转速超过2000的一个协议,然后flag是data段的数据。这是2021年的风机题

https://writeup.ctfhub.com/Challenge/2021/%E5%B7%A5%E4%B8%9A%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E6%8A%80%E8%83%BD%E5%A4%A7%E8%B5%9B/%E7%BA%BF%E4%B8%8A%E8%B5%9B-%E7%AC%AC%E4%B8%80%E5%9C%BA/feG6B8GqBJkg3jv7ZHuZjX.html

于是我们先过滤一下,看看有哪些协议,并且由于是写,我们就只需要找写的报文就行。通过分析发现只有1,2,3,4,6,15,16这些功能码

image-20230725213859489

1234协议码我们知道都是读的,于是排除,然后分析6,15,16功能码,通过分析6功能码发现,只有data为04d2的数据包,于是排除

image-20230725214214122

然后分析15,发现存在两个为0的其他的都为1的。但是不符合题意,于是排除

image-20230725214452124

最后分析16,发现存在一个大于2000的data,其他的都小于2000,于是可以知道就是这个数据包了。

image-20230725214632287

可以知道flag为flag{1000130001020bb8}

image-20230725214658627

上面的分析,是我根据2021年那个题分析的,不一定对,但思路应该差不多

2023工业互联网安全河南modbus

其实这个题就是2022年的河南工业互联网原题,这是wp,于是我们跟着分析一遍即可

http://www.hackdig.com/11/hack-839258.htm

wp里面有另外一种分析规律的办法,其实就是misc的方法,这里没有出,但也是一个分析misc的姿势。

因为没有描述,于是我们就只能一个个分析,大致思路就是一个过滤过去看哪个是异常数据包就行了,最后发现功能码为1的有两个异常数据包

image-20230725220630318

flag为flag{1642+5485}

2023_工业互联网安全大赛_DNS_Query

https://blog.csdn.net/mochu7777777/article/details/131574497原题wp

和平时做的DNS隐写是一样的。发现DNS的qury存在异常,这需要对DNS有足够的了解或者做的misc够多才能发现

image-20230725221507960

tshark 提取

提取 源ip或者目的ip为 8.8.8.8 ,

1
2
dns && ip.dst ==8.8.8.8
tshark.exe -r "DNS_Query.pcapng" -Y "dns && ip.dst ==8.8.8.8" -T fields -e dns.qry.name

提取出来后是很多二进制数据,转换为二维码即可

image-20230725221949369