WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

admin 2022年11月22日03:17:42评论186 views字数 4410阅读14分42秒阅读模式
WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

2022年工业信息安全技能大赛 “江苏站”锦标赛 






为提高工业信息安全防护水平,培养专业复合型技术人才,聚力打造国家级工业信息安全技术交流平台,国家工业信息安全发展研究中心将结合五年办赛经验,继续主办2022年第六届工业信息安全技能大赛。


以下,为本次比赛的解题思路分享:

目录

○ 有趣的流量

○ 灯光的异常

○ 异常的 200smart

○ 突发的故障

○ AGV 小车异常失控

○ 恶意的攻击

○ 恶意响应

○ baby_llvm

○ 组态软件异常连接

○ 冗余数据的爆发


01

有趣的流量

某生产车间 PLC 遭受黑客恶意攻击,导致 PLC 执行了很多意外操作,请帮助安全人员分析流量。Flag 格式为:flag{}。 

第 1 步: 使用过滤器

(s7comm.param.func == 0x05) && (s7comm.header.rosctr == 1)”筛选出数据包的工控协议 s7comm 功能码为 05(写变量)的请求包,如下图所示: 

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~



第 2 步: 

经分析可知,筛选出来的每个数据包都对内存地址写了一个字节的值,且写入的值相同,均为 0xFF,只是每次写入的地址不同。 


第 3 步: 

把被写值的地址按附件中图片的格式排列,并把所有被写入的地址(因数据包中的地址是 10 进制格式,附件图片中的地址是按 16 进制排列的,所以要将 10 进制的地址转换为 16 进制标记出来,如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


第 4 步: 

根据附件图片中的提示,逐行把每个被标记的地址记录下来(16 进制表示,字母用大写,只记末位),可直接求得flag: 

flag{54B76BD2F94BD158} 


02

灯光的异常

技术员小明在操作灯光设备时,按下启动按钮其中一个灯光不亮,请帮助小明查找程序上的错误,并改正。 

flag 格式:程序段号码-指令块名称-指令块引脚-更改后的点位。

第 1 步: 

下载并解压附件,通过扩展名可知附件是 TIA Portal 组态的工程,使用 TIA Portal 软件打开,如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


第 2 步: 

工程中只有 OB1 一个程序块,程序块中使用了%I0.0 和%I0.1 两个输入地址,%I0.1 只用来复位了%Q0.1 一个变量没有其它作用,所以启动按钮关联的一定是 I0.0。 


第 3 步: 

经分析,按启动按钮先是给%Q0.0 置位,%Q0.0 会给#a、#a_1 等中间变量赋值。同时又对这些值进行分组判断后控制%M0.0,%M0.1 和%M0.2 三个变量。


当%Q0.0 为 true 会进行一些判断(就是判断这些变量是否等于被赋的值)然后点亮%M0.0~%M0.2。 


问题就出在进行判断时用到了#a_8,而赋值的时还没有给它赋值,而赋值的变量中又有#a_12 没用来判断,其它的都正好一一对应,且值也正确。如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


第 4 步: 

将上图中的#a_12 改为#a_8 就可以解决问题。按题目的格式说明可得 flag: 

Flag{7-MOVE-OUT1-#a_8} 

如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


03

异常的 200smart

有一台 ip 为 192.168.2.1,端口为 502 的西门子 200smart 作为 modbus 服务器使用,现在使用 modbus tcp 无法进行采集请帮帮我flag 格式{指令名称 _端口引脚名称_端口号_最大 IO 引脚名称 _数量} 

第 1 步: 

用 200smart 专用的编程软件打开附件,第一个程序段就是用于作 modbus 服务器的功能块,如下图所示:可直接猜测到应该是编程人员把端口号和最大 IO 数量两个参数写混了,如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


第 2 步 

将程序修改正确,并按格式要求提取 flag: 

flag{MBUS_SERVER_IPPort_502_MaxIQ_256} 如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


04

突发的故障

小王为流水线操作工,某天设备突发故障导致生产线突然停了下来,经过维修确定故障已经排除,但是小王按下启动按钮 A 时设备运行指示灯 C 并没有运行,即 A=1 时 C≠1 请帮小王分析分析原因,说明怎样操作才能使设备重新运行起来。

举例:按下 X(按钮)持续 D(秒)以上得 F(点位)=G(数值) 

则 flag 为 flag{X=1andX>=5S-F=G} 


第 1 步: 

下载并解压附件,通过扩展名可知附件是 TIA Portal 组态的工程,使用 TIA Portal 软件打开,如下图所示:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


第 2 步: 

经分析程序可知,A 不能点亮 C 唯一的可能就是 D 为 true,导致其常闭触点断开,使得 A 的信号无法传递给 C。要解决该问题就需要给 D 复位,使它为false,而程序中只有在 B 为 ture 且不少于 5 秒后 D 才会被复位。因此,按钮 flag要求的格式可求得:Flag{B=1andB>=5S-D=0} 


05

AGV 小车异常失控

某运输行业的智慧展厅中的 agv 小车没有按照正常的轨迹运行并间接的导致失控,现场的运维人员在查看工业防护平台时发现 avg 小车失控是黑客攻击导致,请帮助运维人员找到该流量包中异常流量。Flag 为异常流量数据中的前 8 位。Flag 格式为 flag{}。 


第 1 步:

过滤 COTP 得到,然后找到下面的流量

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


Flag 为 data 前八个数:flag{60123234}


06

恶意的攻击

检测人员小张发现现场的生产设备出现故障,并及时捕获流量,发现存在恶意攻击并留下了痕迹,你能找到恶意工具存在的证据吗。flag为flag{}


查看流量,

得到646c6b7979647321 hex转一下 得到dlkyyds!


07

恶意响应

某钢铁生产车间的PLC设备被恶意攻击,安全人员及时捕获了现场黑客攻击的流量,请帮助安全人员找到被攻击的流量编号。Flag格式为:flag{}。

 

查看流量发现协议为omron协议,根据题目着重关注一下响应部分,找到响应response code发现其他功能码的部分都是0x0000,代表正常完成有一个序号为6484的包响应码为0x0f0f


推测这个包为恶意相应的包

flag为flag{6484}


08

baby_llvm

bc是什么文件呢?

bc文件是llvm的中间语言IR,用clang编译成elf文件即可用ida静态分析

C++程序逻辑很简单就是一个移位操作int __cdecl main(int argc, const char **argv, const char **envp){  unsigned int v3; // eax  char s[44]; // [rsp+10h] [rbp-30h] BYREF  int v6; // [rsp+3Ch] [rbp-4h]  v6 = 0;    __isoc99_scanf("%39s", s);  v3 = strlen(s);    if ( (unsigned int)ch4ck(s, v3) )    printf("Is not a correct flag!n");    else    printf("you get it! flag is: %sn", s);  return 0;}
__int64 __fastcall ch4ck(__int64 a1, int a2){  int i; // [rsp+0h] [rbp-1Ch] if ( a2 == 35 )  {    for ( i = 0; i < 35; ++i )    {      if ( ((unsigned __int8)(16 * *(_BYTE *)(a1 + i)) | (*(char *)(a1 + i) >> 4)) != enc[i] )        return (unsigned int)-1;    }    return 0;  }    else  {    return (unsigned int)-2;  }}

就是一个简单的移位操作,Z3解之即可,脚本如下:

Pythondata = [ 102,  198,  22,  118,  183,  54,  3,  230,  118,  39,  67,  71,  87,  19,  22,  71,  86,  245,  134,  67,  54,  182,  245,  71,  134,  86,  245,  196,  196,  101,  212,  245,  148,  37,  215]
from z3 import *a = [z3.BitVec("p%d" % i, 8)for i in range(35)]b = [0]*35s=Solver()
for i in range(len(a)): b[i] = a[i]*16|a[i]>>4
for i in range(len(a)):        s.add(b[i]==data[i])s.check()==satanswer=s.model()flag = []
for i in range(len(answer)):        #print (input[i])        # flag.append(answer[a[i]].as_long())        flag.append(chr(answer[a[i]].as_long()))        # print (flagprint (''.join(flag)) # flag{c0ngr4tu1ate_h4ck_the_LLVM_IR}

09

组态软件异常连接

小张是工厂的运维人员,在某天的运维中,检测出了wincc组态软件无法连接S7-400,于是运维人员抓取流量,请根据抓取的流量,判断组态软件连接故障并找出隐藏的flag

 

strings一下,发现有一个很像16进制的字符串:656d75696d676f6b796c676d707764

解码后为这个emuimgokylgmpwd

找到在流量包里是1099 ,字符串分开了,所有猜测最后pwd为key

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


根据附件的文件名称可以确定加密方式

看到和工控的拼音大概有关系

所以flag为flag{gkongaqisfag}


10

冗余数据的爆发

某工控现场设备遭受到了恶意攻击,并及时捕获了流量,经发现在流量包中,存在被黑客攻击的流量。你能找到这些恶意攻击的流量吗。flag为恶意攻击流量的数据包总和。flag格式flag{}

 

里面含有两个协议,modbus和s7comm,先来看看s7comm协议

在 PDU reference出现异常,正常来说应在高字节+1,但是在8300,22556,25381三个包传输递增不正常,且两者的请求和响应不一致,例如8300:

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~


所有攻击流量相加8300+22556+25381的和56237即为Flag

最终答案为flag{56237}




往期回顾


WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

tp6.0.13反序列化漏洞

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

XSS攻击思路总结

WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

Blackhat议题分享:WebAssembly漏洞挖掘与虚拟机逃逸



WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~
WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~

扫码关注我们


天虞实验室为赛宁网安旗下专业技术团队,重点攻关公司业务相关信息安全前沿技术。

原文始发于微信公众号(天虞实验室):WriteUp|2022年工业信息安全技能大赛 “江苏站”锦标赛解题思路分享~

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月22日03:17:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WriteUp|2022年工业信息安全技能大赛 江苏站锦标赛解题思路分享~http://cn-sec.com/archives/1421924.html

发表评论

匿名网友 填写信息