工控其实就是工业控制自动化,实际上是属于自动化的一部分。
工业自动化是在工业生产中广泛采用自动控制、自动调整装置,用以代替人工操纵机器和机器体系进行加工生产的趋势。在工业生产自动化条件下,人只是间接地照管和监督机器进行生产。
-
现场表计(电,气,液)动机构
-
逻辑控制系统,也就是PLC和DCS
-
上位机(操作员控制系统)
-
初级
杂项(隐写,逆向,取证,脑洞,爆破)
-
中级
协议分析,组态分析(大部分)
-
高级
逆向(IOT)
-
顶级
社会工程学
由于工控CTF中常见的就是隐写和协议分析,隐写一般就是常见的流量分析,这里就不赘述了,国资师傅上课的时候并没有将modbus协议的详细介绍,我网上学了点,这里稍微总结一下。
https://blog.csdn.net/as480133937/article/details/123197782
Modbus是一种数据通信协议,最初由Modicon(现为施耐德电气)于1979 年发布,用于其可编程逻辑控制器(PLC)。Modbus已成为事实上的标准通信协议,并且是连接工业电子设备的常用方式。
-
modbus ASCII协议采用ASCII码进行消息编码
-
modbus RTU采用二进制编码和CRC错误校验,因此配置为modbus ASCII模式的设备无法与modbus RTU进行通信
-
modbus RTU
-
-
RS-485(通信距离大于于15米时使用,比较流行,单位距离下可以接32个从机,接入的从机大于32个就必须使用中继器,通信距离最远可以达到1200m)
-
所有设备必须使用相同的波特率,9600到19600之间。主机可以写从机也可以读从机。主机一般使用的SCADA和HMI等主机设备。必须采用菊花链的方式进行连接,不能使用星型拓扑结构。
设备之间用网线通过交换机进行连接,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,表示从机没有响应操作或者发送出错。
-
-
传统misc
2023_ciscn初赛_Misc-modbus
首先打开文件协议分级分析一下发现是modbus/tcp的协议。
通过对功能码的解析,发现该流量包时是读取保持寄存器。
然后过滤一个方向的数据包看看发送的消息有没有可能存在隐写,发现果然数据包直接有一个字段值存在规律的,于是我们提取出来是MMYWMX3GNEYWOXZRGAYDA===。
通过题目和给出的文件分析,可以知道这是modbus的RTU协议,于是我们找到对应的RTU协议,然后分析即可。
再对应分析发现就是一个读取从机寄存器数据的报文,于是我们将数据提取出来转换为对应编码即可。
u0066u006Cu0061u0067u007Bu0038u0062u0030u0030u0064u0064u0030u0031u0034u0031u0033u0034u0038u0061u0065u0039u0066u0066u0039u0061u0061u0066u0063u0061u0062u0035u0061u0036u0030u0031u0061u0037u007D
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这些功能码。
1234协议码我们知道都是读的,于是排除,然后分析6,15,16功能码,通过分析6功能码发现,只有data为04d2的数据包,于是排除。
然后分析15,发现存在两个为0的其他的都为1的。但是不符合题意,于是排除。
最后分析16,发现存在一个大于2000的data,其他的都小于2000,于是可以知道就是这个数据包了。
可以知道flag为flag{1000130001020bb8}
上面的分析,是我根据2021年那个题分析的,不一定对,但思路应该差不多。
2023工业互联网安全河南modbus
其实这个题就是2022年的河南工业互联网原题,这是wp,于是我们跟着分析一遍即可。
http://www.hackdig.com/11/hack-839258.htm
wp里面有另外一种分析规律的办法,其实就是misc的方法,这里没有出,但也是一个分析misc的姿势。
因为没有描述,于是我们就只能一个个分析,大致思路就是一个过滤过去看哪个是异常数据包就行了,最后发现功能码为1的有两个异常数据包。
flag为flag{1642+5485}
https://blog.csdn.net/mochu7777777/article/details/131574497原题wp。
和平时做的DNS隐写是一样的。发现DNS的qury存在异常,这需要对DNS有足够的了解或者做的misc够多才能发现。
tshark.exe -r "DNS_Query.pcapng" -Y "dns && ip.dst ==8.8.8.8" -T fields -e dns.qry.name
原文始发于微信公众号(道格安全):工控CTF | 44期
评论