每一篇文章中所用到的工具,我都会放在文章的最下面,欢迎支持~
题目链接:
链接:https://pan.baidu.com/s/1ecQH2MfWSraSKbnfalhr5Q
提取码:1qgi
总共36个压缩包,每个压缩包里有一个“flag.txt"的3字节大小文件
使用crc32碰撞来完成
python脚本代码(python2.7。借鉴某个大神的):
#coding:utf-8
import zipfile
import string
import binascii
def CrackCrc(crc):
for i in dic:
for j in dic:
for p in dic:
#for q in dic:
s = i + j + p
if crc == (binascii.crc32(s) & 0xffffffff):
#print s
f.write(s+"\n")
return
def CrackZip():
for I in range(36):
file = 'flag' + str(I) + '.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('flag.txt')
crc = GetCrc.CRC
#以上3行为获取压缩包CRC32值的步骤
#print hex(crc)
CrackCrc(crc)
dic = string.ascii_letters + string.digits + '+/='
f = open('out.txt', 'w')
CrackZip()
f.close()
得到一个dout.txt的文件,截图部分
经过尝试发现这是ASCII码的十进制数字,对应的字符串应该是base64加密的,使用脚本将其还原
还原代码(python3.7):
import base64
list=[]
#逐行读取
for line in open("out.txt","r"):
a=int(line)
#将十进制ASCII码转换成字符串,并添加到列表
list.append(chr(a))
#打印输出经过base64转换的列表
print(base64.b64decode("".join(list)))
得到flag
flag{2iP_Crc_i5_v3Ry_fUn}