第十九届全国大学生信息安全竞赛暨第三届长城杯网数智安全大赛 初赛-wp
web
AI_WAF
内联注释绕过
1 | |
或者可以使用提示词注入来绕过
hellogate
图片尾有源码
1 | |
简单的反序列化
1 | |

redjs
前一段时间next.js的cve

dedecms
注册一个账号 test123/test123

在随后跳转的页面中发现了系统中早就存在的一个用户Aa123456789

尝试弱口令 Aa123456789/Aa123456789 成功登录后台

发现并不能成功利用后台的任意文件读取的漏洞,于是在会员列表中找到可以提升用户权限的接口

成功提升 test123 用户的权限为超级管理员后利用已知的cve实现任意文件读取
1 | |

EzJava
爆破出弱口令 admin/admin123
示例中用的是th:text,可以解析,所以考虑Thymeleaf模板注入
过滤了new,flag等关键字
列目录
1 | |
读flag
1 | |
Deprecated
是第二届长城杯决赛的原题
两个jwt碰撞后得到密钥再伪造jwt
然后利用数组和字符串绕过弱比较读文件
reverse
babygame
godot游戏,gdre_tools解包
flag.gdc
1 | |
game_manager.gdc
1 | |
简单分析一下就是把key中的A替换为B,然后再解一个aes就可以了

wasm-login
某人本想在2025年12月第三个周末爆肝一个web安全登录demo,结果不仅搞到周一凌晨,他自己还忘了成功登录时的时间戳了,你能帮他找回来吗?
提交格式为flag{时间戳正确时的check值}。是一个大括号内为一个32位长的小写十六进制字符串。
在check的时候发现,使用md5进行比对,要开头ccaf33e3512e31f3才可以继续跟踪
1 | |
发现Date.now()时间戳和账号密码传到wasm的authenticate()函数处理。断点进入后发现是HMAC-SHA256
1 | |
通过题目给出的信息可以得出时间在2025年12月21日左右
在index.html中插入exp后运行爆破即可
1 | |
查看控制台
1 | |

vvvmmm
Eternum
crypto
ECDSA
题目代码里直接得到私钥priv_int
1 | |
EzFlag
分析ELF,要求先输入密码
1 | |
输入密码后,只能显示几位密码,sleep()函数后面出不来,所以只能根据逻辑来写脚本,主要是斐波那契
1 | |
1 | |
RSA_NestingDoll
题目提供了两个RSA模数:
- Inner Modulus ($N_1$):由四个 512-bit 的素数生成,$N_1 = p_1 \cdot q_1 \cdot r_1 \cdot s_1$
- Outer Modulus ($N$):由四个 1024-bit 的素数生成,$N = P \cdot Q \cdot R \cdot S$
- Flag 加密:Flag 是使用内层模数 $N_1$ 加密的
题目的关键在于分析素数生成的逻辑
1 | |
根据外层素数 $P$ 的构造公式为
$$
P = (p_1 \times \prod \text{small_primes} \times \text{pad}_1 \times \text{pad}_2) + 1
$$
这意味着
$$P - 1 = k \cdot p_1$$
即 $P - 1$ 是 $p_1$ 的倍数。同理,$Q-1$ 是 $q_1$ 的倍数,以此类推。所以就可以用Pollard's p-1分解算法来求
在本题中$P-1$ 虽然不是完全 smooth(因为它包含了一个大因子 $p_1$),但我们已知这个大因子的来源——它就在 $N_1$ 里。我们先构造$E$来求出这个最大的因子$p_1$。然后补全剩余的因子后再剥离即可找到所有因子然后还原d
$$
f_{in} = \gcd(f_{out} - 1, N_1)
$$
得到 $p_1, q_1, r_1, s_1$ 后,计算私钥 $d$
$$
\phi(N_1) = (p_1-1)(q_1-1)(r_1-1)(s_1-1)
$$
$$
d = e^{-1} \pmod{\phi(N_1)}
$$
$$
m = c^d \pmod{N_1}
$$
1 | |

流量分析
SnakeBackdoor-1
攻击者爆破成功的后台密码是什么?,结果提交形式:flag{xxxxxxxxx}
zxcvbnm123

SnakeBackdoor-2
攻击者通过漏洞利用获取Flask应用的
SECRET_KEY是什么,结果提交形式:flag{xxxxxxxxxx}
全局搜SECRET_KEY即可
c6242af0-6891-4510-8432-e1cdf051f160

SnakeBackdoor-3
攻击者植入的木马使用了加密算法来隐藏通讯内容。请分析注入Payload,给出该加密算法使用的密钥字符串(Key) ,结果提交形式:flag{xxxxxxxx}
在stream 1789中可以看到一段payload
脚本循环解密
1 | |
得到shell
1 | |
flag{v1p3r_5tr1k3_k3y}
SnakeBackdoor-4
攻击者上传了一个二进制后门,请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径
根据上一题的shell的内容,使用rc4解密data数据
在stream 1817中看到对木马进行了伪装

flag{python3.13}
SnakeBackdoor-5
请提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥(hex,小写字母),结果提交形式:flag{[0-9a-f]+}
提取流量包中传输的zip,密码在stream 1813

分析elf文件
先接收4字节seed,字节序转换当作随机种子
1 | |
调用 srand,连续 rand() 4 次,得到 16 字节 通信密钥
1 | |
需要找到服务端发送的4个字节的seed
在执行/tmp/python3.13后的第一个包的前四个字节可以得到0x34, 0x95, 0x20, 0x46

还原
1 | |

SnakeBackdoor-6
请提交攻击者获取服务器中的flag。结果提交形式:flag{xxxx}
分析elf文件,发现对数据进行了SM4加密,直接解解不出来,应该改了参数

从ELF中提取SBox以及FK/CK常量
1 | |
然后解密数据
1 | |
共六条命令
1 | |
根据命令替换下得到 flag{6894c9ec-719b-4605-82bf-4fe1de27738f}
或者可以直接改rip跳过去补参数解密数据
AI安全
The Silent Heist
题目中给了我们1000条正常数据,虽然我们不知道具体的特征含义,但我们可以假设数据服从某种高维概率分布。这里我们用GMM模型使用正态分布来最大程度地解释现有数据。当GMM训练完成,它就掌握了数据的模型。我们可以调用 gmm.sample(n_samples) 来生成全新的数据点
1 | |
当生成差不多8000条数据的时候总金额就可以超过$2,000,000