Wireshark不止抓包:解锁工控协议S7comm和Modbus的CTF流量分析技巧
Wireshark不止抓包解锁工控协议S7comm和Modbus的CTF流量分析技巧工业控制系统ICS安全正成为网络安全领域的新战场。在CTF竞赛中工控协议流量分析题目往往让选手们望而生畏——这些协议不像HTTP那样直观数据包结构复杂字段含义晦涩难懂。但掌握S7comm和Modbus协议的分析技巧你就能在工控安全赛题中脱颖而出。1. 工控协议基础理解S7comm与Modbus的DNA工控协议与常见网络协议存在本质差异。它们为工业环境设计强调实时性和确定性牺牲了传统TCP/IP协议中的安全机制。这种特性使得工控协议成为CTF出题者的心头好。S7comm协议是西门子S7系列PLC的专属协议采用请求-响应模式。关键特征包括固定使用TCP/102端口通信以TPKT和ISO-COTP协议为传输层数据包中常包含ROSCTR、PDU Reference等特殊字段# 典型S7comm数据包结构示例 { TPKT: {Version: 3, Length: 66}, ISO-COTP: {PDU Type: DT Data, DST-REF: 0x0000}, S7comm: { Protocol ID: 0x32, ROSCTR: Job, Function: Write Var } }Modbus协议则是工业领域的HTTP采用主从架构。关键识别特征包括常用TCP/502端口事务标识符协议标识符的固定头部功能码决定数据包类型如0x03读保持寄存器表S7comm与Modbus协议关键字段对比特征S7commModbus TCP默认端口102502头部长度18-21字节7字节关键字段ROSCTR、PDU Reference事务ID、功能码数据编码混合编码含BCD码纯二进制典型操作Read/Write VarRead Holding Registers提示工控协议分析首要任务是确认协议类型。可通过端口、特征字节如S7comm的0x32快速识别。2. Wireshark高级过滤精准捕获工控协议流量常规的tcp.port 102过滤太过宽泛。工控协议分析需要更精确的过滤策略特别是处理混合流量时。S7comm协议过滤技巧# 过滤S7comm作业请求 s7comm.rosctr 1 # 筛选Write Var操作 s7comm.function 0x05 # 提取响应数据字段 s7comm.resp.dataModbus协议过滤技巧# 过滤读寄存器操作 modbus.func_code 0x03 # 筛选异常响应 modbus.exception 1 # 定位特定寄存器地址 modbus.reference_num 0x0001实战案例在某次CTF中题目给出混合流量的pcap文件要求找出异常的PLC写入操作。通过组合过滤s7comm.rosctr 1 s7comm.function 0x05 frame contains flag在数据包列表中发现可疑的Write Var操作其数据段包含异常长的十六进制串经解码后获得flag。3. tshark命令行批量提取协议数据的瑞士军刀当处理大型pcap文件时GUI界面可能力不从心。tshark命令行工具能高效提取特定字段特别适合工控协议分析。S7comm数据提取实战tshark -r s7_traffic.pcap -Y s7comm.resp.data -T fields -e s7comm.resp.data | grep -v ^$ extracted_data.txt该命令实现读取s7_traffic.pcap文件过滤出包含响应数据的包提取s7comm.resp.data字段去除空行后保存到文件Modbus寄存器读取自动化tshark -r modbus.pcap -Y modbus.func_code3 modbus.regnum100 -T fields -e modbus.data -E separator, register_100.csv输出CSV格式便于后续处理。曾用此方法在比赛中快速提取2000多个寄存器值发现异常数据模式。表tshark常用参数解析参数作用工控分析典型值-Y显示过滤器s7comm.resp.data长度10-T fields指定输出字段-e modbus.data -e frame.time-E字段输出选项separator, occurrencef-e提取特定字段s7comm.resp.data-l实时刷新输出配合管道操作实时分析注意工控协议字段名可能因Wireshark版本而异建议先用tshark -G fields | grep s7comm确认字段名称。4. 二进制数据解码从工控协议到Flag的最后一公里工控协议数据段常采用特殊编码方式需要掌握多种解码技巧才能提取有效信息。常见编码类型及处理方法BCD编码西门子PLC常用# BCD转ASCII示例 def bcd_to_ascii(hex_str): return .join([chr(int(hex_str[i:i2], 16)) for i in range(0, len(hex_str), 2)])大端序数值Modbus寄存器常见# 使用dd转换字节序 echo 00 01 | xxd -r -p | dd convswab 2/dev/null | xxd -p分段二进制如S7comm的响应数据# 处理分段二进制数据 binary_str 01100110 01101100 01100001 flag .join([chr(int(b, 2)) for b in binary_str.split()])实战案例解析 在某次CTF中发现Modbus响应数据包含异常寄存器值Register 300: 0x666C Register 301: 0x6167 Register 302: 0x7B64 ...将这些十六进制值转换为ASCII字符后拼接得到flag字符串。5. 异常流量识别工控CTF的隐藏考点工控环境的异常流量往往更加隐蔽需要关注以下特征非典型功能码如Modbus的0x2B诊断功能异常时序工控通信通常有固定周期数据突变传感器数值突然跳变协议违规如S7comm的PDU长度异常Wireshark统计功能应用通过Statistics Protocol Hierarchy查看协议分布使用Conversations分析通信对端利用IO Graphs绘制流量时序特征在一次真实比赛中通过IO Graphs发现每5秒的周期性通信中出现异常突发流量追踪这些数据包发现被植入的恶意指令其中包含flag信息。6. 实战演练从pcap到flag的完整流程让我们通过一个模拟案例串联所有技巧。给定s7_ctf.pcap文件要求找出隐藏flag。步骤1协议识别tshark -r s7_ctf.pcap -qz io,phs输出显示主要流量集中在TCP/102端口确认是S7comm协议。步骤2异常操作筛选tshark -r s7_ctf.pcap -Y s7comm.function 0x05 frame.len 100 -V发现多个超长的Write Var操作可疑性高。步骤3数据提取tshark -r s7_ctf.pcap -Y frame contains 32 01 00 -T fields -e s7comm.resp.data data.txt步骤4二进制解码with open(data.txt) as f: for line in f: if line.strip(): print(.join([chr(int(b, 2)) for b in line.split()]))输出显示flag{industrial_ctf_challenge}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2579246.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!