(原创)2018 年 “北邮网安杯” 首届全国中学生网络安全技术大赛解题报告
今年高校对网络空间安全领域高度重视,不仅北邮举办了首届面向中学生的网络空间安全技术大赛,北邮、中科大、川大等高校在自主招生中,还对网络空间安全有特长的中学生出台了降分政策(最高降一本线),优惠力度较大。
北邮本次比赛的奖项设置极具吸引力:一等奖 1 名(奖金 8000 元),二等奖 5 名(奖金 5000 元 / 人),三等奖 10 名(奖金 2000 元 / 人),且获奖选手有机会参加高校学科特长生选拔。但比赛设置了上午的 ACM 编程赛(6 题,9:00-12:00)和下午的 CTF 赛(WEB 3 题 + RE 3 题,14:00-17:00),对有短板的选手较不利 —— 本质是选拔综合型人才而非单一技能型选手,因此单向发展的选手易被淘汰。
本次比赛为个人赛,据了解:上午 ACM 赛有 3 人全解(前两名为河北高一学生,实力强劲);下午 CTF 赛仅 1 人全解 WEB 题,且该选手上午 ACM 赛也全解,实力顶尖。总成绩于 4 月 4 日由北邮公示。
本文为非官方解题报告,仅包含本人做出的 WEB1、RE1、RE2 题目解析(WEB2 考反序列化,因脚本默认 public 未改 private 致未解;WEB3 考 SQL 注入需手工 fuzz,未完成)。如有疏漏或错误,欢迎指出。
解题报告下载链接:https://www.klmyssn.com/CTF/2018-BY-WP-HY.pdf
一、WEB 题型:WEB1
题目信息
题目描述:交易中心,你能买到 FLAG 吗?
解题流程
题目联想与思路定位:
看到 “交易中心” 主题,联想到 2017 年 0CTF 类似题目及《图解密码技术》中 ECB 加密模式的攻击案例(ECB 模式明文相同则密文相同,易被利用),因此重点排查加密方式。
源码审计:
下载并解压源码,查看encrypt.php,确认加密方式为ECB 模式,核心代码:
加密参数分析:
由$algorithm = 'rijndael-128'可知,加密分组为 128 位(8 位 / 字符,共 16 个字符为一组),明文需按 16 字符分组构造。
明文分组构造:
目标是篡改交易金额,需构造三组 16 字符明文:
第一组:4||AAAAAAAAAAAAA(4为商品 ID,后续补 A 凑 16 字符)
第二组:AAAAAAAAAAAAAA||(补 A 凑 16 字符,衔接第三组)
第三组:1000(目标金额,通过 ECB 弱点替换)
抓包与密文替换:
抓包获取 “4=>1000”(目标商品与金额)和 “1=>10”(低价商品与金额)的加密内容;
用 “1=>10” 的密文替换 “4=>1000” 中对应金额的密文,篡改交易成本。
构造 URL 获取 Flag:
查看index.php的header参数规则,构造最终访问 URL:
访问后成功获取 Flag。
二、RE 题型:RE1
题目信息
题目类型:MFC Crackme
核心考点:长度检测、循环异或验证
解题流程
初始调试:
用 OllyDbg 载入程序,随意输入字符串,发现很快触发检测失败 —— 程序对输入格式和长度有严格校验。
输入格式与长度分析:
调试发现程序检测0x42, 0x55等十六进制值,转换为 ASCII 后可知:
输入格式需为BUPT{xxxxxxx}(B对应 0x42,U对应 0x55);
输入长度需满足0x48-0x28+1=33(含格式符)。
重新输入触发算法:
按BUPT{xxxxxxx}格式输入 33 位字符串,成功进入核心算法部分(循环异或验证)。
异或算法绕过:
核心逻辑为 “前 6 位格式校验 + 后 27 位循环异或”,由于异或运算可逆,直接修改汇编指令跳过异或验证。
获取 Flag:
绕过验证后,程序输出正确 Flag:
Flag:BUPT{S1mpL3_C0mpAre_is_SoEasY!!!}
三、RE 题型:RE2
题目信息
:RC4 加密破解
核心考点:密文定位、密钥提取、RC4 解密
解题流程
IDA 静态分析:
将程序拖入 IDA,通过字符串定位找到关键函数strcmp(用于校验解密后的 Flag 与正确值是否一致)。
提取密文:
跟踪strcmp的参数,找到加密后的密文:
7C553E5F0EB4CCB977BF6BD960E0B968FB11CED2154B0EB5F73E51EE514D5A9C0
动态调试提取密钥:
用动态调试工具(如 x64dbg)跟踪程序,在内存中找到 RC4 加密的密钥(程序加载密钥时的内存地址)。
RC4 解密获取 Flag:
使用提取的密钥对密文进行 RC4 解密,得到最终 Flag:
Flag