HKCERTCTF作为亚太地区最具影响力的网络安全赛事之一,每年都吸引着全球顶尖战队的参与。2025年的赛事在赛题设计和基础设施上都有了显著升级,首次引入了云原生靶场环境和AI对抗机制。我们战队"0xFFFF"作为连续三年参赛的老队伍,这次选择了逆向工程和Web安全作为主攻方向。
比赛采用动态积分制,前48小时的解题过程堪称惊心动魄。最令人印象深刻的是那道结合了区块链智能合约漏洞与传统缓冲区溢出的混合题型,需要选手先通过前端界面注入获取合约地址,再逆向分析二进制文件找到溢出点。这种跨领域的题目设计正是现代CTF赛事的发展趋势。
这道价值500分的题目模拟了一个使用社交账号登录的博客系统。表面上看是标准的OAuth 2.0授权流程,但我们在测试时发现:
利用链构建过程:
python复制# 构造恶意重定向URL
redirect_uri = "https://victim.com/callback?redirect=https://attacker.com"
# 暴力破解state参数(实际比赛中用GPU加速)
for i in range(int(time.time())-100, int(time.time())):
if md5(str(i).encode()).hexdigest()[:8] == target_state[:8]:
# 获取到有效state后实施CSRF攻击...
关键突破点在于发现系统在JWK端点泄露了签名公钥,使得我们可以伪造管理员令牌。这个漏洞组合在真实世界的OAuth实现中相当典型,微软和Google都曾因此类问题发布过安全公告。
这道逆向题运行在组委会自定义的ARMv8模拟器上,给出了存在漏洞的聊天服务程序。我们花了3小时完成以下步骤:
利用代码的关键部分:
c复制// 触发UAF的昵称设置
send(sock, "NICK " + 'A'*0x20 + "\xde\xad\xbe\xef", ...);
// 通过消息发送覆盖虚函数表
send(sock, "MSG " + p64(0x41414141)*8 + shellcode, ...);
这道题的难点在于ARM架构下的寄存器分配规则与x86完全不同,而且组委会修改了部分系统调用号。我们不得不边比赛边查阅ARMv8手册,最终通过ROP链调用了mprotect来绕过NX保护。
针对我们攻破的这些漏洞,以下是企业级防护建议:
| 风险点 | 加固措施 | 检测方法 |
|---|---|---|
| 开放重定向 | 白名单校验回调域名 | 自动化参数模糊测试 |
| State参数 | 使用CSPRNG+HMAC | 熵值检测工具 |
| 令牌存储 | 内存存储+HttpOnly Cookie | Chrome开发者工具审计 |
对于类似逆向题的聊天服务程序,现代防护应当包括:
我们团队开发了一套基于LLVM的自动化加固工具,可以在编译阶段自动插入这些防护机制。
知识体系构建:我们维护着按漏洞类型分类的笔记库,每个类别包含:
工具链优化:定制了基于VSCode的CTF专用开发环境,集成:
bash复制# 一键启动所有调试器
ctf-run --bin ./target --gdb --radare --frida
比赛中我们总结出"3-5-10法则":
遇到卡壳时,我们会进行"四象限检查":
从本次比赛可以看出几个明显趋势:
我们战队已经开始研究WebAssembly安全、eBPF漏洞利用等前沿领域,为下届比赛做准备。这次比赛中暴露出的ARM架构知识短板,也促使我们建立了定期的架构专项培训计划。