2025青岛网络安全大赛决赛writeup(全部题解)
字数 2810 2025-09-23 19:27:38
2025青岛网络安全大赛决赛题解与知识点教学
题目附件
下载链接:https://pan.quark.cn/s/44903a187039?pwd=79es 提取码:79es
Web1
考察点
- 网络数据包拦截与修改(BurpSuite等工具使用)
- 基础HTTP协议理解
解题过程
- 环境为一个植物大战僵尸游戏,系统会不断向后台请求阳光值
- 使用抓包工具(如BurpSuite)拦截请求
- 将阳光值参数修改为极大数值(如999999)
- 放行数据包,游戏获胜后获得flag
教学要点
- 抓包工具基本操作:拦截、修改、重放请求
- 理解客户端-服务器交互机制
- 数值验证漏洞的利用方式
Web2
考察点
- 目录扫描与信息收集
- 后台弱口令漏洞
- SSRF(服务端请求伪造)
- LFI(本地文件包含)绕过技巧
解题过程
- 目录扫描发现 www.zip 和 admin/login.php
- 访问后台使用弱口令 admin/admin 登录成功
- 在"友链"功能中发现漏洞点(eof.php)
- 分析源码发现两层不一致的过滤机制:
- 第一层:只检查第一行,不区分大小写
- 第二层:检查整个输入,区分大小写
- 构造绕过payload:
%0AFILE:///flag- %0A(换行符)使第一行为空
- FILE:///flag 使用大写绕过第二层检查
- 成功读取服务器上的/flag文件
教学要点
- 信息收集:目录扫描、源码泄露
- 弱口令漏洞利用
- 多层级过滤机制的绕过方法
- PHP流包装器的大小写特性
- SSRF到LFI的利用链构造
密码学1
考察点
- Beaufort密码算法
- RSA加密体制
- dp泄露攻击
- Coppersmith算法应用
解题过程
加密流程分析
- 明文格式:DASCTF{22个大写字母}
- 位置移位:每个字符右移(index+1)位(模26运算)
- Beaufort加密:使用密钥"DASCTF"加密
- 转换为整数:m = bytes_to_long(FLAG_string.encode())
- RSA加密:生成P = m^p mod n,Q = m^q mod n,N = P*Q
- 泄露:n, N, dp, e等参数
解密步骤
第一步:利用dp泄露恢复P、Q
# SageMath代码
for k in range(1, 100000):
P = (dp*e - 1) // k + 1
if N % P == 0:
Q = N // P
break
第二步:Coppersmith算法求m
# SageMath代码
P = ... # 从第一步得到
Q = ... # 从第一步得到
n = ... # 原始RSA的n
R.<x> = Zmod(n)[]
f = x^2 - (P+Q)*x + P*Q
roots = f.small_roots()
m = roots[0]
第三步:逆向加密过程
# Python代码
def beaufort_decrypt(cipher, key):
# Beaufort解密实现
pass
def reverse_shift(enc_str):
# 反向移位操作
result = ""
for i, char in enumerate(enc_str):
if char.isupper():
# 反向移动(i+1)位
shifted = (ord(char) - ord('A') - (i+1)) % 26
result += chr(shifted + ord('A'))
else:
result += char
return result
# 解密流程
flag_string = long_to_bytes(m).decode()
beaufort_decrypted = beaufort_decrypt(flag_string, "DASCTF")
original_flag = reverse_shift(beaufort_decrypted)
教学要点
- Beaufort密码算法的自反性质
- RSA系统中dp参数的意义与泄露利用
- Coppersmith算法在小根求解中的应用
- 多步加密流程的逆向分析方法
密码学2
考察点
- 小指数攻击(Low Exponent Attack)
- 中国剩余定理(CRT)
- 有限域上多项式求根
- 多轮加密回溯分析
解题过程
加密流程分析
- 明文转为整数m
- 生成特殊质数p,q:满足(p-1) % e² == 0,q为p的下一个质数
- 计算N = p*q
- 加密:C = m^e mod N
- 重复25轮加密
解密步骤
# SageMath脚本
# 读取所有N, C, e参数
Ns = [...] # 25轮的N值
Cs = [...] # 25轮的密文值
e = 19
# 从最后一轮开始向前解密
for i in range(24, -1, -1):
N = Ns[i]
C = Cs[i]
# 恢复p,q:在sqrt(N)附近搜索满足条件的质数
root = isqrt(N)
for p in range(root-1000, root+1000):
if is_prime(p) and (p-1) % (e^2) == 0:
if N % p == 0:
q = N // p
break
# 在GF(p)和GF(q)上解方程
Fp = GF(p)
Fq = GF(q)
# 求根
roots_p = (Fp(C).nth_root(e, all=True))
roots_q = (Fq(C).nth_root(e, all=True))
# CRT组合解
for rp in roots_p:
for rq in roots_q:
m = crt(int(rp), int(rq), p, q)
# 检查m的比特长度是否符合要求
if m.nbits() == expected_bits:
next_plaintext = m
break
教学要点
- 小指数攻击的条件与限制
- 特殊质数生成方式的密码学意义
- 中国剩余定理在密码分析中的应用
- 多轮加密系统的回溯解密方法
- 有限域上多项式求根技术
Misc1
考察点
- 文件格式分析(HEX编辑)
- 基础编码转换
解题过程
- 解压得到图片文件
- 使用010 Editor等工具分析文件头部
- 发现HEX编码字符串
- 转换HEX到ASCII获得flag
教学要点
- 常见文件格式结构分析
- HEX编辑工具使用方法
- 编码识别与转换技巧
Misc2
考察点
- Steghide隐写工具使用
- Base64编码解码
- 二进制数据处理
- 逆向工程分析
- 异或加密破解
解题过程
- 解压得到图片文件
- 010 Editor分析发现尾部Base64字符串
- 解码得到二进制串:1000011010100000010101111001110011100100000110100101000001010101
- 图片属性中发现密钥提示:jzxcvb123
- Steghide提取隐写内容:steghide extract -sf x.jpeg -p jzxcvb123
- 获得test.zip,破解伪加密
- 逆向分析ELF文件中的加密逻辑:
- 64字节循环密钥异或加密
- 密钥:1000011010100000010101111001110011100100000110100101000001010101
- 将图片尾部的64位二进制与密钥异或得到:HELLo123
- 使用该密码解压获得flag.txt
教学要点
- Steghide隐写工具参数与使用
- ZIP文件伪加密识别与破解
- ELF文件逆向分析基础
- 异或加密原理与破解方法
- 多步骤隐写分析流程
RE
考察点
- 壳识别与脱壳技术(Themida/WinLicense)
- 花指令识别与清除
- 魔改RC4算法分析
- 魔改TEA算法分析
- 加密算法逆向工程
解题过程
- 检测到Themida/WinLicense壳,使用unlicense工具脱壳
- IDA分析发现花指令,手动NOP清除
- 分析主程序逻辑:
- 读取输入 → loc_421290处理 → loc_4213C0处理 → 与密文比较
- 分析loc_421290:魔改RC4算法
- 密钥:"thOs_IO_ke9"
- 加密:output[i] = input[i] + (K_i ^ 0x33)
- 分析loc_4213C0:魔改TEA算法
- 128-bit固定密钥
- 33轮迭代加密
- 解密流程:先TEA解密再RC4解密
教学要点
- 常见壳的特征与脱壳方法
- 花指令的识别与清除技术
- RC4算法原理与魔改分析
- TEA算法原理与魔改分析
- 复合加密系统的逆向分析方法
PWN
考察点
- 栈溢出漏洞利用
- Shellcode编写与构造
- 漏洞利用链设计
- 保护机制绕过
解题过程
- 检查保护机制:NX disabled, No PIE, No Canary → 栈可执行
- IDA分析发现栈溢出漏洞:
- char s[24]缓冲区
- fgets(s, 50, stdin) → 可写入49字节
- 构造利用payload:
- 前24字节:shellcode(execve("/bin/sh"))
- 填充至36字节
- 覆盖返回地址:jmp esp指令地址
- 添加esp调整指令:sub esp,40; call esp
- 发送payload获得shell
教学要点
- 栈溢出漏洞原理与利用方法
- Shellcode编写技术
- 漏洞利用链设计思路
- 保护机制识别与绕过技术
- 利用工具(pwntools等)的使用
综合教学要点
- CTF解题方法论:信息收集→漏洞识别→利用构造→flag获取
- 多知识点融合:实际题目往往融合多个安全领域知识点
- 工具链使用:掌握各类安全工具的配合使用
- 脚本编写能力:自动化处理复杂计算或重复操作
- 文档记录习惯:详细记录解题过程与发现,便于复盘学习
通过系统学习上述知识点和解题技巧,可以有效提升网络安全竞赛能力和实际安全分析技能。