0x01 题目

image-20221007233832420

附件📎:attachment.rar

0x02 解题

下载下来附件,解压之后发现是几千张二维码:

image-20221007233950494

手动一个一个扫肯定是不可能的了,用python里面的pyzbar包进行自动扫码。

1
2
3
import os
import cv2 as cv
from pyzbar.pyzbar import decode

这里遇到了一个坑,os.listdir读取的文件夹里面的图片是乱序的,最后得出来的编码也是乱序,导致在这里卡了一会儿。

需要进行排序:

1
list1 = sorted(os.listdir(image_path),key = lambda x:int(x[:-4]))

然后发现输出的是一串串base64编码,直接把所有base64丢到base64解码器里面是解不出来的,因为里面穿插了一些摩斯密码。

摩斯密码解密出来的字符都是无用的,所以这些摩斯密码都是干扰你的,需要去除:

1
2
#去除摩斯密码
qrInfo = qrInfo.replace('.','').replace('-','').replace('/','')

然后以=为分界线进行一行一行输出

处理过后的base64编码一共有30行

解码base64之后发现还有一层base64,所以这是双层base64编码,需要解码两次:

1
2
import base64
debase = base64.b64decode(base64.b64decode(str1)).decode()

双层解密之后最后得到的编码如下:

image-20221007234744746

发现都是一些32位的md5,

一个一个去cmd5.com查表,发现一行md5代表一个字母或数字(也可能是“{” “}”)

那么可以通过已知字典进行md5加密一一对比,爆破出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
from encodings import utf_8
import hashlib
import os
import cv2 as cv
from pyzbar.pyzbar import decode
import base64
import hashlib


wordlist = 'abcdefghijklmnopqrstuvwxwz0123456789-}{'
m = ''
image_path = './qrcode'
images = []
str1 = ''
# parseQrcode('./qrcode/1.png')
list1 = sorted(os.listdir(image_path),key = lambda x:int(x[:-4]))
for f in list1:
images.append(f)


for image in images:
filePath = str(image_path+'/'+image)
img = cv.imread(filePath)
texts = decode(img)

for text in texts:
qrInfo = text.data.decode("utf-8")
if qrInfo == '=':
# print(str1,end='\n')
str1 += ''.join(qrInfo)
debase = base64.b64decode(base64.b64decode(str1)).decode()
# print(str1)
for word in wordlist:
md5 = hashlib.md5(word.encode()).hexdigest()
if md5 == debase:
print(f' {debase} = {word}')
m += ''.join(word)
str1 = ''
else:
#替换摩斯密码
qrInfo = qrInfo.replace('.','').replace('-','').replace('/','')
str1 += ''.join(qrInfo)
print(m)
# print(images)

结果如下:

image-20221007235333510

最后发现交不了,经过群友们的友好提示,类UUID格式,这里得到的flag少了一个-,最后结果应该为:

1
qsnctf{06xxxxxx-f6cb-c84a-04fe}

给的题目并不能扫出最后一个-,应该是这题的bug