CTFshow里的题目

杂项签到

压缩包伪加密,随波逐流里修复一下即可

压缩源文件数据区 (Local File Header)

核心目录区 (Central Directory)

核心目录结束标志 (End of Central Directory Record)

miscx

给了一张welcome.png,大小25MB肯定是不正常的

拖到随波逐流里发现存在压缩包和图片,用binwalk发现不好用,改用foremost提取文件,发现有一张图片和一个压缩包,压缩包包含两个压缩包misc1和misc2

虽然有密码,但是我们直接用nana打开,里面只有misc1是未加密的,打开misc1压缩包,里面png文件未加密,打开是2020,这就是music的密码

得到这么一串音符编码

1
♭‖♭‖‖♯♭♭♬‖♩♫‖♬∮♭♭¶♭‖♯‖¶♭♭‖∮‖‖♭‖§♭‖♬♪♭♯§‖‖♯‖‖♬‖‖♪‖‖♪‖¶§‖‖♬♭♯‖♭♯♪‖‖∮‖♬§♭‖‖‖♩♪‖‖♬♭♭♬‖♩♪‖♩¶‖♩♪‖♩♬‖¶§‖‖♩‖¶♫♭♭♩‖♬♯‖♬§♭‖♭‖♩¶‖‖∮♭♭♬‖‖♭‖♫§‖¶♫‖♩∮♭♭§‖♭§‖♭§§=

由于这个解码网站挂了,我们看别人的wp得到结果是U2FsdGVkX1/eK2855m8HM4cTq8Fquqtm6QDbcUu4F1yQpA==
但是随波逐流自动解码发现不是base系列,经过一番尝试发现是rabbit加密,key为2020,得到welcome_to_payhelp,第二次压缩包解密,得到hint.txt文件

内容是
VmpKMFUxTXhXWGxVV0dob1RUSjRVVll3V2t0aFJscDBZMGhLYTAxWGVIaFZiRkpUWWtaYVZWSnJXbFpOVjJoeVZYcEdZVkpzVG5KVWJHaHBWa1ZWZDFkV1ZtRmtNRFZYVjJ4c2FWSlVWbFJVVnpWdVRXeFZlV1ZHVGxSaVZrWTBXVlJPYzFWR1pFZFRiVGxYWW01Q1dGcEdXbE5UUjBZMlVXMTBWMWRGU2xkV1ZtUXdVekpGZUZOWWJHaFRSVFZWV1d0YVMxTXhjRVZUYTFwc1ZteHdlRlp0ZERCV01VcFlaRE53V0Zac2NIWldSekZMVW1zeFdWSnNTbWxXUjNodlZtMXdUMkl5Vm5OaVNGWnBVbXh3YzFac1VrZFNiRlY0WVVkMFZXSlZXbmxWYlRWUFZsWlplbEZyWkZSaVJrcFFWV3hGYkUwd1VXeE5NRkVsTTBRJTNE
Base64 解码 6 次得到

welcome_to_2020%0Aflag%20is%20coming...%0Athe%20key%20is%20hello%202020%217

扔给AI,中间有百分号%,是URL编码,解码后得到

welcome_to_2020 flag is coming... the key is hello 2020!

密码是hello 2020!打开flag.txt,得到flag{g00d_f0r_y0u}

misc50

开局给了一张welcome.png,分离后得到一张图片和一个压缩包

把分离的文件拖到010,文件尾发现Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==

试了好久,发现先是base64,然后是base32,cyberchef的magic很好用

得到明文KEY{Lazy_Man}

压缩包打开后是fbi.rar,在注释里发现了GEZDGNBVGYFA====

在cyberchef里用magic解密后发现是123456,打开后得到一堆数,后面就不会了,看wp

发现3078出现的频率非常高,将3078拖入cybercherf可以知道3078为二进制,转换为字符串为0x,随即得知文件中的数字为十六进制字符,这其实是个7z压缩包,用脚本删掉所有的0x

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
import re
from tqdm import tqdm

def read_file(filepath):
with open(filepath) as fp:
content=fp.read();
return content

number = read_file('thienc.txt')
result = []
result.append(re.findall(r'.{2}', number))
result = result[0]

strings =''
for i in tqdm(result, total=len(result), desc="处理中")
y = bytearray.fromhex(i)
z = str(y)
z= re.findall("b'(.*?)'",z)[0]
strings += z

b= strings.split('0x')

strings=''
for i in b:
if len(i) ==1:
i= '0' + i
strings +=i

with open('te.txt', 'w') as f:
f.write(strings)

然后是base64多重解密,脚本

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
import base64
import re
import base91


def baseDec(text, type):
if type == 1:
return base64.b16decode(text)
elif type == 2:
return base64.b32decode(text)
elif type == 3:
return base64.b64decode(text)
elif type == 4:
return base64.b85decode(text)
elif type == 5:
return base91.decode(text.decode())
else:
pass


def detect(text):
try:
if re.match("^[0-9A-F=]+$", text.decode()) is not None:
return 1
except:
pass

try:
if re.match("^[A-Z2-7=]+$", text.decode()) is not None:
return 2
except:
pass

try:
if re.match("^[A-Za-z0-9+/=]+$", text.decode()) is not None:
return 3
except:
pass

try:
if re.match("^[A-Za-z0-9$%()*+,-./:;?@[\]^_`{|}~]+$", text.decode()) is not None:
return 4
except:
pass

try:
if re.match("^[^-\']+$", text.decode()) is not None:
return 5
except:
pass

return 5


def autoDec(text):
floor = 0
while True:
try:
code = detect(text)
text = baseDec(text, code)
floor += 1
print("第{0}层:\n".format(floor), text)
if not text: break
except:
break


if __name__ == "__main__":
with open("secenc.txt",'rb') as f:
content = f.read()
# content = "60290f0225011a72697f420d1f4e402778231b".encode()
autoDec(content)

得到ook,再次解密,得到

1
2
3
4
5
6
7
8
+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ +[->- ----- <]>.< +++[- >+++< ]>+++ ++.++
+++++ .---- ----- .<+++ ++++[ ->--- ----< ]>--. <++++ +++[- >++++ +++<]
>++++ +++++ +++.- ----- --.-- ----. <++++ [->++ ++<]> +++++ .<+++ +++[-
>---- --<]> -.<++ ++[-> ++++< ]>.++ ++.<+ ++[-> ---<] >---- --.<+ +++[-
>++++ <]>++ .---- ---.< +++++ +[->- ----- <]>-- ----- -.<++ +++++ [->++
+++++ <]>++ ++.++ +++++ .++++ ++++. <++++ +++++ [->-- ----- --<]> -----
.<+++ +++++ +[->+ +++++ +++<] >++++ +++++ ++.<

brainfuck解码得到flag{Welc0me_tO_cTf_3how!}

确实很好的一个题,考了很多东西

misc30

解压后得到星空.png,眼见不一定为实.doc和flag.png

星空.png的属性里看到明文little stars

用密码打开doc,全选后发现有没显示的字,得到明文Hello friend!

flag为flag{welcome_to_ctfshow}

整个过程比较流畅

stega1

这个需要用JPHS这个工具,在随波逐流里就有。选择图片,然后点seek,密码为空,保存为1.txt,直接打开就有flag

flag{3c87fb959e5910b40a04e0491bf230fb}

misc40

其中wav文件需要密码打开

二维码扫出来没东西,在010里发现文件尾存在brainfuck编码,

1
++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>+++++.<<<<<++.------.>>>>>+++.<<<.<<++++.>>>>>--.<<<.<<+.>>>>>--.<<<++++++++.+++.>>>+.<<<<<+.------.>>>>>+++.<<<-----------.<<++++.>>>>>--.<<<<<++++++.<+++++++.>>>>>>.<<<<<++.<+++++++.>>>>>>-.<<<<<<++++.------.>>>>>>+++.<<<.<<<++++.>>>>>>---.<<<<<<++.------.>>>>>>+++.<<<.<<<++++.>>>>>>---.<<<<<<++.------.>>>>>>+++.<<<.<<<++++.>>>>>>.<<<<<<---------.>>>------.>>>-.<<<<<----.>>+++++++.>>>--.<<<<<--.<+++++.>>>>>>+++.<<<-.<<--.>>>>>---.<<-------.<+++.>>>++.<<<------.<<<---.>>>>>>--.<<<<<++.<+++.>>>>>>+++.<<<+++.<<--.>>>>>---.<<<<<<-------.>>>----.>>>+.<<<+.<+++.

转换后得到社会主义核心价值观编码

和谐民主和谐文明和谐和谐和谐自由和谐平等和谐公正

最后结果是123456

txt文件内容是

1
2
3
110001010100011101

2>4>8>10

把2进制转成10进制后得到202013

后面不会做了,看wp

需要用MP3Stego这个工具

使用命令Decode.exe -X -P 123456 svega.mp3

-X 提取隐藏数据

-P 用密码用于嵌入

最后的到txt文本提示静默之眼
另一个音乐的密码是abc123

打开后得到wav文件

两个key都是202013

flagflag{C0ngr4tul4ti0n!}

misc30

开局给了一个压缩包,你不得不说随波逐流真好用,直接自动修复伪加密

得到一个mp3文件,foremost提取一下得到一张图

在010里把图片的高改一下,就能看到图片的下半部分了

这是个猪圈密码

最后挨个对照映射表

得到welldone

flagflag{well done}