USTC Hackergame 2021 Writeup
posts/ustc-hackergame-2021-writeup签到
打开题目就能看到Page 0
和1970-01-01 08:00:00 +08:00
果断联想到了 Unix 时间戳。
通过 Linux 下的date +%s
命令可以得到当前的时间戳,然后通过在网页根路径附加?page=
时间戳就可以进入当前时间页面找到 flag。
进制十六——参上
题目附带着一张十六进制编辑编辑文本图片,被编辑的文本 flag 部分被红色涂抹掉了。
想要获得 flag 大概需要将左侧的十六进制转换成文字吧。
保存图片到电脑,通过 KDE connect 将图片发送至手机,通过 Google Lens 识别图片上的文字,将结果粘贴到一个十六进制文本转换的网站可得到 flag。
去吧!追寻自由的电波
虽然第一参加这种比赛首先让我联想到了音频文件写隐,我还特意重启到 Windows 用 Au 看了下频谱图,最后啥也没看出来。后来结合题目中的关键字,分别是:无线电、读音和字母。
然后通过 Google 定位到北约音标字母。
打开 VLC 按下[
放慢速度听音频可以依次听到Foxtrot
、Lima
、Alfa
、Golf
、***
、Papa
、Hotel
、Oscar
、November
、Echo
、Tango
、India
、Charlie
Alfa
、Bravo
、***
。
这里的***
在音标表中没有,但又出现了两次可以推测为{
和}
对照音标表映射可得到 flag。
我看到别人都用达芬奇或者转换 wav,难道就我一个人拿 VLC 硬听出来的? 得到的 flag{}中的意思大概是拼音?
猫咪问答 Pro Max
一共共有五个问题,答对可获得 flag,每道题都有相应的答案提示,比如答案字符串长度和数字范围等等。(还挺贴心的
1.2017 年,中科大信息安全俱乐部(SEC@USTC)并入中科大 Linux 用户协会(USTCLUG)。目前,信息安全俱乐部的域名(sec.ustc.edu.cn)已经无法访问,但你能找到信息安全俱乐部的社团章程在哪一天的会员代表大会上通过的吗?
注意到域名无法访问,果断 Web archive 找到页面归档备份获得日期。
2.中国科学技术大学 Linux 用户协会在近五年多少次被评为校五星级社团?
官网上说了四年但是最后答案不对,最后试出来是五年。
3.中国科学技术大学 Linux 用户协会位于西区图书馆的活动室门口的牌子上“LUG @ USTC”下方的小字是?
这个是找到的官方的推文USTC LUG 的大本营从东区迁到西图 206 啦,欢迎小伙伴们前来串门看到的。
4. 在 SIGBOVIK 2021 的一篇关于二进制 Newcomb-Benford 定律的论文中,作者一共展示了多少个数据集对其理论结果进行验证?
这个论文可以在网上搜到, 在论证部分作者一共用了 13 个数据集。
5.不严格遵循协议规范的操作着实令人生厌,好在 IETF 于 2021 年成立了 Protocol Police 以监督并惩戒所有违背 RFC 文档的行为个体。假如你发现了某位同学可能违反了协议规范,根据 Protocol Police 相关文档中规定的举报方法,你应该将你的举报信发往何处?
IETF 和 Protocol Police 作为关键字用 Google 搜索在文档第六章写出了举报地址/dev/null
(黑洞设备)。
卖瓜
溢出可比这吸铁石好用多了
刘华强买瓜,你是开水果摊的,要用 6 斤瓜和 9 斤瓜称出 20 来???
这个考察大数相乘会溢出为负数,导致每次溢出后恢复为正数,每次多 1。溢出两次就够了。(12+36=20
最开始一想这也不是数学问题。开始乱改
input
标签的name
部分得知了后端是用 php 写的,还特意学了伪协议和一些 php 漏洞什么的,最后发现卵用没有。
透明的文件
题目描述可以输出透明的 flag 我大概可以想出终端输出彩色 flag 的场景了。
下载文件打开文件发现是 Terminal 输出彩色的文件,但是[
前少了escape
对应为\033
但是\033
直接在文本里面是没有作用的,需要转义得到escape
。
这个我是这么实现的,终端上$ echo "\033" >> tmp.txt
后打开tmp.txt
,复制 escape 符号,用 vscode 打开题目文件随便选中[
字符后,按下Ctrl
+Alt
+L
替换为escape
+[
进行替换。
替换成功后在bash shell
下使用cat
输出透明的彩色 flag,然后鼠标选择下终端输出的文本,通过反色就能看到彩色的 flag 了。(不知道 fish 和 zsh 为什么不行
vscode 替换文本那部分感觉用
sed
命令直接替换也可行。
旅行照片
好像是一道人肉搜索题,图片主要信息是蓝色和 KFC 和海边。
那就 Google 关键字蓝色KFC
,可以搜索得一堆澳海底世界的信息。(还是小红书厉害
通过澳海底世界锁定秦皇岛,使用百度地图找到位置。借助图片周围明显区域,比如停车场,大致推算出拍摄方向为东南,且时间为傍晚。
KFC 电话信息也可以用百度地图查到。
楼层可以通过照片的对楼分辨,大概在 10 层左右。
具体 KFC 旁边建筑物信息可利用百度街景。
FLAG 助力大红包
助力的时候通过 Chrome 的开发者工具 Network 查看 POST 出去的表单,这个表单里面包含 IP 项。题目又说采用前后端进行 IP 检测,所以这道题要采用 IP 伪装进行爆破。
通过伪装请求头部的X-Forward-For
的 IP 地址进行休眠时间为一秒 0-255 的 IP 枚举请求才可助力完成(IP 地址能包含 0 和 255 是我没想到的
解题代码
import random
from time import sleep
import requests
url = 'http://202.38.93.111:10888/invite/10c7d73c-ae79-4801-aabb-ced040f522e2'
ip_set = []
headers = {'X-Forwarded-For': ''}
def hack():
for a in range(0, 256):
ip = str(a) + ('.' + str(random.randint(0, 256))) * 3
ip_set.append(ip)
for ip in ip_set:
headers['X-Forwarded-For'] = ip
print(ip)
sleep(1)
requests.Session().post(url=url, data={'ip': ip}, timeout=(3, 7), headers=headers)
if __name__ == '__main__':
hack()
这道题大概是吐槽某些无良电商的吧
图之上的信息
通过 Google 了解到 GraphQL 当初在 Gitlab 上存在邮件泄漏的漏洞。
通过参照一篇GraphQL 漏洞笔记及案例博客。
发现利用其自省方式暴露表中的数据段,并且利用查询语句查询邮件数据段可获得邮箱即 flag。
解题步骤如下:
- 自省获得表
/graphql?query={__schema{types{name}}}
- 自省获得表内数据段
/graphql?query={__type(name:"GUser"){name,fields{name,type{name,kind,ofType{name,kind}}}}}
- 字段查询获得 flag
/graphql?query={user(id:1){privateEmail}}
图之上的信息 图大概是指 GraphQL 的 Graph 吧
Amnesia
这道题只作出了轻度失忆。
通过 Github 上的CTF-All-In-One的一节了解到:
.rodata
段保存只读数据,包括只读变量和字符串常量。
题目要求清除.data
和.rodata
所以说不能使用字符串变量,也就是不能使用printf
。
所以有以下代码:
#include <stdio.h>
int main() {
int H = 72;
int e = 101;
int l = 108;
int o = 111;
int comma = 44;
int space = 32;
int w = 119;
int r = 114;
int d = 100;
int em = 33;
putchar(H);
putchar(e);
putchar(l);
putchar(l);
putchar(o);
putchar(comma);
putchar(space);
putchar(w);
putchar(o);
putchar(r);
putchar(l);
putchar(d);
putchar(em);
return 0;
}
赛博厨房
Level 0
写好每一天的菜谱下一天还会变,继续写,把每天都菜谱写完就会获得 flag。
Level 1
第二个和上一个相比每天的食谱都用两种,用如果手上的物品大于等于 n 向上跳转 m 行
(相当于goto语句
),写出程序就通关了。
剩下的就不会了…
感想
题目很有趣,不仅仅是一些计算机方面的问题,其他的涉及方面也很广。能够做出一道题也能学到不少东西,每拿到一个 Flag 都会成就感满满,表示明年条件允许还会参加:-)。