Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

1st PKU GeekGame 题目列表

题目附件见 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。

“校内通过” 和 “总通过” 人数的两个部分分别表示第一阶段和第二阶段的通过人数。

Misc

→签到←

欢迎参赛!随着比赛进行,我们会发布对题目的补充说明、提示及后续赛程安排,届时将在本平台和 QQ 群 732129414 发布,敬请留意。

如果你对题目有疑问,可以在群里私聊管理员或发邮件到 geekgame at pku.edu.cn。除通过上述方式与组委会联系外,所有选手在比赛结束前不得与他人讨论题目。

点击 “打开/下载题目” 下载题目附件

补充说明:Flag 是在英语里有意义的内容

如果你是第一次打 CTF 解题赛,下面是一些说明:

每道题目都对应着一个被称为 Flag 的答案,格式为 flag{...}。你需要按照要求在题目所给文件中解出 Flag,或者攻击题目指定的系统在服务器中得到 Flag。将 Flag 输入到下面的文本框即可得分。

比赛主页的 “资料推荐” 栏目有一些帮助你快速了解常见解题方法的资料。

Flag 区分大小写,所有字符均为可打印 ASCII 字符。某些题目有多个 Flag,比赛平台会自动判断你提交的 Flag 是哪个。

作为身份认证措施,某些题目会要求你输入个人 Token。点页面底部的 “复制个人 Token” 按钮来获得自己的 Token。

第二阶段提示

有些 PDF 软件在全选时无法选中超出页面范围的文字,比如 Safari 和 Acrobat。你可以把文字调小或者把页面调大,这样文字就不在页面外了。当然也可以换一个软件。

小北问答 Remake

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: 常用工具)

补充说明:得到的每个密码或提示最多只会用到一次

第二阶段提示

  1. 使用某些软件可以查看 MP3 的 metadata

  2. 【FAQ:常用工具】里的虚拟化软件在这道题里真的有用

  3. 解题过程中得到的文本中可能包含提示

Web

在线解压网站

Q 小网盘可以在线预览多种文件,但是唯独压缩文件不能在线解压。这让小 A 十分难受。

为了解决这个问题,小 A 写了一个在线解压网站。只要你上传zip文件到这个网站,它就会自动帮你解压,之后你就可以访问解压出来的文件了。配合着浏览器插件,可以完美解决 Q 小网盘的痛点。

为了让大家相信他的网站是安全的,不会把压缩文件内容的泄漏给其他人,他在磁盘根目录下放了一个叫 flag 的文件,声称只要能拿到其中内容就可以获得一顿火锅。你以他的网站功能并不完整为理由,想骗取一顿火锅。然而他只是表示这并不影响网站的安全性,只有攻破网站的人才能获得火锅。

你十分生气,铁了心地要吃上这顿免费的火锅。

你可以 下载本题的程序

点击 “打开/下载题目” 进入题目网页 (FAQ: 关于 Web 题目环境)

第二阶段提示

ZIP 可以保留文件的许多属性,比如类型。

早期人类的聊天室

You 酱有着二十一年网龄,她依稀记得最开始人们是怎么在网上聊天的。那时的网页聊天室功能单一,所有的信息都是纯文本,中文字符甚至需要手动编码,才能发送到网络的另一端。“你今天吃什么?” 亲切的问候顺着这条虚拟的信息管道传达到全世界,可能这就是 管人VPiper 的魅力吧。

现在的年轻人似乎都不懂这种原始的沟通方式了,You 酱很伤心。为了重铸 管人VPiper 荣光,她用最喜欢的 Python 库 Flask 写了一个模拟早期聊天室的网页,希望你也能体会到其中的乐趣。

You 酱记得很清楚,系统上线之前应该关闭调试开关,设置正确的权限,并且用 uwsgi 代替 Flask 的自带服务器。Flag 文件位于磁盘的根目录,即 /flag

点击 “打开/下载题目” 进入题目网页 (FAQ: 关于 Web 题目环境)

补充说明:初次访问时可能遇到 502 错误,这是因为后端尚未启动完成,等几秒后刷新即可

第二阶段提示

把 uwsgi 端口暴露给别人是个危险的事情,可以被用来干坏事

正确的权限设置能阻止干坏事。错误的权限设置能用来干更多坏事。

Q小树洞的一大步

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 访问。

Flag即服务

You 酱听说最近 *aaS 概念十分火热,无论什么都可以做成开放的 API,就像连接着每个设备的一条分布式软总线,可以跨越编程语言和操作系统的限制,实现任何想做的功能。有了 *aaS,我们就离元宇宙更近一步了呢。

受此鼓舞,You 酱用一天时间开发出了震撼人心的新项目 JSON-as-a-Service,要解决困扰全世界开发者几十年的 JSON 格式转换难题。

她在自己保存 Flag 的服务器上部署了这个服务,并发给你了一个链接,想请你体验一下。

点击 “打开/下载题目” 进入题目网页 (FAQ: 关于 Web 题目环境)

第二阶段提示

  1. NodeJS 项目源码目录中通常有一个 JSON 文件含有关于依赖包的重要信息,请设法得到它。浏览器会遵循 RFC 3986 处理 URL 中的特殊路径,别的软件可能不会。

  2. qspath-to-regexp 是 express 用来解析 URL 的两个库,它们的文档或许会带给你意想不到的发现。

  3. getflag 函数删除了 flag 文件,但没有完全删除。

Binary

诡异的网关

2021年,小咕终于把操作系统从 XP 升级到了 Win 7! 正如身边同学的装机必备软件是 2345 浏览器、360 安全卫士,小咕刚装好系统就要安装北大网关客户端。

小咕熟练的打开 its,下载,安装,完成!

但这次的程序,好像……有点不一样? 会不会是被黑客篡改过了?

点击 “打开/下载题目” 下载题目附件

此程序专为本题而设计,请勿用于其他用途

提示:探索程序的 UI 可能带来意外收获。

第二阶段提示

账号密码保存在哪里?

射水鱼

“下辈子投胎,你最希望成为什么动物?”

在林间优雅穿行的蟒蛇? 在南极自由奔跑的企鹅? 还是早起捉虫的布谷鸟?

小咕想了想,“还是做一条能随时划水的鱼吧。”

img

“最好是肚子里装满 Flag 的那种?”

补充说明:Flag 文件位于磁盘的根目录,即 /flag

你可以 下载本题的程序

点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob14.geekgame.pku.edu.cn 10014 手动连接到题目 (FAQ: 关于终端交互)

第二阶段提示

你可以 下载新增的附件

字符串转义

小 Z 是一名资深的 Linux 底层开发者,他开发的命令行工具在社区有着极高的声望。为了更好地与 Shell 命令结合,小 Z 在他的工具里需要处理用户输入的转义字符,然而……

请利用这段处理字符串中转义字符的程序,找出保存在服务器文件系统中的 Flag。

你可以 下载本题的程序

点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob12.geekgame.pku.edu.cn 10012 手动连接到题目 (FAQ: 关于终端交互)

第二阶段提示

  1. 输入以“\”结尾会发生什么?

  2. 输入且仅输入尽量多的“\”字符会发生什么?能否用来移动金丝雀值和函数返回值的位置从而导致其值的泄漏?

最强大脑

小咕最喜欢的电视节目是《最强大脑》! 节目看得多了,小咕也想变得和里面的选手们一样强大。 在某次上课的路上,小咕遇见了一位最强大脑的参赛选手,于是上前咨询。

小咕:“请问如何才能提升脑力?”

选手:“同学你是哪个学院的?”

小咕:“信科,不过好像要被拆没了……”

选手:“那我推荐通过编程来锻炼大脑。”

小咕:“我平时已经用 C/C++/Python 写了好多程序,也没见有提升呀。”

选手:“不如试试 Brainfuck?我这有台能执行 Brainfuck 代码的服务器,你设法读取上面的 Flag 文件,一定能得到锻炼。”

你可以 下载本题的程序

点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob13.geekgame.pku.edu.cn 10013 手动连接到题目 (FAQ: 关于终端交互)

第二阶段提示

你可以 下载新增的附件

Algorithm

电子游戏概论

菜宝是 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: 关于终端交互)

第二阶段提示

  1. 观察下明文和密文的关系

  2. 观察 RSA 具体流程,构造题目要求的消息

扫雷

小咕曾是部队里负责扫雷的工兵,退役之后,迷上了电脑上自带的扫雷游戏。 以他的话说,“这是速度与精度的完美结合”。

2021年,小咕终于把操作系统从 XP 升级到了 Win 7! 正如身边的人抱怨 Win 11 的华而不实,小咕也感觉升级后的扫雷游戏失去了某种朴素的味道。 但他却无处泄愤。

于是,小咕决定自学编程,实现自己心中完美的扫雷游戏。 鉴于玩家水平各异,小咕还实现了 Easy 模式,以纪念首次上阵就踩雷的同志们。

你可以 下载本题的程序

点击 “打开/下载题目” 将打开网页终端,你也可以通过命令 nc prob09.geekgame.pku.edu.cn 10009 手动连接到题目 (FAQ: 关于终端交互)

提示:困难模式对应 Flag 1,简单模式对应 Flag 2。

第二阶段提示

了解一下 Python 随机数的实现。

龙珠模拟器

小 Z 十分喜欢《龙珠》。他总是在想,如果自己生活在那个世界,故事会如何进行。

不过这只是他单纯的幻想,他甚至对这个世界都没有太多的了解。不过,他仍然希望自己能够在某个世界中集齐散落在世界各地的七颗龙珠。

他写了一个世界生成器。在这个世界中会生成七种珠子,散落在全图各地。当他收集所有七种珠子时,就可以召唤出 Flag。为了锻炼他在不同环境的适应能力,生成世界的方法有两种,分别对应两个 Flag。

点击 “打开/下载题目” 进入题目网页

第二阶段提示

  1. 了解一下 Java 中 Random 类的实现,观察不同种类珠子的关系。

  2. 考虑对 Random 的种子进行可控的差分。

  3. 对于第二部分,这题还存在另外一个简单得多的方法。