总的来说这场比赛游戏体验良好,学习到了许多新的知识
签到
第一题签到题
直接F12
开发者工具定位到滑动条,将step
调整为0.5
然后拖动到1
得到flag
猫咪问答++
- 以下编程语言、软件或组织对应标志是哺乳动物的有几个?
Docker,Golang,Python,Plan 9,PHP,GNU,LLVM,Swift,Perl,GitHub,TortoiseSVN,FireFox,MySQL,PostgreSQL,MariaDB,Linux,OpenBSD,FreeDOS,Apache Tomcat,Squid,openSUSE,Kali,Xfce.
这道题怎么说,答案是12
但是我怎么都数不到,最后用Burpsuite
爆破解决
- 第一个以信鸽为载体的 IP 网络标准的 RFC 文档中推荐使用的 MTU (Maximum Transmission Unit) 是多少毫克?
这个比较有意思,搜索可以找到文档,得到答案256
- USTC Linux 用户协会在 2019 年 9 月 21 日自由软件日活动中介绍的开源游戏的名称共有几个字母?
找到活动链接,发现介绍的开源游戏为Teeworlds
共9
个字母
- 中国科学技术大学西校区图书馆正前方(西南方向) 50 米 L 型灌木处共有几个连通的划线停车位?
百度地图街景模式,共9
个
- 中国科学技术大学第六届信息安全大赛所有人合计提交了多少次 flag?
找到新闻,共计17098
次
2048
游戏挺好玩的
直接F12
审计代码
发现html_actuator.js
中有关键内容"/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase();
,丢到下方的console
中计算得到网址,发送请求后得到flag
一闪而过的 Flag
很基础,在命令提示符里打开
从零开始的记账工具人
我的做法和官方题解解法2
一样,进行字符替换
1 | '零' -> '' |
然后求值求和
超简单的世界模拟器
这个我只做出了第一问,去维基百科上搜索,康威生命游戏,然后构造一个滑翔机模型,可以打掉一个点
1 | 000000000000000 |
自复读的复读机
这一类复读程序有一个名词Quine
经过简单搜索可以得出payload
1 | # 逆序复读 |
这里需要注意的是判题程序会判断换行符,要注意使用end=""
去除换行符
233 同学的字符串工具
第一问字符串大写工具
题目的突破口在于.upper()
函数,我们要构造一个字符串,其通过.upper()
后能改变原来的字符类型以此绕过regex
先查询文档
返回原字符串的副本,其中所有区分大小写的字符 4 均转换为大写。 请注意如果
s
包含不区分大小写的字符或者如果结果字符的 Unicode 类别不是 “Lu” (Letter, uppercase) 而是 “Lt” (Letter, titlecase) 则s.upper().isupper()
有可能为False
。
发现关键内容Unicode 类别
,Lu
,Lt
,这里说明要从Unicode
开始突破
经过搜索Unicode
官方文档找到了一个文档,其给出了特殊的大小写转换规则
刚刚好我们发现了一个拉丁文连字FL
:
FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
于是我们用FB02
去替代flag
里面的fl
,这样就能绕过正则限制并且upper
后得到flag
第二问UTF-7
转换工具
这个我个人感觉比前一问容易,搜索UTF-7
编码规则发现其可以用base64
编码,稍微构造一下可得+AGYAbABhAGc-
经过UTF-7
解码后正是flag
233 同学的 Docker
也是基础题,考察了Docker
的分层打包机制
这里介绍一个工具dive
首先使用Dive
查看镜像:
执行命令: docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest 8b8d3c8324c7/stringtool
发现image
构建过程中在有一步是删除了flag.txt
由于我的Docker
部署在WSL2
里面,不方便直接查看镜像文件,所以使用docker image save
命令把镜像导出
我们回到上一步COPY
发现镜像
Id: c319bce601a5672aa9ff8297cfde8f65479a58857c1da43f6cd764df62116d9d
我们在前面导出的数据中找到
c319bce601a5672aa9ff8297cfde8f65479a58857c1da43f6cd764df62116d9d
目录,
目录下layer.tar
里面就有我们要的flag.txt
来自一教的图片
题目里加粗提示了傅里叶
直接搜索图像 傅里叶变换
找到一个CSDN
教程
使用代码:
1 | import numpy as np |
运行后得到结果
稍微平移拼接一下得到了flag
超简陋的 OpenGL 小程序
说实话我并不了解OpenGL
等图形学内容,但是题目给了basic_lighting.vs
文件,看起来内容像是C
于是随便改了一下:
1 |
|
然后借助画图工具翻转一下看到flag
为flag{glGraphicsHappy(233);}
生活在博弈树上
这个题目就是pwn
题,审计源码可以发现不安全函数gets
。
始终热爱大地
直接IDA
一把梭打开程序
我们发现gets
读取数据并存放于v12
,最后判断输赢的变量存放于v15
而它们具体在哪里?
向上翻可以看到v12
存放于rbp-90h
处,v15
存放于rbp-1h
处,所以我们可以直接构造一个超长字符串使得rbp-1h
被覆盖为0x1
升上天空
题目的意思很明显了,main
函数没有开启canary
,我们要覆盖掉rbp
来getshell
注意到程序是静态链接的,直接使用ROPgadget
工具获取ROP
链来构造syscall
执行命令:
ROPgadget –binary tictactoe –ropchain
我们把step - 5
中构造的ROPchain
拿来修改一下,加上前面0x90h
的填充
1 | #!/usr/bin/env python3 |
最后执行效果:
超安全的代理服务器
我的做法和官方题解不太一样,我要充分榨干浏览器的功能:smile:
找到secret
使用谷歌浏览器自带的net-export
功能
开启记录后我们用这个工具查看一下我们的访问记录
发现了一个神秘地址,拼接后访问可以看到
Notice: secret: 7374a29dc1 ! Please use this secret to access our proxy.(flag1: flag{d0_n0t_push_me} )
入侵管理中心
这个题目写的比较变态,secret
60秒过期,要么拼手速要么写脚本
查看帮助发现管理中心地址为127.0.0.1:8080
而过滤了ip
和域名访问,于是尝试使用IPv6
地址来绕过:[::1]:8080
最后写一个python
脚本配合net-export
和curl
参考代码:
1 | import requests |
不经意传输
这个只会第一问送分题
解密消息
题目告知了我们m0_1
,而m0_1
是通过m0
和一个我们可以控制的pow
计算而得
我们不妨令v-x0 = 1
那么输出的m0_
就是m0+1
了由此可以轻易计算出m0
拿到第一个flag