题目附件见 attachment 目录。
部分题目依赖于一些外部 URL,这些 URL 及对应的内容详见 oob_attachment 目录。
| 分类 | # | 内部ID | 题目标题 | Flag | 分值 | 校内通过 | 总通过 |
|---|---|---|---|---|---|---|---|
| Misc | 1 | signin | →签到← | / | 100 | 106+16 | 338+41 |
| 4 | trivia | 小北问答 Remake | 答对一半 | 200 | 93 | 146+4 | |
| 全部答对 | 200 | 27+9 | 36+14 | ||||
| 6 | contract | 共享的机器 | / | 200 | 17+3 | 27+4 | |
| 7 | ipynb | 翻车的谜语人 | Flag 1 | 200 | 46+2 | 78+6 | |
| Flag 2 | 200 | 12+17 | 20+24 | ||||
| 5 | newsong | 叶子的新歌 | 夢は時空を越えて | 200 | 12+1 | 20+4 | |
| 幻夢界 | 100 | 10+4 | 18+10 | ||||
| 夢と現の境界 | 200 | 9+3 | 17+6 | ||||
| Web | 2 | access | 在线解压网站 | / | 200 | 36+8 | 81+13 |
| 17 | uwsgi | 早期人类的聊天室 | / | 400 | 5+3 | 8+6 | |
| 15 | webhole | Q小树洞的一大步 | / | 450 | 1 | 4+1 | |
| 11 | json | Flag即服务 | 零·获得代码 | 100 | 16+18 | 34+26 | |
| 壹·开通会员 | 200 | 2+1 | 9+1 | ||||
| 贰·为所欲为 | 350 | 2 | 4+1 | ||||
| Binary | 3 | ipgw | 诡异的网关 | / | 200 | 28+6 | 48+8 |
| 14 | gdb | 射水鱼 | / | 500 | 3+1 | 7+1 | |
| 12 | escape | 字符串转义 | / | 500 | 5+2 | 6+3 | |
| 13 | bf | 最强大脑 | Flag 1 | 150 | 17+11 | 28+14 | |
| Flag 2 | 500 | 3 | 5 | ||||
| Algorithm | 10 | pygame | 电子游戏概论 | Flag 1 | 200 | 0+4 | 2+5 |
| Flag 2 | 200 | 0+1 | 1+1 | ||||
| 8 | ezrsa | 密码学实践 | Flag 1 | 200 | 38+2 | 53+5 | |
| Flag 2 | 200 | 18+6 | 27+7 | ||||
| 9 | sweeper | 扫雷 | Flag 1 | 150 | 16+7 | 24+9 | |
| Flag 2 | 250 | 3+1 | 4+3 | ||||
| 16 | dragon | 龙珠模拟器 | Basic | 200 | 7+1 | 9+2 | |
| Super | 500 | 2 | 4 |
“#” 表示题目编号,附件命名和端口号取决于此编号。
“内部ID” 对选手不可见,是源码目录下题目的名称。“题目标题” 是选手实际看到的题目名称。
“分值” 表示题目原始分值,实际分值取决于校内第一阶段通过人数。公式见 FAQ。
“校内通过” 和 “总通过” 人数的两个部分分别表示第一阶段和第二阶段的通过人数。
欢迎参赛!随着比赛进行,我们会发布对题目的补充说明、提示及后续赛程安排,届时将在本平台和 QQ 群 732129414 发布,敬请留意。
如果你对题目有疑问,可以在群里私聊管理员或发邮件到 geekgame at pku.edu.cn。除通过上述方式与组委会联系外,所有选手在比赛结束前不得与他人讨论题目。
点击 “打开/下载题目” 下载题目附件
补充说明:Flag 是在英语里有意义的内容
如果你是第一次打 CTF 解题赛,下面是一些说明:
每道题目都对应着一个被称为 Flag 的答案,格式为
flag{...}。你需要按照要求在题目所给文件中解出 Flag,或者攻击题目指定的系统在服务器中得到 Flag。将 Flag 输入到下面的文本框即可得分。比赛主页的 “资料推荐” 栏目有一些帮助你快速了解常见解题方法的资料。
Flag 区分大小写,所有字符均为可打印 ASCII 字符。某些题目有多个 Flag,比赛平台会自动判断你提交的 Flag 是哪个。
作为身份认证措施,某些题目会要求你输入个人 Token。点页面底部的 “复制个人 Token” 按钮来获得自己的 Token。
第二阶段提示
有些 PDF 软件在全选时无法选中超出页面范围的文字,比如 Safari 和 Acrobat。你可以把文字调小或者把页面调大,这样文字就不在页面外了。当然也可以换一个软件。
You 酱善于使用十种搜索引擎,别人不清楚的知识她能一秒钟搜索出来。这是众人皆知的事实。
You 酱的朋友菜宝在刷往年题的时候找到了一份没有答案的资料。她本想询问 You 酱,但听说 You 酱已经早在 5 月份就把课程辅导这项业务外包给了你。
于是,现在菜宝手持两枚 Flag,希望你能帮她解答这些题目。你每小时可以提交一次答案,答对至少一半可以获得第一个 Flag,全部答对可以获得第二个 Flag。
点击 “打开/下载题目” 进入题目网页
第二阶段提示
不同的领域有不同的专业工具。你可能无法一下找到答案,但是你能找到一个工具,然后用这个工具得到答案。
这个工具可能是某个信息公开系统,可能是某个资料存档,可能是某个在线查询服务。而对于整数数列构成的数学问题来说,这个著名的工具是……
一位选手在做完一个叫“未来的机器”的题目后,对出题人十分不满:“怎么会有人设计出这种机器,我看就算是全世界的人一块来做这题,都得做三天三夜。”
不过,全世界真的存在一个机器,所有人都可以在上边执行代码,所有人也都能看到别人的代码,以及这代码执行的结果。
有人在这个机器上传了一个函数,你可以猜测 Flag 是什么,而这个函数可以知道你猜的 Flag 是否正确。
点击 “打开/下载题目” 在 bitaps 网站查看该智能合约,你也可以用其他工具查看以太坊 Ropsten 链上的合约 0xa43028c702c3B119C749306461582bF647Fd770a
第二阶段提示
能做智能合约的逆向工具有很多。
查询以太坊存储的方法也有很多。
你甚至不需要除 Etherscan 以外的网站。
作为曾担任上届比赛命题工作的资深谜语人,You 酱这次也被邀请来出一道考察信息隐写的 Misc 题目。You 酱找组委会确认了本届劳务费能否准时发放后就迅速开工了,但她不知道,这其实是一个彻彻底底的陷阱。
事实上,组委会曾在几个月前收到了报告,称 You 酱或违反规定在题目里私自掺杂大量私货,但这只是个猜想,不一定对。于是,组委会在邀请 You 酱命题的同时,派出间谍麻里奈小姐持续关注 You 酱的一举一动,希望能够发现决定性的证据。
麻里奈小姐不负众望,通过量子波动算法截获了一段 You 酱访问境外服务器的流量记录。现在她想让你来帮忙分析其中的端倪。
点击 “打开/下载题目” 下载题目附件 (FAQ: 常用工具)
提示:You酱具体干了什么?
第二阶段提示
Flag 1. You 酱在一边挂着 B 站直播间一边使用 Jupyter Notebook 出题,你只需关心后者
Flag 2. You 酱前几天在服务器上运行了命令
date,并把输出分享给了你:Sat 06 Nov 2021 11:45:14 PM CST
“叶子又发新歌了。”
叶子是小雨的好朋友,最近想成为四轱辘爱抖露所以沉迷写歌,但由于资质太过平庸,他写的歌并没有什么人听。每当他在无人问津的阴雨霉湿之地,和着雨音,唱着没有听众的歌曲的时候,也不会有人因为他的歌声而在路上拦住他说:太好汀了⑧!
不过毕竟,叶子是小雨最好最好的朋友,小雨还是决定听一听叶子的新歌。但是她总感觉,叶子似乎在歌里藏了一些东西。
“是想对我说的话吗?”
小雨决定找出歌里藏着的三个Flag。
点击 “打开/下载题目” 下载题目附件 (FAQ: 常用工具)
补充说明:得到的每个密码或提示最多只会用到一次
第二阶段提示
使用某些软件可以查看 MP3 的 metadata
【FAQ:常用工具】里的虚拟化软件在这道题里真的有用
解题过程中得到的文本中可能包含提示
Q 小网盘可以在线预览多种文件,但是唯独压缩文件不能在线解压。这让小 A 十分难受。
为了解决这个问题,小 A 写了一个在线解压网站。只要你上传zip文件到这个网站,它就会自动帮你解压,之后你就可以访问解压出来的文件了。配合着浏览器插件,可以完美解决 Q 小网盘的痛点。
为了让大家相信他的网站是安全的,不会把压缩文件内容的泄漏给其他人,他在磁盘根目录下放了一个叫 flag 的文件,声称只要能拿到其中内容就可以获得一顿火锅。你以他的网站功能并不完整为理由,想骗取一顿火锅。然而他只是表示这并不影响网站的安全性,只有攻破网站的人才能获得火锅。
你十分生气,铁了心地要吃上这顿免费的火锅。
你可以 下载本题的程序
点击 “打开/下载题目” 进入题目网页 (FAQ: 关于 Web 题目环境)
第二阶段提示
ZIP 可以保留文件的许多属性,比如类型。
You 酱有着二十一年网龄,她依稀记得最开始人们是怎么在网上聊天的。那时的网页聊天室功能单一,所有的信息都是纯文本,中文字符甚至需要手动编码,才能发送到网络的另一端。“你今天吃什么?” 亲切的问候顺着这条虚拟的信息管道传达到全世界,可能这就是 管人 的魅力吧。
现在的年轻人似乎都不懂这种原始的沟通方式了,You 酱很伤心。为了重铸 管人 荣光,她用最喜欢的 Python 库 Flask 写了一个模拟早期聊天室的网页,希望你也能体会到其中的乐趣。
You 酱记得很清楚,系统上线之前应该关闭调试开关,设置正确的权限,并且用 uwsgi 代替 Flask 的自带服务器。Flag 文件位于磁盘的根目录,即 /flag。
点击 “打开/下载题目” 进入题目网页 (FAQ: 关于 Web 题目环境)
补充说明:初次访问时可能遇到 502 错误,这是因为后端尚未启动完成,等几秒后刷新即可
第二阶段提示
把 uwsgi 端口暴露给别人是个危险的事情,可以被用来干坏事。
正确的权限设置能阻止干坏事。错误的权限设置能用来干更多坏事。
You 酱正在帮兆京大学开发一个新的校内论坛,叫做 Q小树洞。由于资金不足,You 酱找了一个漂亮的前端界面,决定先用空壳界面骗到一笔投资,然后再雇人写后端代码。就像海浪冲上沙滩,一切都是那么自然……
投资人「公子」打开企划书上写的网址 https://prob15-qkuhole.geekgame.pku.edu.cn/hole/,发现几乎所有功能都无法使用。「公子」觉得自己受到了欺骗,果断地拒绝了这笔投资,并放出狠话:“这机会还挺难得的。就算是一个连数据库都没有的网站,我也能黑给你看!”
你可以 下载本题的 XSS Bot 程序
点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob15.geekgame.pku.edu.cn 10015 手动连接到 XSS Bot
如果你此前没有做过 XSS 类型的题目,下面是一些说明:
题目所述的目标网站具有某种漏洞,使得用户在访问某个恶意网址时,目标网站上的隐私信息会被攻击者获取。
我们提供了一个模拟受害者行为的程序,称为 XSS Bot。请设法利用目标网站上的漏洞,获得受害者浏览器中的 Flag。
第二阶段提示
看似正常的业务逻辑如果进行了一些危险的操作也可能被恶意利用。事实上,此漏洞在P大树洞存在了超过一年的时间。
后端代码已经经过修改,将不再阻止访问 .map 类型的文件。XSS Bot 代码也经过了修改,将显示页面标题。
另外由于 XSS Bot 在校内,校内选手可以考虑直接使用内网 IP 搭建服务器让 XSS Bot 访问。
You 酱听说最近 *aaS 概念十分火热,无论什么都可以做成开放的 API,就像连接着每个设备的一条分布式软总线,可以跨越编程语言和操作系统的限制,实现任何想做的功能。有了 *aaS,我们就离元宇宙更近一步了呢。
受此鼓舞,You 酱用一天时间开发出了震撼人心的新项目 JSON-as-a-Service,要解决困扰全世界开发者几十年的 JSON 格式转换难题。
她在自己保存 Flag 的服务器上部署了这个服务,并发给你了一个链接,想请你体验一下。
点击 “打开/下载题目” 进入题目网页 (FAQ: 关于 Web 题目环境)
第二阶段提示
NodeJS 项目源码目录中通常有一个 JSON 文件含有关于依赖包的重要信息,请设法得到它。浏览器会遵循 RFC 3986 处理 URL 中的特殊路径,别的软件可能不会。
qs 和 path-to-regexp 是 express 用来解析 URL 的两个库,它们的文档或许会带给你意想不到的发现。
getflag 函数删除了 flag 文件,但没有完全删除。
2021年,小咕终于把操作系统从 XP 升级到了 Win 7! 正如身边同学的装机必备软件是 2345 浏览器、360 安全卫士,小咕刚装好系统就要安装北大网关客户端。
小咕熟练的打开 its,下载,安装,完成!
但这次的程序,好像……有点不一样? 会不会是被黑客篡改过了?
点击 “打开/下载题目” 下载题目附件
此程序专为本题而设计,请勿用于其他用途
提示:探索程序的 UI 可能带来意外收获。
第二阶段提示
账号密码保存在哪里?
“下辈子投胎,你最希望成为什么动物?”
在林间优雅穿行的蟒蛇? 在南极自由奔跑的企鹅? 还是早起捉虫的布谷鸟?
小咕想了想,“还是做一条能随时划水的鱼吧。”
“最好是肚子里装满 Flag 的那种?”
补充说明:Flag 文件位于磁盘的根目录,即 /flag
你可以 下载本题的程序
点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob14.geekgame.pku.edu.cn 10014 手动连接到题目 (FAQ: 关于终端交互)
第二阶段提示
你可以 下载新增的附件
小 Z 是一名资深的 Linux 底层开发者,他开发的命令行工具在社区有着极高的声望。为了更好地与 Shell 命令结合,小 Z 在他的工具里需要处理用户输入的转义字符,然而……
请利用这段处理字符串中转义字符的程序,找出保存在服务器文件系统中的 Flag。
你可以 下载本题的程序
点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob12.geekgame.pku.edu.cn 10012 手动连接到题目 (FAQ: 关于终端交互)
第二阶段提示
输入以“\”结尾会发生什么?
输入且仅输入尽量多的“\”字符会发生什么?能否用来移动金丝雀值和函数返回值的位置从而导致其值的泄漏?
小咕最喜欢的电视节目是《最强大脑》! 节目看得多了,小咕也想变得和里面的选手们一样强大。 在某次上课的路上,小咕遇见了一位最强大脑的参赛选手,于是上前咨询。
小咕:“请问如何才能提升脑力?”
选手:“同学你是哪个学院的?”
小咕:“信科,不过好像要被拆没了……”
选手:“那我推荐通过编程来锻炼大脑。”
小咕:“我平时已经用 C/C++/Python 写了好多程序,也没见有提升呀。”
选手:“不如试试 Brainfuck?我这有台能执行 Brainfuck 代码的服务器,你设法读取上面的 Flag 文件,一定能得到锻炼。”
你可以 下载本题的程序
点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob13.geekgame.pku.edu.cn 10013 手动连接到题目 (FAQ: 关于终端交互)
第二阶段提示
你可以 下载新增的附件
菜宝是 You 酱的朋友,这学期选修了《电子游戏概论》,编写了一个有趣的 2D 小游戏作为大作业。而你,选修了同一个老师开设的《电子游戏外挂概论》。你收到的大作业是,为菜宝的 2D 小游戏编写一个外挂程序。
据说为了限制优秀率,如果游戏被别人攻破,这个人的《电子游戏概论》就无法拿到 85 分以上的成绩。反之,如果未能写出外挂,这个人的《电子游戏外挂概论》就无法拿到 85 分以上的成绩。
菜宝对这种老师躺平、学生内卷的新型教学方式感到敬佩,于是在 Deadline 的前一天连夜把游戏从单机移植为了网游,把游戏逻辑全部搬到了服务端进行。这样大概就安全了吧?
点击 “打开/下载题目” 下载题目附件
程序在 Windows 10 21H1 和 Wine 5.0.3 上测试可用,如果无法运行请安装 VC++ Runtime。如果程序路径名称含有中文可能无法运行。
提示:程序是用什么语言写的?与服务器的交互是如何进行的?
提示:1. 程序采用 py2exe 打包,但网上的脚本可能需要少量修改;2. 服务器发送的数据包含一些额外信息
第二阶段提示
你可以下载 新增的附件
此题的环境是 Python 3.8.6。
Flag 1 其实是一个 Binary 或者 Misc 题,跟 Algorithm 关系不大的。在经过一些处理之后,你甚至可以手玩。
小 R 在秋季学期选了一门叫《密码学基础》的课程。然而在第一节课上,他就发现这门课似乎和他想象中的不太一样(懂的都懂)。
望着投影上密密麻麻的数学公式,中期退课的意愿在他的脑中愈加强烈。他只是想学一下密码学在现实中的应用,怎么就变成了数学公式的推导了呢?
他还记得第一节课的课件上的一句话:“学了这门课后,你也不能学会设计一个密码学系统”。
但他仍在这门课上了解了不少知识。他了解了哈希函数的构造,了解了私钥密码系统的设计,了解了现有的公钥密码体系。
“既然课程只讲密码学理论,那我就自己做密码学实践。”
这是他构建的密码学世界,他希望在这个世界内只有对的人才能拥有旗帜。
你可以 下载本题的程序
点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob08.geekgame.pku.edu.cn 10008 手动连接到题目 (FAQ: 关于终端交互)
第二阶段提示
观察下明文和密文的关系
观察 RSA 具体流程,构造题目要求的消息
小咕曾是部队里负责扫雷的工兵,退役之后,迷上了电脑上自带的扫雷游戏。 以他的话说,“这是速度与精度的完美结合”。
2021年,小咕终于把操作系统从 XP 升级到了 Win 7! 正如身边的人抱怨 Win 11 的华而不实,小咕也感觉升级后的扫雷游戏失去了某种朴素的味道。 但他却无处泄愤。
于是,小咕决定自学编程,实现自己心中完美的扫雷游戏。 鉴于玩家水平各异,小咕还实现了 Easy 模式,以纪念首次上阵就踩雷的同志们。
你可以 下载本题的程序
点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob09.geekgame.pku.edu.cn 10009 手动连接到题目 (FAQ: 关于终端交互)
提示:困难模式对应 Flag 1,简单模式对应 Flag 2。
第二阶段提示
了解一下 Python 随机数的实现。
小 Z 十分喜欢《龙珠》。他总是在想,如果自己生活在那个世界,故事会如何进行。
不过这只是他单纯的幻想,他甚至对这个世界都没有太多的了解。不过,他仍然希望自己能够在某个世界中集齐散落在世界各地的七颗龙珠。
他写了一个世界生成器。在这个世界中会生成七种珠子,散落在全图各地。当他收集所有七种珠子时,就可以召唤出 Flag。为了锻炼他在不同环境的适应能力,生成世界的方法有两种,分别对应两个 Flag。
点击 “打开/下载题目” 进入题目网页
第二阶段提示
了解一下 Java 中 Random 类的实现,观察不同种类珠子的关系。
考虑对 Random 的种子进行可控的差分。
对于第二部分,这题还存在另外一个简单得多的方法。