小熊の小站

Try my best.

USTC Hackergame 2021 Writeup

Littlebear0729's Avatar 2021-10-30 学习记

  1. 1. 题目分析
    1. 1.1. 签到
    2. 1.2. 进制十六——参上
    3. 1.3. 去吧!追寻自由的电波
    4. 1.4. 猫咪问答 Pro Max
    5. 1.5. 卖瓜
    6. 1.6. 透明的文件
    7. 1.7. 旅行照片
    8. 1.8. FLAG助力大红包
    9. 1.9. 图之上的信息
    10. 1.10. 赛博厨房
    11. 1.11. minecRaft
  2. 2. 感想

偶然的一个机会在tg频道里面获知了中科大的LUG社团举办了信息安全大赛,也就是Hackergame 2021。我也比较感兴趣,就抽空参加了一下。在过程中最高的排名好像是60多名,最后的总排名定格在了144名,勉强算是前5%吧。这个信息安全大赛总的来说还是挺有意思的,写一篇Writeup的同时分享一下自己玩这个比赛的一些感想。

玩这个比赛的时候就是一直想让自己保持在100名以前。(因为100名以前会上排行榜,大家都可以看到,我还有tag可以打在自己的名字后面)有的时候跌出100名的时候就再努努力做出来一道,最后实在是怎么努力也做不出来了hhh,只能眼睁睁看着自己的排名下跌。

题目分析

签到

签到题还是比较简单的,看到1970-01-01就意识到了是UNIX时间戳。点击Next按钮之后可以看到网页URL有个?page=1,直接把现在的时间转换为Timestamp填入?page=后面即可看到flag。

这道题可能也可以通过Javascript的方法做,我对JavaScript不是非常熟悉,还是用这种比较原始的GET方法做的。

进制十六——参上

看到图片就知道是十六进制编辑器,上网找一个在线的十六进制编辑器,把有flag的三行输入进去就可以得到结果。

去吧!追寻自由的电波

下载下来的音频文件可以隐约听出来是加速的,用达芬奇减速降调到20%之后即可听到一些英文单词。

这些英文单词自然难不住我,毕竟曾经是无线电爱好者。应该是叫做NATO_phonetic_alphabet。这种读法主要是为了解决无线电声音传输中的识别度问题(就像我国把一读成幺,把七读成拐,避免听不清,造成混淆)。

猫咪问答 Pro Max

这道题我感觉其实挺难的,是第一道卡我的题。

  1. 在Google搜索半天无果,最后意识到信息安全俱乐部的域名(sec.ustc.edu.cn)已经无法访问这句话。于是登入Wayback Machine寻找,终于找到了结果。

  2. 在USTC的LUG官网就有

  3. 在USTC的LUG官网的一篇新闻里面就有。(我还看到有人在百度贴吧求助说有人能帮忙跑去看一眼吗,真的是笑死我了hhh)

  4. 直接用SIGBOVIK 2021 Newcomb-Benford作为关键词在Google搜索,即可定位到一篇PDF,可以发现答案是13。(据说因为查询的人比较多,Google已经在输入SIGBOVIK 2021后自动联想Newcomb-Benford了)

  5. 查询IETF官网关于Protocal Police的文档,发现其实是一个愚人节的玩笑。在文档第六章写出了举报地址/dev/null

卖瓜

一开始想半天6x + 9y = 20,肯定是没有整数的可行解的。负数,小数又不可以。偶然发现输入特别大的数字(乘积在$$2^63 - 1$$)就可以使称溢出,稍微凑一下就可以做出来了。

透明的文件

经验看出这个是ANSI Escape Code,但是没有ESC标识符。在每个[前面加上\e或者是\033就可以了。

最后的结果在终端里面echo -e ""即可。

在转换的时候不知道为什么最多只能一次转换4096个字符,还是手动转了好几遍才可以的。

顺便稍微详细了解了一下ANSI Escape Code的作用原理,还是挺有启示意义的。

旅行照片

看到这张照片首先猜测是在中国沿海,判断拍摄方向和时间,然后分析就陷入了停滞。突然意识到,大多数的KFC应该都是红色的,蓝色的KFC实属少见。于是带着蓝色KFC做关键词在百度搜索,发现这家KFC中国仅此一家,就在秦皇岛的新澳海底世界附近,然后做题就简单多了。轻易查询到KFC的电话号码,再通过街景发现左侧建筑的「海豚馆」三个字。最后的拍摄楼层枚举即可得出结果。

不知道这张图片有没有EXIF信息,用这个思路不知道行不行。

善用Python的requests库,在暴力枚举题目答案的时候帮我大忙。

FLAG助力大红包

通过看Chrome的Network请求,发现有一个POST表单里面有ip,于是枚举了0.0.0.0/8网段。发现除了前端通过这里的ip判定,后端也会判定ip地址,在请求的时候还需要加上X-Forward-For请求头。爆破的速度也不宜太快,我每一个请求都sleep了2秒,将将枚举完成。特别地,0.0.0.0和255.0.0.0也需要枚举,差点超时间。

估计这道题是吐槽拼多多的砍一刀活动的(

图之上的信息

这是个graphql相关的题,原来从来没有接触过这个API。甚至REST相关的概念也没有接触过,这道题做完了也让我了解了一下REST相关的思想,这道题还是挺有启发意义的。

一开始直接查询id为1账户相关的信息,返回的都是permission denied。

在GraphQL的官网上面搜索,发现有一个introspection可以查询所有字段,最后发现邮件名字叫privateEmail,做一遍query即可得到flag。

赛博厨房

一开始把这道题想复杂了,以为有什么奇奇怪怪的骚操作,其实就是和推箱子一样的。

  1. 按照题目要求把程序写好保存之后,每一天的菜谱还是会变的。于是写了好几个程序,遇到哪个菜谱用哪个就行了。

  2. 题目要求一次只能放下一个食材,一开始复制了一堆放下 1 个物品但是程序最多只能有72行。傻眼了半天,最后发现如果手上的物品大于等于 n 向上跳转 m 行这条命令可以用,然后就过关了。

后面的题一看就特别难(

题目里面的如果手上的物品大于等于 n 向上跳转 m 行没有说明清楚是程序跳转还是机器人移动,给我一开始做第二题造成了一定的阻碍。

minecRaft

这道题是我做出来的最难的一道题了我个人觉得。

分析一下网页,发现有一个misc/flag.js可以细究(毕竟这个文件混淆得十分难看)。在gyflagh函数里面发现有一个(翻译过后的)命令''['encrypt']('1356853149054377')意识到这个可能是个加密算法,而且密文是6fbde674819a59bfa12092565b4ca2a7a11dc670c678681daf4afb6704b82f0c

细看这个文件发现加密算法在code函数里面,分析查询一下发现是TEA加密算法(有一个关键值0x9E3779B9)。那么现在就已知密文,密钥和加密算法求明文了。

这个64位的密文应该16位一组,总共四组要分别解。code函数传入两个参数:一个是v[2]的明文,一个是key[4]的密钥。加密和解密的密钥是一个,把key[4]固定了下来。v[0]是密文的前四位的Base16toLong的结果,v[1]就是后四位。然后一步一步的解密即可得到答案。

按理说利用他给出的函数直接用可以更方便得解出来,但是我还是因为对JS不太熟悉,而且那个混淆确实太难看了,就用笨方法一个一个手动算的。

正好还利用了这道题的机会学习了一下TEA这个对称加密算法,摸清了TEA加密的具体原理。同样的,这道题也是挺有教育意义的。

感想

总得来说,这个信息安全大赛还是挺有意思的。特别是在做出来一道题之后,那种成就感是无法用言语表达的。同时,参加这个比赛还可以学到不少东西。如果明年条件允许,我还是会继续参加这个比赛,并且还会把这个比赛安利给别的同学。毕竟有几道题有没有计算机方面的知识都可以做,还可以借此机会普及一下计算机方面的相关知识(或者是常识)。

本文作者 : Littlebear0729
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://blog.bearxiong.xyz/2021/10/USTC-Hackergame-2021-Writeup/

本文最后更新于 天前,文中所描述的信息可能已发生改变