2021年工业信息安全技能大赛线下巡回赛-济南站


0x01 4G工业企业通信流量

题目描述

从通信流量中找出隐藏在其中的信息。答案格式:flag{****************}

解题过程

打开题目附件流量包,在短信里面获取flag{IC7856@qwe}
20210830142354

0x02 可疑的文件

题目描述

一天,运维小明在使用电脑时,突然蓝屏了,当小明再次打开电脑时,桌面上突然多了一个可疑的文件,正当小明准备查看时,电脑再次蓝屏,小明立刻将硬盘拔下来并保存。你能帮助小明查看一下文件的内容是什么吗?答案格式:flag{****************}

解题过程

打开题目附件可以看到是个raw文件,因此使用volatility进行分析

#使用volatility进行内存分析的时候,首先要判断这是从什么操作系统里面dump出的内存
$ volatility imageinfo -f test-20201029-020458.raw
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (/Users/***/0x02可疑的文件/题目附件/test-20201029-020458.raw)
                      PAE type : PAE
                           DTB : 0xaff000L
                          KDBG : 0x80546ae0L
          Number of Processors : 1
     Image Type (Service Pack) : 3
                KPCR for CPU 0 : 0xffdff000L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2020-10-29 02:05:01 UTC+0000
     Image local date and time : 2020-10-29 10:05:01 +0800

可以看到这是一个xp系统里dump出来的内存,接下来的分析里指定xp进行分析。各种插件的用法可以参考官方wiki

这里在查看IE浏览器缓存的时候发现了flag.png这个东西,因此先把这个dump出来

$ volatility -f test-20201029-020458.raw --profile=WinXPSP2x86 iehistory
Volatility Foundation Volatility Framework 2.6
**************************************************
Process: 1436 explorer.exe
Cache type "DEST" at 0x1389f5
Last modified: 2020-10-29 10:04:51 UTC+0000
Last accessed: 2020-10-29 02:04:52 UTC+0000
URL: Administrator@file:///C:/Documents%20and%20Settings/Administrator/Lhb/flag.png


$ volatility -f test-20201029-020458.raw --profile=WinXPSP2x86 filescan |grep 'flag'
Volatility Foundation Volatility Framework 2.6
0x00000000010e3740      1      0 R--r-- \Device\HarddiskVolume1\Documents and Settings\Administrator\桌面\flag.png
0x00000000010e3740      1      0 R--r-- \Device\HarddiskVolume1\Documents and Settings\Administrator\桌面\flag.png
0x000000000265e318      1      0 RW-rw- \Device\HarddiskVolume1\Documents and Settings\Administrator\Recent\flag.lnk

$ volatility -f test-20201029-020458.raw --profile=WinXPSP2x86 dumpfiles -Q 0x00000000010e3740 -D ./

dump完以后发现图片的内容是32个CRC,也是就是说CRC32。

20210823135310

这里需要脑洞一下ZIP压缩包的CRC爆破,因此下一步就是找可疑的zip压缩包

 volatility -f test-20201029-020458.raw --profile=WinXPSP2x86 filescan |grep 'zip'
Volatility Foundation Volatility Framework 2.6
0x000000000076ee58      1      0 R--rw- \Device\HarddiskVolume1\WINDOWS\system32\zipfldr.dll
0x0000000001137028      1      0 R--rw- \Device\HarddiskVolume1\Documents and Settings\Administrator\桌面\Desktop.zip
0x0000000006de9b10      1      0 R--r-d \Device\HarddiskVolume1\WINDOWS\system32\zipfldr.dll

可以看到的是题目比较良心,就搞了一个zip,dump出来看一下。

20210823145411

可以看到一堆4字节大小的txt文件,因此可以确定就是crc的爆破,爆破得flag,脚本如下:

#coding:utf-8
import zipfile
import string
import binascii

def CrackCrc(crc):
    for i in dic:
        for j in dic:
            for p in dic:
                for q in dic:
                    s = i + j + p + q
                    if crc == (binascii.crc32(s) & 0xffffffff):
                        #print s
                        f.write(s)
                        return

def CrackZip():
    for I in range(1,6):
        file = 'Desktop' + '.zip'
        f = zipfile.ZipFile(file, 'r')
        GetCrc = f.getinfo('flag'+str(I)+'.txt')
        crc = GetCrc.CRC
        #以上3行为获取压缩包CRC32值的步骤
        print hex(crc)
        CrackCrc(crc)

dic = string.ascii_letters + string.digits + '{}_+/='

f = open('flag.txt', 'w')
CrackZip()
f.close()

0x04 应急红绿灯

题目描述

某路口红绿灯故障启用应急红绿灯灯,南北方向绿灯Q0.0,黄灯Q0.1,红灯Q0.2,东西方向红灯Q0.5,绿灯Q0.3,黄灯Q0.4。按下I0.0启动,按下I0.1停止。由于红绿灯故障引起堵车,东西方向绿灯常亮每秒3辆,南北方向每秒4辆,绿灯闪烁路口通行车辆每秒较常亮减少1辆,黄灯闪烁通行车辆较绿灯常亮每秒减少2辆,启动应急红绿灯后每15秒统计一次路口车辆通过数据,1分钟内车辆通行情况。 东西方向用W 南北方向用N 如前15秒东西通行30 南北通行 20 W30N20 车辆均已两位表示,一辆用01表示。答案格式:flag{****************}

解题过程

打开题目是一个S7-200的梯形图,所以需要逐行的分析
20210823163117

  • Network1:I0.1接通,M3.0开始的8个点位重置为0
  • Network2:I0.0接通,M3.0开始的1个点位置为1
  • Network3:M3.0接通,计时器T37开始工作,计时20s
  • Network4:M3.0接通,Q0.0点亮,或M3.1接通,Q0.0闪烁

20210824092856

  • Network5:T37计时结束,M3.1置为1,M3.0重置为0
  • Network6:M3.1接通,T38计时3s
  • Network7:T38计时结束,M3.2置为1,M3.1重置为0
  • Network8:M3.2接通后,Q0.1闪烁3s

20210824094638

  • T39计时结束,M3.3置为1,M3.2重置为0
  • M3.3置为1,T40计时23s
  • M3.3接通,Q0.2点亮,或M3.4接通且M3.3断开,Q0.2闪烁
  • T40计时结束,M3.4置为1,M3.3重置为0

20210824095541

  • M3.4接通,T41开始计时3s
  • T41计时结束,M3.0置为1,M3.4重置为0
  • M3.0或M3.1接通,Q0.5点亮;或M3.0和M3.1断开,M3.2接通,Q0.5闪烁
  • M3.4接通,Q0.4闪烁

20210824100258

  • M3.3接通,当T40剩余时间大于2s时,Q0.3点亮,当T40剩余时间小于2s时,Q0.3闪烁

至此梯形图分析完毕,接下来就可以统计一分钟车流量

  • 0-15s:南北方向绿灯亮15s,东西方向红灯亮15s
  • 15-30s:南北方向绿灯亮5s,绿灯闪烁3s,黄灯闪烁3s,红灯亮4s;东西方向,红灯亮8s,红灯闪烁3s,绿灯亮4s;
  • 31-45s:南北方向红灯亮15s;东西方向绿灯亮15s
  • 45-60s:南北方向红灯亮4s,红灯闪烁3s,绿灯亮8s;东西方向绿灯亮2s,闪烁2s,黄灯闪烁3s,红灯亮8s

因此flag为flag{W00N60W12N35W45N13N32}

0x06 Modbus流量包

题目描述

在工控网络通信中,工作人员截取了一段奇怪的Modbus流量,请分析该流量包中隐藏的数据。答案格式:flag{****************} flag格式:flag{}。

解题过程

根据题目描述我们首先筛选modbus协议,发现全部是写入数据,并data区域全部有数据
20210824113847
那么追踪一下tcp流,发现了异常可以看到明文字符里出现了PNGIHDR,一个典型的png图片头
20210824113732

那么下一步思路也就清晰了,提数据转图片,脚本如下

# -*- coding: utf-8 -*-
import os
import binascii

os.system("tshark -r modbus.pcapng -2 -R 'modbus&&ip.src==192.168.111.138'  -T fields -e modbus.data >data.txt")
data1=open('data.txt')
tmp=''
for i in data1:
    tmp = tmp + i[2:4]
data1.close()

f=open('flag.png',"wb+") # filepath为你要存储的图片的全路径
pic = binascii.a2b_hex(tmp.encode())
f.write(pic)
f.close()

flag

0x11 工业协议分析

题目描述

通过分析流量包中的工业协议查询隐藏的flag。答案格式:flag{****************}

##解题过程
打开流量包,筛选modbus协议,追踪tcp流,解base64获取flag
20210824115552

>>> import base64
>>> flag=base64.b64decode('ZmxhZ3s2N2Y1YjgyNTcyNzIwOTI1fQ==')
>>> print(flag)
b'flag{67f5b82572720925}'
>>> exit()

文章作者: Secgxx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Secgxx !
  目录