2024江西工控“振兴杯”初赛WriteUp
字数 1759 2025-08-22 12:23:25

江西工控"振兴杯"初赛WriteUp技术解析

协议分析 - 被攻击的电机

分析步骤

  1. 流量包分析

    • 打开提供的网络流量包文件
    • 使用过滤器筛选出写数据的包(通常使用Wireshark的过滤功能)
  2. 关键数据识别

    • 在过滤结果中查找包含"13 88"的数据包
    • 特别注意数值大于3000的数据包
  3. Flag提取

    • 从符合条件的数据包中直接提取flag
    • 最终flag格式:flag{c90a00000006030600721388}

Omron协议分析

分析步骤

  1. 协议过滤

    • 使用Wireshark过滤器筛选出Omron协议相关的流量
  2. 异常流量识别

    • 按数据包长度排序,查找异常长度的数据包
    • 重点关注长度为104的数据包
  3. 解密过程

    • 从识别出的数据包中提取密文
    • 使用适当的解密方法(具体方法未在原文中详细说明)解密获得flag

组态编程 - 西门子组态分析

程序逻辑解析

  1. 程序段一

    • 启动条件:按钮A按下且D点已接通
    • 动作:给C置位,使C对应的灯亮起
  2. 程序段二

    • 启动条件:按钮B按下
    • 动作:给C复位,使C对应的灯熄灭
  3. 程序段三

    • 启动条件:再次按下按钮B
    • 延时:等待12秒
    • 动作:给D复位
  4. 程序段四

    • 启动条件:按钮E按下
    • 延时:等待10秒
    • 动作:给D置位
    • 连锁反应:D置位后,由于程序段一的条件满足,C也会被置位,灯再次亮起

正确操作流程

  1. 首先启动按钮A
  2. 然后启动按钮E并等待10秒
  3. 这样D会被置位,进而导致C被置位,灯亮起

Flag格式

flag{E_10_D_1}

Smart编程分析

数据处理流程

  1. 初始转换

    • VW100通过MOV_W函数将18转换为二进制:10010
  2. 位移操作

    • VW104通过SHL_W函数将VW100左移3位:10010左移3位=144
    • VW108通过SHR_W函数将VW104右移2位:144右移2位=36
  3. 表格操作

    • 设置VW500为5(表格最大条目数)
    • 将VW108(36)加入表格,表格内容变为100100
    • 从表格中先进先出取出VW600=36
  4. 位运算

    • 将240和VW600进行按位与运算:36&240=32
    • 结果存入VW700=32
  5. 数据类型转换与计算

    • 将VW700转换为双整数VD704=32
    • VD704+17=VD708=49
    • 将VD708转换为实数VD712=49.0
    • 使用SQRT求VD712的平方根得到VD716=7.0
  6. 变量状态

    • VW502未设置,默认为0
    • VW600=36
    • VD716=7.0

Flag格式

flag{0_36_7.0}

恶意程序分析 - 勒索病毒

分析步骤

  1. 静态分析

    • 使用IDA Pro分析exe文件
    • 发现对flag.txt文件的操作
  2. 加密文件分析

    • 使用010editor打开加密的flag文件
    • 提取十六进制数据:
      0B B0 B5 4E 89 4E 9D 03 93 1D 5B E5 10 E2 EA 13
      10 BE 60 09 D8 16 4A F0 4B F8 CB C6 49 39 88 10
      72 00 28 B6 0D 5A CB 49 FB 3D
      
  3. 解密准备

    • 从参考链接获取key和nonce
    • key(32字节):
      75 2b cb 44 8b d1 70 53 e6 b5 5c c4 e6 ba 1b e8
      75 6d 2d bb 03 89 9e b6 5e f5 a7 ef f6 de 5e e7
      
    • nonce(12字节):
      4b f6 5b 44 e2 79 81 1c 36 7f 94 cc
      
  4. 解密脚本

    from Crypto.Cipher import ChaCha20
    from Crypto.Protocol.KDF import scrypt
    
    # 定义加密数据
    data = bytes([0x0B, 0xB0, 0xB5, 0x4E, 0x89, 0x4E, 0x9D, 0x03, 0x93, 0x1D, 
                  0x5B, 0xE5, 0x10, 0xE2, 0xEA, 0x13, 0x10, 0xBE, 0x60, 0x09, 
                  0xD8, 0x16, 0x4A, 0xF0, 0x4B, 0xF8, 0xCB, 0xC6, 0x49, 0x39, 
                  0x88, 0x10, 0x72, 0x00, 0x28, 0xB6, 0x0D, 0x5A, 0xCB, 0x49, 
                  0xFB, 0x3D])
    
    # 定义密钥和随机数(nonce)
    key = bytes([0x75, 0x2b, 0xcb, 0x44, 0x8b, 0xd1, 0x70, 0x53, 0xe6, 0xb5, 
                 0x5c, 0xc4, 0xe6, 0xba, 0x1b, 0xe8, 0x75, 0x6d, 0x2d, 0xbb, 
                 0x03, 0x89, 0x9e, 0xb6, 0x5e, 0xf5, 0xa7, 0xef, 0xf6, 0xde, 
                 0x5e, 0xe7])
    nonce = bytes([0x4b, 0xf6, 0x5b, 0x44, 0xe2, 0x79, 0x81, 0x1c, 0x36, 0x7f, 
                   0x94, 0xcc])
    
    # 初始化ChaCha20算法
    cipher = ChaCha20.new(key=key, nonce=nonce)
    
    # 手动设置计数器为1(跳过第一个64字节块)
    cipher.seek(64)
    
    try:
        # 解密数据
        decrypted_data = cipher.decrypt(data)
        print(decrypted_data)
    except Exception as e:
        print(f"An error occurred: {e}")
    
  5. 执行结果

    • 运行脚本后输出解密后的flag内容

应急处置 - 工程被加密

恢复步骤

  1. 工程打开

    • 使用组态王7.5SP1软件打开被加密的工程
    • 会弹出密码输入窗口
  2. 密码绕过

    • 直接关闭密码输入窗口
    • 点击软件菜单中的"工具"→"加密"
    • 在弹出的加密设置窗口中点击"确定",这将取消密码保护
  3. 信息获取

    • 重新打开工程
    • 查看操作记录图片,其中包含flag信息

固件分析 - 固件后门

分析步骤

  1. 文件解压

    • 解压提供的bin固件文件
    • 查找可疑文件,特别是.pyc文件(Python编译文件)
  2. 反编译

    • 使用Python反编译工具对.pyc文件进行反编译
    • 分析反编译得到的源代码
  3. 后门特征

    • 在代码中发现硬编码的域名和端口
    • 域名格式:www.1sdfa4sdfdsgbnm098d8342kflgb.com
    • 端口号:38209

Flag格式

flag{www.1sdfa4sdfdsgbnm098d8342kflgb.com:38209}

总结

本文档详细记录了2024江西工控"振兴杯"初赛各题目的解题过程和技术要点,涵盖协议分析、组态编程、恶意软件分析、应急处置和固件分析等多个工控安全领域。每个题目都提供了详细的分析步骤和关键点,可作为工控安全学习的参考资料。

江西工控"振兴杯"初赛WriteUp技术解析 协议分析 - 被攻击的电机 分析步骤 流量包分析 : 打开提供的网络流量包文件 使用过滤器筛选出写数据的包(通常使用Wireshark的过滤功能) 关键数据识别 : 在过滤结果中查找包含"13 88"的数据包 特别注意数值大于3000的数据包 Flag提取 : 从符合条件的数据包中直接提取flag 最终flag格式: flag{c90a00000006030600721388} Omron协议分析 分析步骤 协议过滤 : 使用Wireshark过滤器筛选出Omron协议相关的流量 异常流量识别 : 按数据包长度排序,查找异常长度的数据包 重点关注长度为104的数据包 解密过程 : 从识别出的数据包中提取密文 使用适当的解密方法(具体方法未在原文中详细说明)解密获得flag 组态编程 - 西门子组态分析 程序逻辑解析 程序段一 : 启动条件:按钮A按下且D点已接通 动作:给C置位,使C对应的灯亮起 程序段二 : 启动条件:按钮B按下 动作:给C复位,使C对应的灯熄灭 程序段三 : 启动条件:再次按下按钮B 延时:等待12秒 动作:给D复位 程序段四 : 启动条件:按钮E按下 延时:等待10秒 动作:给D置位 连锁反应:D置位后,由于程序段一的条件满足,C也会被置位,灯再次亮起 正确操作流程 首先启动按钮A 然后启动按钮E并等待10秒 这样D会被置位,进而导致C被置位,灯亮起 Flag格式 flag{E_10_D_1} Smart编程分析 数据处理流程 初始转换 : VW100通过MOV_ W函数将18转换为二进制: 10010 位移操作 : VW104通过SHL_ W函数将VW100左移3位: 10010 左移3位=144 VW108通过SHR_ W函数将VW104右移2位:144右移2位=36 表格操作 : 设置VW500为5(表格最大条目数) 将VW108(36)加入表格,表格内容变为 100100 从表格中先进先出取出VW600=36 位运算 : 将240和VW600进行按位与运算:36&240=32 结果存入VW700=32 数据类型转换与计算 : 将VW700转换为双整数VD704=32 VD704+17=VD708=49 将VD708转换为实数VD712=49.0 使用SQRT求VD712的平方根得到VD716=7.0 变量状态 : VW502未设置,默认为0 VW600=36 VD716=7.0 Flag格式 flag{0_36_7.0} 恶意程序分析 - 勒索病毒 分析步骤 静态分析 : 使用IDA Pro分析exe文件 发现对flag.txt文件的操作 加密文件分析 : 使用010editor打开加密的flag文件 提取十六进制数据: 解密准备 : 从参考链接获取key和nonce key(32字节): nonce(12字节): 解密脚本 : 执行结果 : 运行脚本后输出解密后的flag内容 应急处置 - 工程被加密 恢复步骤 工程打开 : 使用组态王7.5SP1软件打开被加密的工程 会弹出密码输入窗口 密码绕过 : 直接关闭密码输入窗口 点击软件菜单中的"工具"→"加密" 在弹出的加密设置窗口中点击"确定",这将取消密码保护 信息获取 : 重新打开工程 查看操作记录图片,其中包含flag信息 固件分析 - 固件后门 分析步骤 文件解压 : 解压提供的bin固件文件 查找可疑文件,特别是.pyc文件(Python编译文件) 反编译 : 使用Python反编译工具对.pyc文件进行反编译 分析反编译得到的源代码 后门特征 : 在代码中发现硬编码的域名和端口 域名格式: www.1sdfa4sdfdsgbnm098d8342kflgb.com 端口号:38209 Flag格式 flag{www.1sdfa4sdfdsgbnm098d8342kflgb.com:38209} 总结 本文档详细记录了2024江西工控"振兴杯"初赛各题目的解题过程和技术要点,涵盖协议分析、组态编程、恶意软件分析、应急处置和固件分析等多个工控安全领域。每个题目都提供了详细的分析步骤和关键点,可作为工控安全学习的参考资料。