2024年第九届“楚慧杯”湖北省网络与数据安全实践能力竞赛 WP
字数 1384 2025-08-22 12:22:30
"楚慧杯"湖北省网络与数据安全竞赛WP教学文档
一、Web题目解析
-
速算比赛(SSTI漏洞)
- 漏洞点:Jinja2模板注入,通过
{{config.__class__.__init__.__globals__.os.popen('tac /flag').read()}}直接读取系统文件。 - 关键技巧:
- 利用
__globals__获取Python全局对象,调用os.popen执行命令。 - 绕过过滤:确保payload无空格或特殊字符(如
{{config|attr(...)}})。
- 利用
- 漏洞点:Jinja2模板注入,通过
-
popmart反序列化
- 漏洞代码:
class popmart { public function __wakeup() { if ($this->molly === $this->yuki) echo $flag; } } - 利用步骤:
- 构造序列化数据:
O:7:"popmart":3:{s:4:"yuki";s:13:"dont_tell_you";s:5:"molly";s:13:"dont_tell_you";...}。 - 触发条件:通过
unserialize($_POST['pucky'])触发__wakeup,需满足$pucky="二仙桥"且POST两次。
- 构造序列化数据:
- 漏洞代码:
二、Misc题目解析
-
不良劫(图片隐写)
- 步骤:
- 文件分离:
binwalk提取隐藏文件,得到残缺二维码。 - 修复二维码:补全定位符后扫描,获flag第一部分
DASCTF{014c6e74-0c4a-48fa...}。 - 盲水印:合并面具图片,使用
stegsolve提取完整flag。
- 文件分离:
- 步骤:
-
gza_Cracker(字典爆破)
- 解法:
- 从TCP流11提取字典,暴力破解编码数据。
- Flag格式:
DASCTF{M0Y_W1sh_Y0u_LogF1le_Usg32WEM}。
- 解法:
-
ds-findphone(数据提取)
- 脚本关键:正则匹配734等前缀的电话号码:
pattern = rb'73[4-9]\d{8}' # 匹配734-739开头的号码 - 输出CSV后拼接flag:
DASCTF{66079048478833352585733002322295}。
- 脚本关键:正则匹配734等前缀的电话号码:
三、Crypto题目解析
-
ddd(Wiener攻击)
- 攻击条件:RSA中私钥
d较小(满足d < 1/3 * N^(1/4))。 - 实现代码:
def wienerAttack(e, n): cf = continuedFra(e, n) # 计算连分数展开 for d, k in getGradualFra(cf): if (e*d - 1) % k == 0: phi = (e*d - 1) // k p, q = solve_pq(1, n - phi + 1, n) # 解方程 if p*q == n: return d - 结果:解密得明文。
- 攻击条件:RSA中私钥
-
QAQTAT(离散对数)
- 非预期解:
- 计算矩阵行列式,转化为
GF(p)上的DLP问题。 - 使用
cado-nfs求解离散对数:./cado-nfs.py -dlp -ell $r target=$t $p - 通过
crt组合结果恢复密钥s。
- 计算矩阵行列式,转化为
- 非预期解:
-
Mypow(自定义幂函数)
- 漏洞点:
pow(m, e, n)在e为奇数时实际计算pow(m, e-1, n)。 - 解法:
- 分解
n(通过hint构造方程2x² - hint*x + 7n = 0求p)。 - 在
GF(p)和GF(q)上开e-1次方根,CRT组合后筛选含DASCTF的明文。
- 分解
- 漏洞点:
四、Reverse题目解析
- bouquet(逆向爆破)
- 关键逻辑:逐字符校验输入,错误时输出行数减少。
- 爆破脚本:
for i in range(25): for c in 'j7aw_sC3addq4TAo}8_Fda{SD': f[i] = c output = subprocess.run(f, input=''.join(f), capture_output=True) if len(output.stdout.splitlines()) == 49 - i*2: print(c, end='') break - Flag:
DASCTF{...}(具体值由爆破结果确定)。
五、总结
- Web:SSTI、反序列化利用需熟悉语言特性。
- Misc:综合考察文件分析、隐写工具和数据处理能力。
- Crypto:Wiener攻击、离散对数、非标RSA是高频考点。
- Reverse:动态调试与爆破结合,注意输出反馈。
附录:完整代码和工具链(如stegsolve、cado-nfs)需提前配置。