Hackergame 2018 (中国科学技术大学第五届信息安全大赛) WriteUp

前两题不写了。。

游园会的集章卡片

ps拼接一堆图片,得到flag

1.png

猫咪和键盘

恢复得到的混乱的c++代码,有明显的规律,运行即可

1
2
3
g++ -std=c++17 typed_printf2.cpp -o type
./type
flag{FfQ47if9Zxw9jXE68VtGAJDk6Y6Xc88UrUtpK3iF8p7BMs4y2gzdG8Ao2gv6aiJ125typed_printf95}%

Word

binwalk -e分析下载的docx文件,并解压

得到flag.txt文本

flag{xlsx,pptx,docx_are_just_zip_files}

猫咪银行

通过输入较大时间值来实现溢出

5.png

6.png

兑换flag

flag{Evil_Integer._Evil_Overflow.}

黑曜石浏览器

提示:请使用最新版黑曜石浏览器(HEICORE)打开。

出题人还弄了个像样官网。。。

google 找到官网
view-source:https://heicore.com/index.html得到有一大段js的源码,其中有ua, 特别的是.html.php

1
var HEICORE_UA = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) HEICORE/49.1.2623.213 Safari/537.36";

替换ua得到flag

flag{H3ic0re_49.1.2623.213_sai_kou}

回到过去

利用linux的ed命令

ed是Linux中功能最简单的文本编辑程序,一次仅能编辑一行而非全屏幕方式的操作。

Linux ed命令

了解之后,题目就明白什么意思了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
q
ed
a
flag{
.
a
44a2b8
a3d9b2c
c44039
f93345
}
.
2m3
2m5
2m1
2
s/4/t
q
q

执行相应命令,不过我一直交不对,脚本改变其4段的顺序,暴力交了一波

flag{t4a2b8c44039f93345a3d9b2}

我是谁

console发现提示

8.png

输入得到第一个flag

flag{i_canN0t_BReW_c0ffEE!}

跟着链接到第二关

1
2
3
Brewing tea is not so easy.

Try using other methods to request this page.

改post请求提示

1
2
<p>The method "POST" is deprecated.</p>
<p>See RFC-7168 for more information.</p>

这里涉及到超文本咖啡壶控制协议

超文本咖啡壶控制协议(英语:Hyper Text Coffee Pot Control Protocol,缩写HTCPCP)是由IETF虚构的一种协议。这个协议在文档RFC 2324[1](1998年4月1日发布)中定义,是一个恶搞RFC。

该协议被设计为一个类似HTTP的协议,可以用于控制、监测和诊断咖啡壶,后来也被拓展到茶壶;该协议有时也可以视作一种早期的物联网实验。

RFC 7168这个页面中搜寻信息发现BREW请求方法以及Content-Type头

9.png

根据提示将message/coffeepot的coffeepot改为teapot,从response的Alternates得知新路径

2.png

访问得到flag

3.png

秘籍残篇

第一关:

将得到的文本缩到最小,自动换行,调整窗口大小得到flxg,这里是flxg

4.png

猫咪遥控器

7.png

根据题意猜测表示移动方向,通过脚本画图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#coding: utf-8

from PIL import Image,ImageDraw

seq = open('seq2.txt','rb')

newIm= Image.new('RGB', (2000, 1000), 'white')
newIm.save('newimg.png')

newimg = Image.open('newimg.png')

drawimg = ImageDraw.Draw(newimg)

x = 500
y = 500

for i in seq.read():
if i == 'D':
y = y + 1
drawimg.point((x,y),fill=(0,0,0))
if i == 'U':
y = y - 1
drawimg.point((x,y),fill=(0,0,0))
if i == 'L':
x = x - 1
drawimg.point((x,y),fill=(0,0,0))
if i == 'R':
x = x + 1
drawimg.point((x,y),fill=(0,0,0))


newimg.save('newimg.png')
newimg.close()
seq.close()

得到flag

newimg.png

她的诗

题目自带py解出没有flag,但能看出是uudecode,google解密网站

解密得到

10.png

拼出flag即可

flag{STegAn0grAPhy_w1tH_uUeNc0DE_I5_50_fun}

猫咪克星

nc 202.38.95.46 12009连接,计算各种表达式

有时间限制,需要脚本跑一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#coding: utf-8
import socket

HOST = '202.38.95.46'
PORT = 12009

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

s.recv(1024)
while True:
re = str(s.recv(1024))
print re
re = re.replace("__import__('time').sleep(100)","0").replace("exit()","0").replace("__import__('os').system('find ~')","0").replace("print('\\x1b\\x5b\\x33\\x3b\\x4a\\x1b\\x5b\\x48\\x1b\\x5b\\x32\\x4a')","0")
print re
data = eval(re)
print str(data)
s.send(str(data)+'\n')

#s.close()

flag:

flag{'Life_1s_sh0rt_use_PYTH0N'*1000}

喵咪电路

技术上来说,我们通过 Minecraft (版本:1.12.2) 存档提供了一个 40 个输入的红石电路,他们共同影响着信标的颜色,如果你通过调整输入,成功使得信标变绿,说明你已经破解了这个电路,请以 flag{1010101010100010…0101010} 的格式提交你的答案(1 代表激活,0 代表不激活)。

下载存档进行游戏,掌握基本逻辑电路知识即可

内有教程,玩就行了

6FF17292DE2B71989FB7183BC82716D0.jpg

懒得再进游戏,flag就不写了

挺有意思的比赛

官方wp: https://github.com/ustclug/hackergame2018-writeups

文章作者: J0k3r
文章链接: http://j0k3r.top/2018/10/16/Hackergame_2018/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J0k3r's Blog