2021第一届网刃杯网络安全大赛-藏在s7里的秘密

2021第一届网刃杯网络安全大赛-藏在s7里的秘密

难度系数:3.0
题目描述:某工厂的安全设备捕获了攻击者向PLC中写入恶意数据的数据包,你能分析出并找到其中隐藏的数据吗?

解题思路:

下载查看流量包发现无法打开,尝试对流量包进行修复
2021第一届网刃杯网络安全大赛-藏在s7里的秘密_第1张图片

分析流量发现存在一个png图
2021第一届网刃杯网络安全大赛-藏在s7里的秘密_第2张图片

将图片导出并查看发现图片长度缺失,使用010打开发现提升CRC校验有问题,疑是需要爆破图片真实高度,使用网络上的脚本进行爆破

import zlib
import struct
import  binascii


file = 'aaaa.png'
fr = open(file,'rb').read()
data = bytearray(fr[12:29])

#crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",'')) 
crc32key = struct.unpack('>I',fr[29:33])[0]&0xffffffff 
# print(hex(fr[29:33]))
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') 
n = 4096
for w in range(n): 
    width = bytearray(struct.pack('>i', w))
    for h in range(n): 
        height = bytearray(struct.pack('>i', h)) 
        for x in range(4): 
            data[x+4] = width[x] 
            data[x+8] = height[x] 
            #print(data) 
        crc32result = zlib.crc32(data) 
        if crc32result == crc32key:
            print(crc32key) 
            print(width,height) 
            print(data) 
            newpic = bytearray(fr) 
            for x in range(4): 
                newpic[x+16] = width[x]
                newpic[x+20] = height[x] 
            fw = open(file.split('.')[0]+'_cracked'+'.png','wb') 
            fw.write(newpic) 
            fw.close

将爆破出的高度修改查看拿到flag
2021第一届网刃杯网络安全大赛-藏在s7里的秘密_第3张图片

你可能感兴趣的:(网络安全,python,unctf,网刃杯)