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


    前言

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

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

    赛题

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

    MISC

    MISC1 工程文件分析

    在这里插入图片描述

    暂无wp,后续补充

    MISC2 风机故障分析

    在这里插入图片描述
    过滤modbus流量,过滤条件
    modbus && modbus.func_code==16
    看到如下数据包
    在这里插入图片描述
    可以看到这个包写入寄存器的数值为500,题目要求找到转速超过2300的第一个包,因而按照时间排序,得到转速为3000,取16进制值即为flag
    在这里插入图片描述
    flag{0x0bb8}

    MISC3 modbus流量分析

    在这里插入图片描述
    过滤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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这里直接写了个脚本

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    flag{modbus_is_easy}

    MISC4 流量中的神秘信息

    在这里插入图片描述
    s7comm协议分析,wireshark过滤s7comm协议,追踪TCP流发现flag字符串
    在这里插入图片描述
    把所有字符串找出如下flag{d2UxY29tZVQwQ2hpbmE=}
    base64解码得
    在这里插入图片描述
    flag{we1comeT0China}

    MISC5 PLC流量分析

    在这里插入图片描述
    这题的提示为flag是大于两个字符的字符串,过滤s7comm协议按数据包长度排序发现 fake flag
    在这里插入图片描述
    根据s7comm协议,找到另外两个传输的数据分别为R3和41
    在这里插入图片描述
    在这里插入图片描述
    结合fake flag和提示最终得到
    flag{R341_flag}

    MISC6 PLC协议分析

    在这里插入图片描述
    查看流量包,追踪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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    flag{c0desysv2#}

    MISC7 攻击前的工控资产探测

    在这里插入图片描述
    这里有点离谱,提示说是需要找到设备的序列号,结果试了好多次没有试出来…
    过滤COTP协议,追踪TCP流,好在数据包不是很多,在第3个TCP流中发现比较像序列号的字符
    在这里插入图片描述
    百度发现还真有这个设备
    在这里插入图片描述
    于是兴奋的拿去提交,结果错误,一直在想这flag是个什么格式?最后试出来是后面那串字符串
    flag{SZVE8YEC030519}

    CRYPTO

    crypto1 PLC固件分析

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

    crypto2 工控勒索病毒

    在这里插入图片描述
    解压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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行后可以看到加密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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    flag{1csdefen5e}

    crypto3 简单RSA算法

    在这里插入图片描述
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    直接出脚本

    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])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    flag{jX_R54_s2c}

    PPC

    PPC1 梯形图分析-1

    在这里插入图片描述
    使用博图V16打开工程文件,开启仿真器,并把工程文件下载到仿真器
    在这里插入图片描述
    运行PLC,同时按照题目意思将%DB1.DBD4修改为768
    在这里插入图片描述
    flag{-832.9714}

    PPC2 梯形图分析2

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

    PPC3 被截获的机密文件

    在这里插入图片描述
    题目为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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    flag{LocationIsAt1806GrandviewHotel}

    REVERSE

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

    REVERSE1 工控路由器固件分析

    在这里插入图片描述

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

    在这里插入图片描述

    STEGA

    STEGA1 组态文件中的隐藏信息

    在这里插入图片描述

    STEGA2 PLC图片分析

    在这里插入图片描述
    经典开局一张图,感觉图片好像没有显示完整,修改高度
    在这里插入图片描述
    得到类似于密码的ics_4****666
    文件尾发现压缩包PK数据
    在这里插入图片描述binwalk分离压缩包,发现需要输入密码,应该就是上面的提示了
    在这里插入图片描述
    利用python生成密码字典,代码简单,这里就不再展示了
    在这里插入图片描述
    利用工具恢复密码
    在这里插入图片描述
    解压得flag
    在这里插入图片描述
    flag{plc_sec_master}

    STEGA3 工控主机中的异常文件

    在这里插入图片描述
    下载plc文件,发现文件头前四个字节被逆序了,修改为504B0304,打开压缩包
    在这里插入图片描述
    修改文件后缀为zip,打开压缩包发现被加密,直接用工具破解口令成功
    在这里插入图片描述
    用压缩包密码54263981解密压缩包,打开图片看到flag
    在这里插入图片描述
    flag{dgEVE9vq@ICS}

    后记

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

  • 相关阅读:
    Vue 双击复制 el-table 中的信息
    MIPI CSI-2笔记(20) -- 建议的内存存储格式(Recommended Memory Storage)
    五个维度着手MySQL的优化,我和面试官都聊嗨了
    DIrect12光追问题
    [Go 夜读 第 148 期] Excelize 构建 WebAssembly 版本跨语言支持实践
    极狐(GitLab) 马景贺:DevSecOps落地实践的挑战与应对之道
    LeetCode 1422. 分割字符串的最大得分
    什么是向量嵌入?
    java swing(GUI) MySQL实现的飞机票预定系统源码带视频运行教程
    再战:软件项目导论
  • 原文地址:https://blog.csdn.net/monster663/article/details/126799648