Message Type: [1b]消息的一般类型(有时称为ROSCTR类型),消息的其余部分在很大程度上取决于Message Type和功能代码。
0x01- Job Request:主站发送的请求(例如读/写存储器,读/写块,启动/停止设备,通信设置)
0x02- Ack:从站发送的简单确认没有数据字段(从未见过它由S300 / S400设备发送)
x03- Ack-Data:带有可选数据字段的确认,包含对作业请求的回复
0x07- Userdata:原始协议的扩展,参数字段包含请求/响应id,(用于编程/调试,SZL读取,安全功能,时间设置,循环读取…)
Reserved: [2b]始终设置为0x0000(但可能忽略)
PDU reference: [2b]由主站生成,每次新传输递增,用于链接对其请求的响应,Little-Endian(注意:这是WinCC,Step7和其他西门子程序的行为,它可能是随机的生成后,PLC只将其复制到回复中)
Parameter Length: [2b]参数字段的长度,Big-EndianData Length: [2b]数据字段的长度,Big-Endian

其实这里就只用记住他的特征码就知道他干了什么(异常中,不一样的):
0x01,硬件错误0x03,想访问的东西不让访问0x05,地址越界了0x06,你请求的数据类型和请求的”东西“的数据类型不一致
数据读取/与写入(0x04和0x05):


功能码:

区域类型:

ISC工业互联网比赛题目复现:
Modbus协议分析:
2019-工业信息安全技能大赛-深圳站-Modbus协议分析
黑客通过外网进入一家工厂的控制网络,之后对工控网络中的操作员站系统进行了攻击,最终通过工控协议破坏了正常的业务。我们得到了操作员站在攻击前后的网络流量数据包,我们需要分析流量中的蛛丝马迹,找到FLAG。格式为flag{}
一般这种题目就是使用脚本提取然后 查看常见协议的功能码 然后在进一步分析。
这里是Moudbus协议而且是Modbus/TCP的脚本提取
import pyshark
def get\_code():
captures = pyshark.FileCapture("Modbus.pcap")
func_codes = {}
for c in captures:
for pkt in c:
if pkt.layer_name == "modbus":
func_code = int(pkt.func_code)
if func_code in func_codes:
func_codes[func_code] += 1
else:
func_codes[func_code] = 1
print(func_codes)
if __name__ == '\_\_main\_\_':
get_code()

四个功能码都出现了702次,唯独16(预置多个寄存器)功能码只出现了两次,所以猜测与16功能码相关的流量可能存在关键数据,于是运行脚本分析与16功能码相关的流量,提取其中的数据,脚本和运行结果如下:
import pyshark
def find\_flag():
cap = pyshark.FileCapture("Modbus.pcap")
idx = 1
for c in cap:
for pkt in c:
func_code = int(pkt.func_code)
if pkt.layer_name == "modbus" and if func_code == 16:
payload = str(c["TCP"].payload).replace(":", "")
print(hex_to_ascii(payload))
print("{0} \*".format(idx))
idx += 1
def hex\_to\_ascii(payload):
data = payload
flags = []
for d in data:
_ord = ord(d)
if (_ord > 0) and (_ord < 128):
flags.append(chr(_ord))
return ''.join(flags)
if __name__ == '\_\_main\_\_':
find_flag()
将16进制字符串在线转换对应的ASII码,得到TheModbusProtocolIsFunny!
flag{TheModbusProtocolIsFunny!}
组态软件安全分析:
2019-工业信息安全技能大赛-深圳站-组态软件安全分析
一些组态软件中进行会配置连接很多PLC设备信息。我们在SCADA 工程中写入了flag字段,请获取该工程flag,flag形式为 flag{}。
放入010 发现是PK 头修改zip后缀 因为文件比较多直接放入kali 使用 grep 进行过滤 找flag。
grep -r "flag" ./



flag{D076-4D7E-92AC-A05ACB788292}
工业协议分析1:
2019-工业信息安全技能大赛-深圳站-工业协议分

_工控ctf&spm=1001.2101.3001.5002&articleId=141577765&d=1&t=3&u=ae91b8c9220741678c1b35de14c81455)
1138

被折叠的 条评论
为什么被折叠?



