USTC Hackergame 2022 Writeup

posts/ustc-hackergame-2022-writeup

签到

一如既往,观察发送的请求,只要发送一个参数result为 2022 的 GET 请求可获得 flag。

猫咪问答喵 🐾

1. 中国科学技术大学 NEBULA 战队(USTC NEBULA)是于何时成立的喵?

谷歌搜索 中国科学技术大学 NEBULA 战队 得到中国科学技术大学星云(Nebula)战队在第六届强网杯再创佳绩最后一段可得知。

2. 2022 年 9 月,中国科学技术大学学生 Linux 用户协会(LUG @ USTC)在科大校内承办了软件自由日活动。除了专注于自由撸猫的主会场之外,还有一些和技术相关的分会场(如闪电演讲 Lightning Talk)。其中在第一个闪电演讲主题里,主讲人于 slides 中展示了一张在 GNOME Wayland 下使用 Wayland 后端会出现显示问题的 KDE 程序截图,请问这个 KDE 程序的名字是什么?

查看 B 站回放得知该 KDE 程序是一款视频剪辑软件,但我不是 KDE 用户,遂谷歌搜索该软件为 Kdenlive 。

3. 22 年坚持,小 C 仍然使用着一台他从小用到大的 Windows 2000 计算机。那么,在不变更系统配置和程序代码的前提下,Firefox 浏览器能在 Windows 2000 下运行的最后一个大版本号是多少?

谷歌搜索可得到该版本号为 12。

4. 你知道 PwnKit(CVE-2021-4034)喵?据可靠谣传,出题组的某位同学本来想出这样一道类似的题,但是发现 Linux 内核更新之后居然不再允许 argc 为 0 了喵!那么,请找出在 Linux 内核 master 分支(torvalds/linux.git)下,首个变动此行为的 commit 的 hash 吧喵!

Github 去 linux 的 repo 下搜索CVE-2021-4034提交记录可得到 hash。

5. 通过监视猫咪在键盘上看似乱踩的故意行为,不出所料发现其秘密连上了一个 ssh 服务器,终端显示 ED25519 key fingerprint is MD5:e4:ff:65:d7:be:5d:c8:44:1d:89:6b:50:f5:50:a0:ce.,你知道猫咪在连接什么域名吗?

谷歌搜索"e4:ff:65:d7:be:5d:c8:44:1d:89:6b:50:f5:50:a0:ce"得到网站ssh.log — Book of Zeek (git/master)可得知"id.resp_h": "205.166.94.16",直接访问该 ip 得到该网站为sdf.org

6. 中国科学技术大学可以出校访问国内国际网络从而允许云撸猫的“网络通”定价为 20 元一个月是从哪一天正式实行的?

网上搜不到结果,通过 Web archive 得知网站是 03 年有记录的,遂规定时间段爆破。

家目录里的秘密

VS Code 里的 flag

解压后通过grep -r ./ -e 'flag{'可得到 flag。

Rclone 里的 flag

看到公开题解后发和自己也想到了obscure,但首次错误尝试无果后没再尝试,痛失 flag。

HeiLang

感觉这道题和去年的透明的文件差不多,把 |换成][就好了。

Xcaptcha

最近也有在写 Chrome 插件,为此特意为了这个网站写了一个插件来辅助我获取 flag。

核心代码如下:

import $ = require("jquery");

$(window).on("load", function () {
  let c1 = $("body > div > form > div:nth-child(1) > label").text();
  let c2 = $("body > div > form > div:nth-child(2) > label").text();
  let c3 = $("body > div > form > div:nth-child(3) > label").text();
  c1 = c1.split(" ")[0];
  c2 = c2.split(" ")[0];
  c3 = c3.split(" ")[0];
  $("#captcha1").val(sum(c1.split("+")[0], c1.split("+")[1]));
  $("#captcha2").val(sum(c2.split("+")[0], c2.split("+")[1]));
  $("#captcha3").val(sum(c3.split("+")[0], c3.split("+")[1]));
});

旅行照片 2.0

照片分析

Arch Linux 下通过安装exif工具可得到关键信息:

Model               |sm6115 (juice)
ISO Speed Ratings   |84
Exif Version        |Exif Version 2.31
Date and Time (Origi|2022:05:14 18:23:35
Flash               |Flash did not fire, compulsory flash mode

遂得 flag。

社工实践

观察照片得到关键性地标ZOZO *** STADIUM得到该体育馆为千叶海洋球场。通过 Google Earth 3D 模拟可得到拍摄地点为APA HOTEL,再通过 Google Map 可得邮政编码。

手机屏幕分辨率可根据 EXIF 提供的 Model 信息推断出。

观察飞机高度可判断为出港,且根据 Google Earth 3D 模拟可得飞机起飞机场为 Haneda Airport,机场 IATA 为 HND。

根据 EXIF 提供时间可推断出拍摄当天飞机应于 JST 18:23:35 之前起飞。考虑航班延误等问题设定误差 1.5 小时,通过 flightradar24 获取该时间段内机场出港数据进行爆破可得 flag。

猜数字

通过源码发现首次提交请求的时候要猜测的数值是不存在的,但是不知道应该提交什么。但是通过看答案后竟然提交 NaN 就可以了,遂失 flag。

LaTeX 机器人

纯文本

通过 LaTex 的 input 指令可获取 flag。

特殊字符混入

本来我还以为通过读取后进行 base64 编码再输出再解码可以获取 flag 的,所多尝试无果后放弃,结果看到题解后是使用一个我从来没听说过的detokenize指令。

线路板

通过使用 GNU 开源的 gerbv 工具删除线路板中被遮住的 flag 的图层即可。

光与影

这道题本来没打算做的,因为我的 ArchLinux 用的是 Intel 核显而且还是 Chrome 浏览器,打不开网页。但是后来发现做出的人还挺多的,打算去 Windows 上试试。

保存网页本地修改,感觉和线路板那题差不多。后来发现被遮住的区域是因为 t5 数值过小导致的,随便赋值 t5 一个超大的值就可以渲染出 flag。

蒙特卡罗轮盘赌

这道题本来也有思路,因为之前写算法的时候写过蒙特卡洛算法,所以算法是没什么漏洞的,问题在于随机种子,解题过程大致是使用在一个将来时间段的数值作为种子来预测数值。然后写出了一个生出预测的数据。但是当时感觉数值太多很麻烦,不知道该怎么处理。

看了题解后,才发现当时没想到可以用过前两次作为失败得出来预测的数值作为查找后三次的匹配数值,痛失 flag。

总结

以上就是我认为我能做出来的问题了,其实也有那个神经网络也应该试试,但是太久没接触 pytorch 了。flag 自动机的因为我不会汇编所以也没有结果。上述没解出来的题有些距离成功只有一步,想想毕竟我不是专业玩 CTF 的,没有继续尝试(可能也是当时大脑短路了)。参加比赛也是为了多学习学习新的东西,这次没有在上面花费太多时间,最终排名也在 10%左右,题是比以前难了,排名也不算太差。希望以后随着接触的更多东西再下一次比赛中能够获得更多的 flag。