2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp

文章目录

    • 前言
    • 赛题
    • MISC
      • MISC1 工程文件分析
      • MISC2 风机故障分析
      • MISC3 modbus流量分析
      • MISC4 流量中的神秘信息
      • MISC5 PLC流量分析
      • MISC6 PLC协议分析
      • MISC7 攻击前的工控资产探测
    • CRYPTO
      • crypto1 PLC固件分析
      • crypto2 工控勒索病毒
      • crypto3 简单RSA算法
    • PPC
      • PPC1 梯形图分析-1
      • PPC2 梯形图分析2
      • PPC3 被截获的机密文件
    • REVERSE
      • REVERSE1 工控路由器固件分析
      • REVERSE2 工控仿真环境故障取证分析
    • STEGA
      • STEGA1 组态文件中的隐藏信息
      • STEGA2 PLC图片分析
      • STEGA3 工控主机中的异常文件
    • 后记

前言

2022江西省·振兴杯·数字经济职业技能竞赛 & 中国工业互联网安全大赛·江西选拔赛 初赛
9月7号比赛打完,感谢队友带飞,记录一下我们队伍的wp,没有全部解出来,若对wp有所补充,也可以评论留言或私聊我,希望能对大家有所启发和帮助

我希望许过的愿望一路生花
护送那时的梦抵挡过风沙

赛题

这里提供一个赛题的网盘链接,来源与竞赛官方微信群的一位师傅,在这里向Ta表示感谢,仅供各位师傅复现参考
链接:https://pan.baidu.com/s/14kBsFGd-jY9lbxmhPDorsQ
提取码:qwer

MISC

MISC1 工程文件分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第1张图片

暂无wp,后续补充

MISC2 风机故障分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第2张图片
过滤modbus流量,过滤条件
modbus && modbus.func_code==16
看到如下数据包:
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第3张图片
可以看到这个包写入寄存器的数值为500,题目要求找到转速超过2300的第一个包,因而按照时间排序,得到转速为3000,取16进制值即为flag
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第4张图片
flag{0x0bb8}

MISC3 modbus流量分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第5张图片
过滤modbus协议,按照时间排序,发现长度异常的流量包,对寄存器写入的值比较奇怪
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第6张图片
将所有写入值写出如下,与flag{的ASCII码对比可以发现这串数值的每两个数的差与flag{串的ASCII码差值像等,且上面的差值为正数时下面的差值就为负数,可以逐个推出flag

153  147  158  152  132  146  144 155  157  138  140  160  150  140  160  154  158  140  134  130
   -5   +11  -6   -20
f    l    a    g    {
102  108  97   103  123
   +5   -11  +6   +20

这里直接写了个脚本

m='153,147,158,152,132,146,144,155,157,138,140,160,150,140,160,154,158,140,134,130'
m=m.split(',')
#flag{modbus_is_easy}
flag='f'
for i in range(len(m)-1):
	t=int(m[i+1])-int(m[i])
	flag+=chr(ord(flag[i])-t)
print(flag)

flag{modbus_is_easy}

MISC4 流量中的神秘信息

在这里插入图片描述
s7comm协议分析,wireshark过滤s7comm协议,追踪TCP流发现flag字符串
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第7张图片
把所有字符串找出如下flag{d2UxY29tZVQwQ2hpbmE=}
base64解码得
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第8张图片
flag{we1comeT0China}

MISC5 PLC流量分析

在这里插入图片描述
这题的提示为flag是大于两个字符的字符串,过滤s7comm协议按数据包长度排序发现 fake flag
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第9张图片
根据s7comm协议,找到另外两个传输的数据分别为R3和41
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第10张图片
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第11张图片
结合fake flag和提示最终得到
flag{R341_flag}

MISC6 PLC协议分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第12张图片
查看流量包,追踪TCP流,发现aes.key和enc_flag.bin文件
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第13张图片
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第14张图片
分析流量包可以得到AES密文和密钥
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第15张图片
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第16张图片
由密文和密钥可以直接AES解密

from Crypto.Cipher import AES
password = b'\xde\xad\xc0\xde\xde\xad\xc0\xde\xde\xad\xc0\xde\xde\xad\xc0\xde' #秘钥,b就是表示为bytes类型
aes = AES.new(password,AES.MODE_ECB) #创建一个aes对象
# AES.MODE_ECB 表示模式是ECB模式
en_text=b'\x25\x5f\x58\xa0\xa8\x9f\x39\xf0\xd2\x62\x52\xf6\xd9\x84\x61\xa3'
den_text = aes.decrypt(en_text) # 解密密文
print("明文:",den_text)

flag{c0desysv2#}

MISC7 攻击前的工控资产探测

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第17张图片
这里有点离谱,提示说是需要找到设备的序列号,结果试了好多次没有试出来…
过滤COTP协议,追踪TCP流,好在数据包不是很多,在第3个TCP流中发现比较像序列号的字符
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第18张图片
百度发现还真有这个设备
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第19张图片
于是兴奋的拿去提交,结果错误,一直在想这flag是个什么格式?最后试出来是后面那串字符串
flag{SZVE8YEC030519}

CRYPTO

crypto1 PLC固件分析

在这里插入图片描述
暂无wp

crypto2 工控勒索病毒

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第20张图片
解压cat.zip得到cat.exe和flag.enc,把cat.exe拖进IDA32里查看,程序执行的流程比较复杂,但是仔细观察数组不难发现程序主要是打开当前目录下的一个flag文件进行DES加密后写入flag.enc文件中
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第21张图片
知道了这个原理后可以取巧了,用python调用cat.exe执行,因为已知flag的格式为’flag{xxx}',且flag.enc中共有16个字节如下:
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第22张图片
因而我们伪造一个flag文件,其中写入flag{1111111111},其加密后的前几个字节应该和flag.enc前几个字节是相等的,首先将flag.enc保存为flag_true.enc,执行如下程序

import os
cmd='cat.exe flag'
f=open('flag','w')
f.write(r'flag{1111111111}')
f.close()
os.system(cmd)

执行后可以看到加密flag文件得到的密文flag.enc和真正的密文flag_true.enc
在这里插入图片描述
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第23张图片
可以看到密文的前几个字节都是相等的,因此我们可以不断修改flag中的内容,通过比较flag.enc和flag_true.enc的对应位置是否相等来判断当前字符是否正确,python代码如下,跑起来还是挺快的

import os
alp=r'{}1234567890qwertyuiopasdfghjklzxcbnm'
cmd='cat.exe flag'
#flag{1csdefen5e}
flag=r'flag{1111111111}'
for i in range(10):
	for p in alp:
		f=open('flag','w')
		test=flag[:5+i]+p+flag[6+i:]
		f.write(test)
		f.close()
		os.system(cmd)
		f1=open('flag.enc','rb')
		f2=open('flag_true.enc','rb')
		if f1.read()[5+i]==f2.read()[5+i]:
			flag=test
			print(flag)
			break

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第24张图片
flag{1csdefen5e}

crypto3 简单RSA算法

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第25张图片
RSA题,题目给出了n,e,c,且n比较小尝试在线网站分解成功

m = b"flag{fake_flag}"
e = 16573
n = 249875510135225835839025820066377585461
c = pow(int.from_bytes(m, 'little'),e,n)
print(c)
#127787005372346984201114973214509899116

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第26张图片
直接出脚本

import gmpy2
from Crypto.Util.number import *
p=15765788454744518371
q=15849223833777174791
e = 16573
c = 127787005372346984201114973214509899116
n = p*q
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m)[::-1])

flag{jX_R54_s2c}

PPC

PPC1 梯形图分析-1

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第27张图片
使用博图V16打开工程文件,开启仿真器,并把工程文件下载到仿真器
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第28张图片
运行PLC,同时按照题目意思将%DB1.DBD4修改为768
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第29张图片
flag{-832.9714}

PPC2 梯形图分析2

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第30张图片
暂无wp

PPC3 被截获的机密文件

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第31张图片
题目为xdp文件,百度发现可以用信捷PLC软件xdp pro打开,找到官网的下载中心,选择XDP pro下载
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第32张图片
在虚拟机里安装好软件打开题目,找到关键代码
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第33张图片
一个简单的异或逻辑,python代码处理如下:

m=[177, 146, 158, 156, 137, 148, 146, 147, 180, 142, 188, 137, 204, 197, 205, 203, 186, 143, 156, 147, 153, 139, 148, 152, 138, 181, 146, 137, 152, 145]
flag=''
for i in m:
	flag+=chr(i^0xfd)
print(flag)

flag{LocationIsAt1806GrandviewHotel}

REVERSE

re两题都没有写,┭┮﹏┭┮ ~

REVERSE1 工控路由器固件分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第34张图片

REVERSE2 工控仿真环境故障取证分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第35张图片

STEGA

STEGA1 组态文件中的隐藏信息

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第36张图片

STEGA2 PLC图片分析

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第37张图片
经典开局一张图,感觉图片好像没有显示完整,修改高度
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第38张图片
得到类似于密码的ics_4****666
文件尾发现压缩包PK数据
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第39张图片binwalk分离压缩包,发现需要输入密码,应该就是上面的提示了
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第40张图片
利用python生成密码字典,代码简单,这里就不再展示了
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第41张图片
利用工具恢复密码
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第42张图片
解压得flag
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第43张图片
flag{plc_sec_master}

STEGA3 工控主机中的异常文件

2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第44张图片
下载plc文件,发现文件头前四个字节被逆序了,修改为504B0304,打开压缩包
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第45张图片
修改文件后缀为zip,打开压缩包发现被加密,直接用工具破解口令成功
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第46张图片
用压缩包密码54263981解密压缩包,打开图片看到flag
2022江西省·振兴杯·数字经济职业技能竞赛&中国工业互联网安全大赛·江西选拔赛初赛wp_第47张图片
flag{dgEVE9vq@ICS}

后记

以上就是全部赛题和wp了,其他题目如果有师傅有wp或看到其他wp的话麻烦@我一下,感谢~
再次感谢队友的带飞,Respect!

你可能感兴趣的:(CTFwp,ctf,工控CTF)