[MRCTF2020]千层套路1

Posted joker-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MRCTF2020]千层套路1相关的知识,希望对你有一定的参考价值。

BUU题目复现~~

开局一个压缩包,flag全靠懵~

拿到压缩包第一件事直接看能不能直接解压缩(很明显,有密码,不行!)

下一步,使用010Editor查看内部结构,发现确实操作着很多的“.zip”文件,但是我使用binwalk、foremost都没办法分离出什么花来 

没办法了,我直接使用“archive”去硬暴力破解一波(一般是4个数字)

居然真的可以,震惊我老半天~~

这就是脑洞的力量?

不过貌似这个压缩密码有点似曾相识啊!

回到正题了(认真脸)

这个压缩密码跟文件名一致,而且解压后的文件也是一个zip压缩包。

后续也有继续尝试使用“archive”去暴力破解后续的压缩包,发现压缩密码都是文件名!!

(本人曾经忽视题目,直接通过手工的方式去一个个打开压缩包,发现根本解不完,这实在是太多了啊!!!)

所以,只能使用脚本去帮我们工作了,不然真的会犯病的~(认真脸)

这里附上python脚本:

 

import zipfile
import os
path=r"C:\\xxxx\\attachment (4)\\0573\\0114\\0653\\0234\\0976\\0669\\0540\\0248\\0275\\0149\\0028\\0099\\0894\\0991\\0414\\0296\\0241\\0914" #这个自己把控想在哪里开始使用脚本
file="0140.zip"
def un_zip(Path,File_name): #传入一个路径和当前路径的压缩包名字,返回解压缩后的文件名字
        current_file=Path+os.sep+File_name #路径+'/'+文件名
        #new_path=''
        os.chdir(Path) #改变当前工作路径,方便添加文件夹
        
        zip_file=zipfile.ZipFile(current_file)
        #print(zip_file.namelist()[0])
        new_file=zip_file.namelist()[0] #新解压的压缩文件为新的路径名字
        
        #new_path=current_path + os.sep + new_file
        #os.mkdir(new_path) #新建一个以解压出来的压缩包为名字的文件夹

        #os.chdir(new_path)
        zip_file.extractall( path=Path, members=zip_file.namelist(), pwd=File_name[0:-4].encode() )#因为密码就是文件名
        zip_file.close()
        
        return new_file

new=file
new1=''
while (1):
        #new1=un_zip(path,new) #第一次解压出来了new1
        if(new ==''):  #判断是否解压完毕,是则直接退出
                print("end:"+new1)
                break

        else:   #否则就开始新的解压
                new1=un_zip(path,new)
                print("continue:"+new1)
                new=new1
                
        

最后解压缩出来一个“qr.txt”而且程序报错退出即可。

 下一步,查看这个“qr.txt”文件,发现是一个经典的二维码绘图

 还是直接使用python脚本跑出二维码

这里附上脚本:

from PIL  import Image
import os
os.chdir(r'C:\\xxx\\attachment (4)\\0573\\0114\\0653\\0234\\0976\\0669\\0540\\0248\\0275\\0149\\0028\\0099\\0894\\0991\\0414\\0296\\0241\\0914')
string=''

file=open('qr.txt')
MAX=200

picture=Image.new("RGB",(MAX,MAX))
for y in range(MAX):
    for x in range(MAX):
        string =file.readline()
        picture.putpixel([x,y],eval(string)) #直接使用eval()可以转为元组
picture.show()
    
    
    

直接运行上述脚本,会自动生成一个二维码展示

 大家可以直接扫描获取flag啦~

以上是关于[MRCTF2020]千层套路1的主要内容,如果未能解决你的问题,请参考以下文章

[MRCTF2020]千层套路1

算法笔记 DFS的千层套路 HERODING的算法之路

全网独家首发!一份破解大厂面试官千层套路的Spring源码笔记

[MRCTF2020]套娃

2020MRCTF

[MRCTF2020]PYWebsite