记MapnaCTF2024的两题PLC流量

这是一篇赛后复现的文章,做题的时候犯了一些错误,仅作记录警醒自己。

Forensics/PLC I

The MAPNA CERT team has identified an intrusion into the plant’s PLCs, discovering a covert message transferred to the PLC. Can you uncover this secret message?
MAPNA CERT 团队发现了对工厂 PLC 的入侵,发现了传输到 PLC 的秘密消息。你能揭开这个秘密信息吗?

Files: PLC_0829b4ef9780677086043add8592e996f21e0bbe.txz

随手翻就能看到一些奇怪的,连续的,可读的字符串。

掏出神奇的string,你会得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
>>>strings plc.pcap              
4-"@
(-#@
>-$@
A-%@
/-&@
I-'@
/-(@
I-)@
/-*@
I-+@
/-,@
I--@
3:Ld_4lW4 <---
6ES7 151-8AB01-0AB0
/-.@
E-/@
/-0@
I-1@
/-2@
I-3@
IM151-8 PN/DP CPU
/-4@
5:3__PaAD <---
E-5@
/-6@
1:MAPNA{y <---
E-7@
/-8@
4:yS__CaR <---
O-9@
# !
/-:@
E-;@
/-<@
6:d1n9!!} <---
E-=@
Y3td
/->@
2:0U_sHOu <---
(-?@

善良的出题人还告诉了我们顺序!所以flag是MAPNA{y0U_sHOuLd_4lW4yS__CaR3__PaADd1n9!!}

Forensics/PLC Ⅱ

After extensive investigations, the MAPNA forensics team discovered that the attackers attempted to manipulate the PLC time. Please identify the precise time in the following format: year:month:day:hour:minute:second:millisecond. The flag is MAPNA{sha256(datetime)}.
经过广泛的调查,MACNA取证团队发现攻击者试图操纵PLC时间。请按以下格式标识精确时间:年:月:日:小时:分钟:秒:毫秒。标志为 MAPNA{sha256(datetime)}。

Files: PLC_0829b4ef9780677086043add8592e996f21e0bbe.txz

拿到流量包发现全部都是TCP流量,显然应该就提取data数据,然后分析具体是什么协议了。

题目的名字的为PLC,这意味着这是一道工控设备的流量题,通过第29条流量我们甚至可以直接发现设备的型号为:IM151-8 PN/DP CPU,这是西门子旗下的一款设备。

image-20240123104911593

循着这个思路下去就是分析这款设备如何修改时间,这里我走进了一个误区,去翻阅了这款cpu的手册找到了它”使用 PROFINET 进行时间同步”。仔细研究profinet这个协议之后我卡住了,因为它和TCP没有毛关系。

事实上这个是相对底层的东西,不是很重要。(这里我也问了LLM,它也把我往这方面去引导了T^T)我们需要知道的是:

  1. IM151-8是什么:西门子工业自动化领域的产品系列之一,属于西门子的S7-1500系列。
  2. 怎么使用它:STEP 7是用于编程、配置和维护SIMATIC S7控制器的软件工具。
  3. 工控软件的协议是什么:S7 协议是 SIEMENS S7系列产品之间通讯使用的标准协议

因此S7协议才是这里的流量真正归属的协议。

再介绍一下,来自sealldev的智慧,在他们的wp中他们截取了tcp.data起始部分03000016使用github的code search功能找到了相关的脚本,进而确定了协议

image-20240123112840406

wireshark wiki在S7comm中提到了设置时间的例子

在示例中我们可以找到设置时间(set time)的43号流量,并且关注到表示设置时间的特征数值:4702(如图所示,4代表请求,7代表时间函数,02代表设置时间的子函数)

image-20240123122837950

因此我们在题目附件plc.pcap的分组字节流中进行十六进制值的搜索即可。

以下是我的搜索结果:

image-20240123123238801

时间戳就是00202309211959599490,解析结果是2023:09:21:19:59:29:949,依照题目要求进行sha256即可。

附录

S7 Timestamp

以题目PLCⅡ中的00202309211959599490为例进行解析

位置 含义 示例
0x00 保留,一般为0x00 00
0x01 年1 20
0x02 年2 23
0x03 09
0x04 21
0x05 19
0x06 59
0x07 59
0x08~0x0a 毫秒(逆序) 0949

相关阅读

小反思

  1. 对流量的特征进行搜索,最简单的方式就是截取数据头部
  2. 别太相信LLM,他们鬼话太多了。
  3. 匍匐在伟大的github code search之下吧!