2022江西省·振兴杯·数字经济职业技能竞赛 & 中国工业互联网安全大赛·江西选拔赛 初赛
9月7号比赛打完,感谢队友带飞,记录一下我们队伍的wp,没有全部解出来,若对wp有所补充,也可以评论留言或私聊我,希望能对大家有所启发和帮助
我希望许过的愿望一路生花
护送那时的梦抵挡过风沙
这里提供一个赛题的网盘链接,来源与竞赛官方微信群的一位师傅,在这里向Ta表示感谢,仅供各位师傅复现参考
链接:https://pan.baidu.com/s/14kBsFGd-jY9lbxmhPDorsQ
提取码:qwer
暂无wp,后续补充
过滤modbus流量,过滤条件
modbus && modbus.func_code==16
看到如下数据包:
可以看到这个包写入寄存器的数值为500,题目要求找到转速超过2300的第一个包,因而按照时间排序,得到转速为3000,取16进制值即为flag
flag{0x0bb8}
过滤modbus协议,按照时间排序,发现长度异常的流量包,对寄存器写入的值比较奇怪
将所有写入值写出如下,与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}
s7comm协议分析,wireshark过滤s7comm协议,追踪TCP流发现flag字符串
把所有字符串找出如下flag{d2UxY29tZVQwQ2hpbmE=}
base64解码得
flag{we1comeT0China}
这题的提示为flag是大于两个字符的字符串,过滤s7comm协议按数据包长度排序发现 fake flag
根据s7comm协议,找到另外两个传输的数据分别为R3和41
结合fake flag和提示最终得到
flag{R341_flag}
查看流量包,追踪TCP流,发现aes.key和enc_flag.bin文件
分析流量包可以得到AES密文和密钥
由密文和密钥可以直接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#}
这里有点离谱,提示说是需要找到设备的序列号,结果试了好多次没有试出来…
过滤COTP协议,追踪TCP流,好在数据包不是很多,在第3个TCP流中发现比较像序列号的字符
百度发现还真有这个设备
于是兴奋的拿去提交,结果错误,一直在想这flag是个什么格式?最后试出来是后面那串字符串
flag{SZVE8YEC030519}
暂无wp
解压cat.zip得到cat.exe和flag.enc,把cat.exe拖进IDA32里查看,程序执行的流程比较复杂,但是仔细观察数组不难发现程序主要是打开当前目录下的一个flag文件进行DES加密后写入flag.enc文件中
知道了这个原理后可以取巧了,用python调用cat.exe执行,因为已知flag的格式为’flag{xxx}',且flag.enc中共有16个字节如下:
因而我们伪造一个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
可以看到密文的前几个字节都是相等的,因此我们可以不断修改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
flag{1csdefen5e}
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
直接出脚本
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}
使用博图V16打开工程文件,开启仿真器,并把工程文件下载到仿真器
运行PLC,同时按照题目意思将%DB1.DBD4修改为768
flag{-832.9714}
暂无wp
题目为xdp文件,百度发现可以用信捷PLC软件xdp pro打开,找到官网的下载中心,选择XDP pro下载
在虚拟机里安装好软件打开题目,找到关键代码
一个简单的异或逻辑,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}
re两题都没有写,┭┮﹏┭┮ ~
经典开局一张图,感觉图片好像没有显示完整,修改高度
得到类似于密码的ics_4****666
文件尾发现压缩包PK数据
binwalk分离压缩包,发现需要输入密码,应该就是上面的提示了
利用python生成密码字典,代码简单,这里就不再展示了
利用工具恢复密码
解压得flag
flag{plc_sec_master}
下载plc文件,发现文件头前四个字节被逆序了,修改为504B0304,打开压缩包
修改文件后缀为zip,打开压缩包发现被加密,直接用工具破解口令成功
用压缩包密码54263981解密压缩包,打开图片看到flag
flag{dgEVE9vq@ICS}
以上就是全部赛题和wp了,其他题目如果有师傅有wp或看到其他wp的话麻烦@我一下,感谢~
再次感谢队友的带飞,Respect!