0%

2023-CNSS-Summer-wp-misc

做题记录

Rank:3

image-20230916080821685

❤️ Signin

题目描述:

1
2
听说有人在CNSS招新群的某个地方藏了一个隐秘的flag,到底在哪呢?
快来加入招新群431060996

题目:按照要求搜索群聊,群聊介绍中有一段base64,解密得flag:

image-20230911100902419

flag:

cnss{W3Lc0m3_7o_Cn55_5umm3r!}



🔎 侦探 CNSS 娘的秘密

题目描述:

1
懒得写文案了,试着找出 CNSS 娘的秘密吧

题目附件为一张图片:

CNSSDoll

十六进制打开,在文件末尾看到flag:

image-20230911101309673

flag:

cnss{W0w!!!Y0u_s4ww_m3!}



🏆 重生之我在 CNSS 当 OIer

题目描述:

1
2
3
题目描述和输入输出格式都找不到了...但是身为超级 OIER 的你一定可以 AC 本题吧

nc 47.108.140.140 1107

题目:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

import os
import sys
import subprocess
from secret import flag

SRC = '/home/ctf/temp/code.c'
BIN = '/home/ctf/temp/temp_bin'
DATA = '/home/ctf/data'


res_map = {
'CE': 'Compile Error',
'TLE': 'Time Limit Exceeded',
'RE': 'Runtime Error',
'WA': 'Wrong Answer',
'AC': 'Accepted'
}


def check_excutable(path, input, ans, timeout):
if not os.path.isfile(path):
return 'CE'

try:
p = subprocess.run(
[f"./{path}"],
input=input,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
timeout=timeout
)
except subprocess.TimeoutExpired:
return 'TLE'

if p.returncode != 0:
return 'RE'

try:
output = p.stdout.decode()
except UnicodeDecodeError:
return 'WA'

lines = output.strip().split('\n')
return 'AC' if lines == ans else 'WA'


if __name__ == "__main__":

print("Enter your code (ending with two blank lines):")

code1 = []
while True:
try:
line = input()
except EOFError:
break
code1.append(line)

if len(code1) >= 2 and code1[-1] == '' and code1[-2] == '':
break
with open(SRC, "w") as fd1:
fd1.write('\n'.join(code1))

p = subprocess.run(
["gcc", "-w", "-O2", SRC, "-o", BIN],
stdout=sys.stdout,
stdin=subprocess.DEVNULL,
stderr=subprocess.STDOUT
)

with open(os.path.join(DATA, f'input.in'), 'rb') as f:
instr = f.read()
with open(os.path.join(DATA, f'output.out'), 'r') as f:
ans = f.read().strip().split('\n')

res = check_excutable(BIN, instr, ans, 0.5)
print('Result: ', res_map[res])
if res == 'AC':
print(flag)
print('\n')

简单翻译一下程序功能:输入一段c语言代码,送至code.c中,进行编译后,将input.in中的内容作为输入执行这段程序,并将程序输出结果与output.out中的内容做对比,如果结果一致,则会输出flag。

问题在于,我们并不知道input.in与output.out的内容是什么,也就无法根据需要写出对应程序。可是其实再仔细想想,题目要求其实仅仅是要求程序内容输出与output.out内容一致而已,而根据题目附件,output.out文件就在DATA目录下,所以其实只需要写一个能打印出output.out内容的c语言程序即可。

exp.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
FILE *file;
char filename[] = "/home/ctf/data/output.out";
char ch;

file = fopen(filename, "r");
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}

fclose(file);

return 0;
}

得到flag:

image-20230911102740014

flag:

cnss{y0u_4re_U1tim34ate_01er!}



❓ 泻药,人在CNSS,刚打完招新

题目描述:

1
参加CNSS招新赛是一种怎样的体验呢?

题目的全部信息只有题目标题和题目描述,没有附件、没有靶机,因此基本可以确定为社工题。

直接搜索题目描述,就能在知乎上搜到一个回答,最后就有flag:

image-20230911103024312

flag:

cnss{L3T_U$_$T4RT!}



🔮 東方希缇符

题目描述:

1
2
试着找出最新最热(确信)东方新作中的 flag 吧!
Hint:flag 在游戏资源包内

题目给了th08的游戏包,结合hint知道应该是要对资源包解包得flag。

thxx解包参考:

关于东方project系列正作的魔改教程以及注意事项 - 哔哩哔哩 (bilibili.com)

跟着一步一步做:

1、下载工具

2、选择好文件与对应游戏(th08),进行解包

image-20230911103506296

3、在解包得到的资源中发现flag.txt

image-20230911103618535

flag:

cnss{Y0u_4re_T0uhou_M4st3er_n0w!}



🔑 Shino 的 Crypto 梦想

参考我另一篇文章:

misc趣题(一) | 糖醋小鸡块的blog (tangcuxiaojikuai.xyz)



☁️ Hurrison 的网站

题目描述:

1
2
3
4
Hurrison 刚刚学会搭建网站,听说套了 Cloudflare 之后大黑客 Casio 就找不到服务器 IP 了
Hint:flag格式如下:
cnss{IPv4}
IPv4 格式为 xxx.xxx.xxx.xxx

题目:

1
https://cnss2023catchme.hurrison.com/

根据题目描述,这题是要寻找隐藏在Cloudflare下的服务器ip地址,直接对这个要求进行搜索:

image-20230911104238020

逐个尝试文章中的方法,最后发现这个方法很有效果:

image-20230911104618404

SecurityTrails: Data Security, Threat Hunting, and Attack Surface Management Solutions for Security Teams搜索对应URL,并不能直接在历史数据里看到结果。开一开脑洞,搜索hurrison.com,就有很多子域名:

image-20230911111836344

逐个查看,并结合Censys逐个搜索域名,如下:

image-20230911112020297

找到一个在给定范围内的ip地址就可以了。

flag:

cnss{103.239.247.22}



💻 cn55Terminal

题目描述:

1
2
3
4
题目描述又忘了,凑合用吧👇
curl -sL https://transfer.sh/VKyC2P8CPw/id.txt | nc 124.221.34.13 50024
Update: 为避免这行命令可能造成不必要的误解,还是试试手动体验 cn55Terminal 吧~
如果你访问不了,或者想手动,这里也贴出 id.txt

id.txt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
......................................
......................................
......................................
.@@...........@@......................
.@@...........@@......................
..............@@......................
..............@@......................
..............@@......................
.@@.....@@@@@@@@......................
.@@....@@@@@@@@@......................
.@@...@@@@@@@@@@......................
.@@...@@@....@@@......................
.@@...@@@....@@@......................
.@@...@@@.....@@......................
.@@...@@@....@@@......................
.@@...@@@....@@@......................
.@@...@@@@@@@@@@......................
.@@...@@@@@@@@@@......................
.@@....@@@@@@@@@......................
......................................
......................................
......................................

xshell打开,缩小界面看到的命令如下:

image-20230911144054892

可以看到,命令行前的内容以字符画的形式展示出来了,合理猜测,这道题的意思是识别字符画形式的指令并执行。这样的话,我们就需要输入字符画形式的linux指令。先试一试将题目给出的id上传,看看返回内容:

image-20230911144414307

可以看出确实和想象的一模一样,终端执行了id指令。那么接下来就是找脚本,将”cat flag”生成为字符画。最后找到了一个脚本,但是他只能将图片转化为字符画,没事,先生成一张图片:

image-20230911144603284

然后用如下脚本转化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PIL import Image

img = Image.open('1.png')
out_img = img.convert('L') # 图片转换为灰度模式
w, h = out_img.size # 返回图片大小
n=600/max(w,h) #图像缩小倍数,不然图片转换后会很大
if n<1:
out_img = out_img.resize((int(w * n), int(h * n*0.5))) # 因字符的宽度一般大于2倍的高度
else:
out_img = out_img.resize((int(w), int(h )))
w, h = out_img.size
#asciis='$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,"^\ '
asciis = "@." # 灰度表
texts = ''
for row in range(h):
for col in range(w):
gray = out_img.getpixel((col, row))
texts += asciis[int(gray / 255 * (len(asciis) - 1))] # 根据灰度值选择不同复杂度的 ASCII 字符
texts += '\n'
with open("1.txt", "w") as file:
file.write(texts)
file.close()

得到1.txt文件,打开即是字符画:

image-20230911144716398

上传给Terminal,即得到flag:

image-20230911144745871

flag:

cnss{funny_ascii_ocr_duibudui}



总结

misc的知识面涉及很广,很多知识都是边做题边学,很多工具也是边做题边下的,一点一点积累吧。