工控流量分析
Modbus 工控流量分析
文章
https://blog.csdn.net/song123sh/article/details/128387982
Modbus流量分为三类,Modbus TCP | Modbus ASCLL | Modbus RTU
TCP中主要考查功能码如下
1 | 1:读线圈 |
先过滤出所有modbus流量
可以在这里过滤想要的特定功能的流量

右键选定作为过滤器应用
常规过滤命令
1 | (((_ws.col.protocol == "Modbus/TCP") ) && (modbus.byte_cnt)) && (modbus.func_code == 16) |
16号功能码(写多个寄存器)在正常工控系统中使用频率很低,但在CTF里往往藏着关键信息。它的协议结构很有特点:
1 | 起始地址(2字节) |
题目
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 | initiate(可以理解为握手) |
常见的confirmedService有
1 | 对象操作 |
常见解题方法:查看统计中分组长度、协议占比找到异常流量;统计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 | 7h756h7d646173617g |
但是直接解密并不对
而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} |
