2020首届钓鱼城杯国际网络安全创新大赛

再次水过的赛,rank-110/382。


Misc

签到题

flag{Welcome_to_dycb}

简单粗暴。

whitespace

附件:test

内容一片空白,第一反应想到snow隐写,用snow工具解密得无意义内容。

拖到010editor查看16进制,发现三种字符0x200x090x0A,其中0x0A数量少且按一定长度出现,猜测为分隔符,回到text中将0x20替换为00x09替换为1,再2进制转字符,得到flag。

Crypto

confused_flag

nc 119.3.45.222 9999

每次nc都是不同结果,但出现的字符及数量不变,只是乱序,正确顺序能还原flag。

栅栏解密无果,尝试循环取1000次字符串以统计字母在不同位置出现的频次,按大小顺序依次取对应数量字符填入flag:

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
#coding=utf-8
from pwn import *

#统计各字符数
any_s='flag{beadfe08-7fee-3;dd9;961-b7efb21;9;65}-d9;;8'
dic={}
for i in any_s:
if i not in dic:
dic[i]=0
dic[i]+=1
print(dic)

s=[]
flag='?'*42

#循环取1000个字符串用于统计
for i in range(1000):
print(i)
try:
r=remote('119.3.45.222',9999,timeout=2)
s.append(r.recvline())
r.close()
except:
pass

dic2={}

for ss in s:
for i in range(len(ss)):
if ss[i] not in dic2:
dic2[ss[i]]={}
if i not in dic2[ss[i]]:
dic2[ss[i]][i]=0
dic2[ss[i]][i]+=1

for k,v in dic2.items():
if k.strip()!='':
print((k,dic[k]))
res=sorted(v.items(), key=lambda d:d[1], reverse = True)
print(res[:dic[k]])
for j in dic[k]:
flag[res[j][1]]=k

print(flag)