这周过于摆烂加上真的菜,只做了几题
签到
跟上一届的套路完全一致,打开PDF,Ctrl + A
全选拷贝出来就能阅读了,建议用上等宽字体便于阅读
直接用我最常用的PDF浏览器 Microsoft Eege
会提示包括拷贝内容在内的部分操作权限受到了限制,但 Chrome
并没有这种限制,直接全选拷贝即可
别急 别急
WELCOME ABOARD,
ALL PLAYERS! GO TO
GEEKGAME.PKU.EDU.CN
AND SUBMIT THE FLAG:
fa{ecm_oPUGeGmV!
lgWloet_K_ekae2}
flag{Welcome_to_PKU_GeekGameV2!}
小北问答
我懒,拿了 flag1 就收工了
- avbv转换的脚本随处可见,比如知乎链接,由于我恰好装了这类插件,所以直接打开就看到转换好的av号了
- 支持webp的版本号很好找,直接Google搜索webp firefox version,就可以得到版本号是 65
- DOI编号真不知道,简单搜索没看到,所以没管
- 包名
cn.edu.pku.pkurunner
- 看了一圈上一届的题解,没有直接说要多少钱的,跳过
- MAC地址定位我真不知道,还好第二阶段给了地址直接搜索得到80304
Host
头估计想考的是 Punycode,不过浏览器的地址栏会提供转换,所以直接将http://ctf.世界一流大学.com
粘贴到地址栏再拷贝出来就得到了http://ctf.xn--4gqwbu44czhc7w9a66k.com/
- 大素数的判定可以参考 知乎链接,然后赌运气就可以了,我懒得猜就没管
企鹅文档
注意到这题很简单的时候已经是二阶段了,白白亏了两百分
直接打开F12刷新页面,在Network标签下搜索关键词 机密flag 可以得到两三个结果,其中有一个是jsonp,还有一个是json,前者组成了表格内容的前半部分,后者组成了后半部分
提取前者 JSON.clientVars.collab_client_vars.initialAttributedText.text[0][3][0].c[1]
路径下的内容与后者 JSON.data.initialAttributedText.text[0][0][0].c[1]
下的内容合并,代码差不多就是
const a = JSON.parse('前半段')
const b = JSON.parse('后半段')
console.log(Object.values(a).map(item=> item[2][1]).join('')+Object.values(b).map(item=> item[2][1]).join(''))
最终得到一个地址 '通过以下链接访问题目机密flag:https://geekgame.pku.edu.cn/service/template/prob_kAiQcWHobsBzRJEs_next机密flag链接已经受到保护,只允许出题人访问'
打开以后得到一个har文件和一张参考图
企鹅文档
直接在har文件中搜索图上的关键字 Below is your flag
,只会有一个结果,将结果所在的json内容的 JSON.data.initialAttributedText.text[0][3][0].c[1]
路径下的内容全部拷贝出来供后续使用
根据截图可以看出纯粹是由色块展示flag的,而腾讯文档的特性是没有内容的块不会出现,所以只需要知道表格的长宽就可以手工渲染了,而路径 JSON.data.initialAttributedText.text[0][3][0].c[0]
里面的内容的 10
和 225
就分别是宽和长了,需要注意的是这个坐标是从0
开始的
后面就是简单的跑起来看图了
const tmpContent = Object.keys('那一大堆东西')
let content = ''
for (let index = 0; index < 11 * 226; index++) {
if (index % 11 === 0) {
content += "\n"
}
if (tmpContent.includes(String(index))) {
content += '*'//我随便填的,反正找个宽度合适的字体对后面看图很重要
} else {
content += ' '
}
}
console.log(content)
得到一个特别长的 ASCII art,慢慢读就得到了
flag{ShouldBeSponsoredByTencent}
企业级理解
其实这个flag1我是混的,看到提示就给 /admin
后面加个斜杠绕过了登录,在管理页面中随便发内容发现跳回未登录,于是给post
的路径 /admin/query
末尾也加上斜杠,构造了一个请求
# 请自行在 xxxxxxxx 换成自己的容器
## 其实 value 的值在flag1不重要,可以直接忽略
curl 'https://prob08-xxxxxxxx.geekgame.pku.edu.cn/admin/query/' --data-raw 'type=PKU_GeekGame' --compressed
得到flag1 {"type":"PKU_GeekGame","value":"flag1{8a97cd0b-adec-4e63-bd46-3e6c60ea9d78} 恭喜你发现flag1,还有其他flag等待你发现哦"}
结束
这周把太多的时间和精力花在YouTube和金毛庄园的 辛西米托龙舌兰酒 上面,还顺便把用node重写的 twitter monitor v3 的核心和大部分服务开源,外加很多题目真的不会,除了签到以外都是在最后两天深夜做的
总分 179,总排名 235
Tutorial 73 + Web 106