2025黄鹤杯网络安全人才创新大赛 江城校园新星赛道 wp
字数 2498 2025-10-01 14:05:44

2025黄鹤杯网络安全人才创新大赛 - 江城校园新星赛道 WriteUp 教学文档

一、MISC 类题目

1. 中秋赏月

  • 题目文件:BMP图像 + 加密压缩包
  • 解题步骤
    1. 使用十六进制编辑器(如010 Editor)打开BMP文件,修改图像文件头中的尺寸字段(将 C0 03 改为 FF 04),以修复图像比例。
    2. 修改后图像中可见密码:21df#$de
    3. 使用该密码解压加密压缩包,得到一个假Flag文件。
    4. 使用Sublime Text打开假Flag文件,发现其中包含零宽字符。
    5. 使用零宽字符解密工具(如在线解密或Python脚本)解密,得到真实Flag:
      flag{ee4752ccc2eed2124b3c65e21287d748}
      

2. easy_usb

  • 题目文件:USB流量包(.pcap
  • 解题步骤
    1. 使用Wireshark打开流量包,过滤USB传输数据。
    2. 使用工具 CTF-net 解密USB数据,得到图像 IRPID*2
    3. 提取所有USB数据包中的有效数据字段,发现大量重复数据。
    4. 对数据进行去重处理,并将每个字节乘以2(根据提示 IRPID*2)。
    5. 将处理后的数据转换为十六进制字符串,得到Flag:
      flag{ffff8285beacca60ffff8285beacca60}
      

3. 日志分析

  • 题目说明:原题为网络原题,参考CTF论坛解法。
  • 解题步骤
    1. 直接参考现有WriteUp或论坛解法(未提供具体日志内容,建议搜索相关题目)。
    2. 常见解法包括:日志过滤、时间戳分析、关键字提取等。

4. Simple_pcap

  • 题目文件:加密压缩包 + readme.txt
  • 解题步骤
    1. 使用明文攻击(已知明文文件 readme.txt)爆破压缩包密码。
    2. 爆破得到密码:1a2b3c
    3. 解压后得到USB流量包,使用USB协议解密工具(如 usbprotocol)解密。
    4. 解密后得到Flag:
      flag{usbprotocolforfun}
      

二、Crypto 类题目

1. 栅栏里的保险箱

  • 题目特点:两串数字,疑似RSA加密。
  • 解题步骤
    1. 假设外部数字为密文 c,内部数字为模数 n
    2. 使用 yafu 分解 n,得到 pq
    3. 遍历可能的公钥 e(常见如65537,或根据题目提示尝试其他值)。
    4. 对每个 e 计算明文 m = c^d mod n,并尝试将其转换为字符串。
    5. 筛选包含 f,l,a,g,{,} 的明文,发现唯一有效结果:
      f513lb9f22}a1a161gfe1f9{74ac82cc27cf23
      
    6. 使用栅栏解密(如随波逐流工具)处理该字符串,得到最终Flag。

2. easycry

  • 题目文件attachment.py(RSA密钥生成脚本)
  • 密钥生成方式
    • 从固定列表 a = [35,51,91,115,123,187,235,267,403,427] 随机选择 D
    • 生成2048位随机整数 V,计算 numbers = D*V^2 + 1
    • numbers % 4 == 0,则令 p = (D*V^2 + 1) / 4
    • 生成另一个2048位素数 q,计算 n = p*q
    • 使用 e=65537 加密Flag。
  • 攻击方法
    • 利用 p 的特殊形式,通过类群分解法或二次筛法变种在多项式时间内分解 n
  • Flag
    flag{7c4a8d09ca3762af61e59520943dc26494f8941b}
    

三、Web 类题目

1. Code

  • 代码逻辑
    • 三个输入参数:input1, input2, input3
    • 条件1:$input1 == 0(PHP弱类型比较,如 php://... 转数字为0)。
    • 条件2:file_get_contents($input2) == "Welcome!"(可使用Data URI:data://text/plain,Welcome!)。
    • 条件3:$input2 == 0(Data URI转数字为0)。
    • 若满足条件,执行 file_get_contents($input1) 并输出内容。
  • Payload构造
    ?input1=php://filter/read=convert.base64-encode/resource=flag.php
    &input2=data://text/plain,Welcome!
    &input3=i:0;
    
  • 结果:输出flag.php的Base64编码内容,解码后得Flag。

2. RCEME

  • 题目说明:PHP计算器,限制字符白名单(数字、运算符、括号、单引号、点),长度≤70。
  • 攻击方法
    1. 利用异或运算(^)从允许字符中构造出所需函数名(如 file_get_contents)。
    2. 拼接出完整Payload:file_get_contents('flag')
    3. 进行URL编码后发送请求。
  • 工具:使用Python脚本自动化构造并发送Payload。

四、RE(逆向工程)类题目

1. antiapk

  • 题目文件:APK文件
  • 解题步骤
    1. 使用Jadx反编译APK,发现主要逻辑在Native层(libanti.so)。
    2. 分析JNI函数:输入长度必须为16。
    3. 动态加载libanti.so,分析其加密逻辑:
      • 生成128字节子密钥区。
      • 16轮ARX变换(加法-旋转-异或)。
      • 调用LuaJIT字节码(/data/data/.../cadhe)处理输入。
    4. 发现线性关系:RSB_out = input XOR KSTARGET = flag XOR KS
    5. 通过一次输入观测计算Key Stream(KS),进而计算Flag:
      flag = TARGET XOR input XOR RSB_out
      
    6. 最终Flag:
      flag{aj5oyjs1kf}
      

2. 系统调试

  • 题目文件:两个可执行文件(.exe
  • 解题步骤
    1. 使用IDA反编译主程序,找到关键函数 sub_40074D
    2. 分析发现比较逻辑:输入与固定数组 [5,2,7,2,5,6] 相关。
    3. 将每个元素加109后转换为字符:
      arr = [5,2,7,2,5,6]
      flag = ''.join(chr(x + 109) for x in arr)
      
      得到 rotors
    4. 最终Flag:
      flag{rotors}
      

关键知识点总结

  1. 文件格式分析(BMP、USB流量、压缩包)
  2. 加密算法逆向(RSA、自定义加密、线性 cryptanalysis)
  3. PHP弱类型与协议利用(php://, data://)
  4. 代码执行与绕过技巧(字符限制、异或构造)
  5. Android Native逆向(JNI、LuaJIT、动态分析)
  6. Windows逆向与调试(IDA、关键函数定位)

如果有需要修改或者补充的地方,可以随时告诉我。

2025黄鹤杯网络安全人才创新大赛 - 江城校园新星赛道 WriteUp 教学文档 一、MISC 类题目 1. 中秋赏月 题目文件 :BMP图像 + 加密压缩包 解题步骤 : 使用十六进制编辑器(如010 Editor)打开BMP文件,修改图像文件头中的尺寸字段(将 C0 03 改为 FF 04 ),以修复图像比例。 修改后图像中可见密码: 21df#$de 。 使用该密码解压加密压缩包,得到一个假Flag文件。 使用Sublime Text打开假Flag文件,发现其中包含零宽字符。 使用零宽字符解密工具(如在线解密或Python脚本)解密,得到真实Flag: 2. easy_ usb 题目文件 :USB流量包( .pcap ) 解题步骤 : 使用Wireshark打开流量包,过滤USB传输数据。 使用工具 CTF-net 解密USB数据,得到图像 IRPID*2 。 提取所有USB数据包中的有效数据字段,发现大量重复数据。 对数据进行去重处理,并将每个字节乘以2(根据提示 IRPID*2 )。 将处理后的数据转换为十六进制字符串,得到Flag: 3. 日志分析 题目说明 :原题为网络原题,参考CTF论坛解法。 解题步骤 : 直接参考现有WriteUp或论坛解法(未提供具体日志内容,建议搜索相关题目)。 常见解法包括:日志过滤、时间戳分析、关键字提取等。 4. Simple_ pcap 题目文件 :加密压缩包 + readme.txt 解题步骤 : 使用明文攻击(已知明文文件 readme.txt )爆破压缩包密码。 爆破得到密码: 1a2b3c 。 解压后得到USB流量包,使用USB协议解密工具(如 usbprotocol )解密。 解密后得到Flag: 二、Crypto 类题目 1. 栅栏里的保险箱 题目特点 :两串数字,疑似RSA加密。 解题步骤 : 假设外部数字为密文 c ,内部数字为模数 n 。 使用 yafu 分解 n ,得到 p 和 q 。 遍历可能的公钥 e (常见如65537,或根据题目提示尝试其他值)。 对每个 e 计算明文 m = c^d mod n ,并尝试将其转换为字符串。 筛选包含 f,l,a,g,{,} 的明文,发现唯一有效结果: 使用栅栏解密(如随波逐流工具)处理该字符串,得到最终Flag。 2. easycry 题目文件 : attachment.py (RSA密钥生成脚本) 密钥生成方式 : 从固定列表 a = [35,51,91,115,123,187,235,267,403,427] 随机选择 D 。 生成2048位随机整数 V ,计算 numbers = D*V^2 + 1 。 若 numbers % 4 == 0 ,则令 p = (D*V^2 + 1) / 4 。 生成另一个2048位素数 q ,计算 n = p*q 。 使用 e=65537 加密Flag。 攻击方法 : 利用 p 的特殊形式,通过类群分解法或二次筛法变种在多项式时间内分解 n 。 Flag : 三、Web 类题目 1. Code 代码逻辑 : 三个输入参数: input1 , input2 , input3 。 条件1: $input1 == 0 (PHP弱类型比较,如 php://... 转数字为0)。 条件2: file_get_contents($input2) == "Welcome!" (可使用Data URI: data://text/plain,Welcome! )。 条件3: $input2 == 0 (Data URI转数字为0)。 若满足条件,执行 file_get_contents($input1) 并输出内容。 Payload构造 : 结果 :输出 flag.php 的Base64编码内容,解码后得Flag。 2. RCEME 题目说明 :PHP计算器,限制字符白名单(数字、运算符、括号、单引号、点),长度≤70。 攻击方法 : 利用异或运算( ^ )从允许字符中构造出所需函数名(如 file_get_contents )。 拼接出完整Payload: file_get_contents('flag') 。 进行URL编码后发送请求。 工具 :使用Python脚本自动化构造并发送Payload。 四、RE(逆向工程)类题目 1. antiapk 题目文件 :APK文件 解题步骤 : 使用Jadx反编译APK,发现主要逻辑在Native层( libanti.so )。 分析JNI函数:输入长度必须为16。 动态加载 libanti.so ,分析其加密逻辑: 生成128字节子密钥区。 16轮ARX变换(加法-旋转-异或)。 调用LuaJIT字节码( /data/data/.../cadhe )处理输入。 发现线性关系: RSB_out = input XOR KS , TARGET = flag XOR KS 。 通过一次输入观测计算Key Stream(KS),进而计算Flag: 最终Flag: 2. 系统调试 题目文件 :两个可执行文件( .exe ) 解题步骤 : 使用IDA反编译主程序,找到关键函数 sub_40074D 。 分析发现比较逻辑:输入与固定数组 [5,2,7,2,5,6] 相关。 将每个元素加109后转换为字符: 得到 rotors 。 最终Flag: 关键知识点总结 文件格式分析 (BMP、USB流量、压缩包) 加密算法逆向 (RSA、自定义加密、线性 cryptanalysis) PHP弱类型与协议利用 (php://, data://) 代码执行与绕过技巧 (字符限制、异或构造) Android Native逆向 (JNI、LuaJIT、动态分析) Windows逆向与调试 (IDA、关键函数定位) 如果有需要修改或者补充的地方,可以随时告诉我。