协议分析
modbus
描述:
黑客通过modbus协议向他的同伙发送了一条秘密信息,通过流量设备我们抓取到了相关的流量包,你能根据流量包找到这条信息么?
exp:
过滤一下 modbus ,追踪第一条数据的 http 流,就能发现 flag
flag为:flag{We1c0meToZXB2023}
异常的流量
描述:
请对提供的流量进行分析,发现可能存在的异常,找出flag,提交格式:flag{xxx}。
exp:
在过滤器中过滤一下 tcp ,追踪一下第一个 tcp 流,选择一下会话往下翻就能发现一串 16 进制,一共有 3 处拼接起来就行,然后我看了一下,我基本每个 tcp 流都会泄露这个串 16 进制,然后进行解码,用 flag{} 包裹就行
flag: flag{EnergyRevolution}
S7Error
描述:
某工厂的工程师发现有一台西门子设备存在资源异常,请分析并找出异常流量的数据包编号。
exp:
过滤器过滤 s7comm,大概了解一下 s7comm 协议,分析 Header 部分,可以看到 Ack_Data 的 Header 中大部分 Error code 是 0x00,说明这种流应该是没有异常的,那我过滤一下不等于 0x00 就行了
Ack_Data:带有返回数据,例如指令是查询内容,返回的就有要查询的东西
s7comm.header.errcod !== 0x00
接下来就是继续观察 Header 部分中的 Error class 错误类型了,可以发现序号为 213056 中的错误类型是 No resources available (0x83) 没用可用资源,就是题目中的资源异常,所以这个流包就是我们要找的序号
flag: flag{213056}
OmronAttack
描述:
某工厂的工程师发现有一台设备存在异常,抓取流量后发现了黑客的端倪,你能协助他分析黑客留下的痕迹吗?
学习:
[工控CTF之协议分析7——OMRON_omron协议-CSDN博客](https://blog.csdn.net/song123sh/article/details/128388409)
思路:
可以猜测黑客的端倪基本要命在读数据,要命在写数据的时候,大概率是在写数据的时候,所以我们过滤一下写数据,并分析可以发现数据包的长度基本都是 **80**,但是下面出现了几个长度为 **86** 的数据包,估计就是黑客写入的数据
omron.command == 0x0102
我们把这几个异常的数据包中的 Command Data 中的数据提取出来,根据我们学习以及猜测,可以发现数据是两两字节存入,需要做前后翻转
9fS4Fcr/0vUj2Sf+0sM4+HCxkhBzyMd47I7RuBEc1MkCczJy1UuAX3Hn
ahevf nu):
写个脚本每两个字节交换一次位置
def swap_bytes(hex_str):
result = []
for i inrange(0, len(hex_str), 4):
byte1 = hex_str[i:i+2]
byte2 = hex_str[i+2:i+4]
result.append(byte2 + byte1)
return''.join(result)
input_hex ="396653344663722f3076556a3253662b30734d342b4843786b68427a794d64343749375275424563314d6b43637a4a79315575415833486e"
output_hex = swap_bytes(input_hex)
print(output_hex)
f94ScF/rv0jUS2+fs04MH+xChkzBMy4dI7R7BucEM1CkzcyJU1Au3XnH
have fun:)
很明显了,思路是对的,下面是 2 个单词,很明显上面应该一段被加密的字符,然后我们对数据包长度排序一下发现在 FINS/TCP 中也存在可疑的数据
都提取出来
5ae1746f6473a56b
35616531373436663634373361353662
跟上面一样每两个字节交换一次位置
a51e47f646375ab6
对 a51e47f646375ab6 进行 md5 解密,结果为 rabbit ,然后将上面那串字符进行 rabbit 解密就行,密钥就是 a51e47f646375ab6
这里有点问题,好像必须要使用 CyberChef 这个工具,目前我没找到其他的解密工具和脚本
flag: flag{40d3b450-8ea3-46bb-b2b8-e69a3d7a50b3}
原文始发于微信公众号(暗魂攻防实验室):暗魂CTF平台-工控-协议分析-writeup