SJTU-CTF 2025 部分 WriteUp
本文最后更新于 天前,文中部分描述可能已经过时。
又是一年一度的校赛,今年继续给校赛出了 2 道 Web 题:SmartGrader、EzWebAuthn(_Revenge),赛后按照惯例发一下出题思路和解题过程。不过考虑到题目后续会搬到校内 OJ,为避免影响后面同学的练习效果就全部加密了,密码是对应题目的 Flag,解出后可以来看看出题思路和可能的其他解法。
SmartGrader
来试试我写的分数换算小工具吧!
答题情况
11 Solves (SJTU 5 Solves + ZJU 6 Solves) / 590 pts
一个抽象的分数换算小工具,用户可以输入评分规则和百分制成绩,提交给后端换算成等级制成绩。
密码提示:密码为 SmartGrader 题目的 Flag
EzWebAuthn / EzWebAuthn_Revenge
给网站加上了 WebAuthn 无密码登录,这下不怕被脱库了
说明:
题目环境每 5 分钟自动重置
如果需要在本地运行题目环境,请使用
http://localhost:<port>
进行访问,注意不要使用http://127.0.0.1:<port>
由于平台限制,创建远程实例后请勿直接访问,请使用
socat
将远程端口转发至本地,命令是socat TCP4-LISTEN:<port>,bind=localhost,reuseaddr,fork TCP4:instance.penguin.0ops.sjtu.cn:<port>
,然后使用http://localhost:<port>
进行访问,注意不要使用http://127.0.0.1:<port>
Hint1: 对比 EzWebAuthn 和 EzWebAuthn_Revenge 的题目附件,或许可以找到 EzWebAuthn 的非预期解法
Hint2: 对于预期解法,仔细观察 ORM scalar 方法的实现
答题情况
EzWebAuthn 6 Solves (SJTU 2 Solves + ZJU 4 Solves) / 764 pts
EzWebAuthn_Revenge 4 Solves (SJTU 2 Solves + ZJU 2 Solves) / 866 pts
一个使用 WebAuthn 进行身份认证的小网站,目标是登录 admin 的账号获取 Flag。
做题之前需要先了解一下什么是 WebAuthn。简单来说,WebAuthn 是一种无密码身份验证标准,允许用户使用生物识别、硬件密钥等方式进行身份验证。WebAuthn 的工作原理是,用户在注册时会生成一对公私钥,公钥存储在服务器上,私钥存储在用户的设备上。登录时,服务器会向用户的设备发送一个挑战,用户使用私钥对挑战进行签名,然后将签名发送回服务器进行验证。由于整个过程中不涉及密码口令,服务器上只存储公钥,因此即使服务器由于某种原因(如 SQL 注入)被脱库,攻击者也无法仿冒用户的身份进行登录。
非预期解法(仅适用于 EzWebAuthn)
密码提示:密码为 EzWebAuthn 题目的 Flag
预期解法(适用于 EzWebAuthn / EzWebAuthn_Revenge)
密码提示:密码为 EzWebAuthn_Revenge 题目的 Flag
评论