bakamu
文章9
标签6
分类6

文章归档

工控流量分析

工控流量分析

Modbus 工控流量分析

文章
https://blog.csdn.net/song123sh/article/details/128387982

Modbus流量分为三类,Modbus TCP | Modbus ASCLL | Modbus RTU
TCP中主要考查功能码如下

1
2
3
4
5
6
7
8
1:读线圈 
2:读离散输入
3:读保持
4:读输入
5:写单个线圈
6:写单个保持
15:写多个线圈
16:写多个保持

先过滤出所有modbus流量
可以在这里过滤想要的特定功能的流量

右键选定作为过滤器应用

常规过滤命令

1
(((_ws.col.protocol == "Modbus/TCP") ) && (modbus.byte_cnt)) && (modbus.func_code == 16)

16号功能码(写多个寄存器)在正常工控系统中使用频率很低,但在CTF里往往藏着关键信息。它的协议结构很有特点:

1
2
3
4
起始地址(2字节)
寄存器数量(2字节)
字节计数(1字节)
寄存器值(N字节)

题目

2025振兴杯-modbus-玄机

由于是温度问题,所以可能是写入操作存在问题,查看func:16并过滤
找到温度设定的操作

依次把末四位转化为浮点数,看一下有没有超过温度
最终发现

复制Modbus/TCP16进制内容

1
flag{0c010000000b01100016000204441fe3d7}

老鸡汤-公交车司机-循镜

拿到流量包后,统计发现都是写入操作的流量,总共150条

分析tcp流量并无异常,于是提取出所有写入寄存器的值

1
tshark -r modbus.pcapng -Y "modbus.func_code == 16" -V | grep -E "Register Value \(UINT16\):" | sed 's/.*: //' | awk '{printf "%02x", $1}'

得到所有值的16进制表示

1
00000000000001020304050607050401070805797c06070220b201bb422e1705382005392d03252d343817192f2b01102d050400000000000000000000000000000000363636633631363737623331333433323334333033313335333932643337363633333336326433343633333333363264363233343336363132643337333436313336363133363634363536343338333436313764

转化为10进制可以发现flag的16进制表示

1
tshark -r modbus.pcapng -Y "modbus.func_code == 16" -V | grep -E "Register Value \(UINT16\):" | sed 's/.*: //' | awk '{printf "%c", $1}'

或者

1
666c61677b31343234303135392d376633362d346333362d623436612d3734613661366465643834617d

得到flag

1
flag{14240159-7f36-4c36-b46a-74a6a6ded84a}

MMS工控流量分析

一般出现在智能电子设备中
流量包类型有

1
2
3
4
5
6
7
8
9
10
11
initiate(可以理解为握手)

initiate-RequestPDU

initiate-ResponsePDU

confirmed(可以理解为交互,即传数据)

confirmed-RequestPDU

confirmed-ResponsePDU

常见的confirmedService有

1
2
3
4
5
6
7
8
9
10
11
12
对象操作
getNameList (1)(获取对象名)
read (4)
write (5)
getVariableAccessAttributes (6)
getNamedVariableListAttributes (12)

文件操作
fileOpen (72)
fileRead (73)
fileClose (74)
fileDirectory (77)

常见解题方法:查看统计中分组长度、协议占比找到异常流量;统计itemId查看异常数据

题目

工控-MMS协议分析-玄机

打开流量包后显示MMS/IEC6185流量
首先是过滤出MMS流量包
注意到请求基本是一请求一恢复

分析read(4)

会发现itemId存在变化

1
tshark -r '/mnt/d/mis杂项/玄机/miscer/工控/12.MMS协议分析/MMS协议分析.pcap' -d tcp.port==102,tpkt -T fields -e mms.itemId | sort | uniq -c | sort -nr

统计所有itemTd的种类和数量

可以发现最后两个itemId除去L是16进制,66开头像是flag的开头

1
2
7h756h7d646173617g
666f61677e49435366

但是直接解密并不对
而666c是fl,所以猜测对其进行了移位处理,即向后移了3位,导致c变成f,于是凯撒3位后再转换成ascll得到flag

666c61677b49435366I7e756e7a646173617d

1
flag{ICSf~unzdasa}

S7comm工控流量分析

西门子设备的工控协议,基于 COTP 实现,是COTP的上层协议
它运行在 TCP/IP 之上,默认使用 102 端口
主要有三种类型
Job(1)、Ack_Data(3)/Ack(2)、Userdata(7)
Job:下发任务/指令
Ack_Data:带有返回数据
Ack:单纯确认,含有数据
Userdata:用户自定义数据区,也包含功能指令

常规做题方法:查看返回数据、任务数据
tshark -r 1.pcap -T fields -e s7comm.resp.data | uniq

题目

工控-S7协议-玄机

依旧先过滤出s7comm流量包

也是一下发任务一个回复,查看Ack_Data返回数据有没有信息
搜索发现flag

1
flag{Congratulationsonthethrough}
本文作者:bakamu
本文链接:http://example.com/2026/05/18/%E5%B7%A5%E6%8E%A7%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
糖糖的AI分身(BETA)
如果加载时间过长,可尝试打开系统代理