zoukankan      html  css  js  c++  java
  • BUUCTF Misc Zip

    BUUCTF Misc Zip

    这道题综合了crc32爆破+base64字节流导入+rar文件格式的知识点

    crc32爆破

    有68个压缩包,每个都设置了密码,但是文件大小只有四个字节,这时我们联想到crc32爆破,这种方式要求我们加密文件的大小要比较小。

    上脚本

    #!/usr/bin/python
    #python3
    import zipfile
    import string
    import binascii
    
    def CrackCrc(crc):
    	for i in dic:
    		for j in dic:
    			for k in dic:
    				for h in dic:
    					s = i + j + k + h
    					if crc == (binascii.crc32(s.encode())):
    						f.write(s)
    						return
    
    def CrackZip():
    	for i in range(0,68):
    		file = 'out'+str(i)+'.zip'
    		crc = zipfile.ZipFile(file,'r').getinfo('data.txt').CRC
    		CrackCrc(crc)
    		print('
    '+"loading:{:%}".format(float((i+1)/68)),end='')
    
    dic = string.ascii_letters + string.digits + '+/='
    f = open('out.txt','w')
    print("
    CRC32begin")
    CrackZip()
    print("CRC32finished")
    f.close()
    

    在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。

    我们使用的是python3版本,因此不需要加上&0xffffffff

    得到out.txt文件,发现是段base64

    z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA==
    

    但是网上的base64解密都不好使,解决方法如下↓

    base64字节流写入

    base64转换后发现它并不全部落在ASCII范围内,我们要使用字节流方式写入。

    import base64
    string = "z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA=="
    
    nstr = base64.b64decode(string)
    
    with open("out",'wb') as file: #注意:想要以字节流方式读取、写入,必须模式选择wb 或 rb
        file.write(nstr)
    

    RAR文件头

    rar ctf wiki 的文档如下

    https://wiki.x10sec.org/misc/archive/rar/

    我们把rar的文件头列出来

    RAR文件头52 61 72 21 1A 07 00

    RAR文件尾C4 3D 7B 00 40 07 00

    补全文件头

    image-20200815145837287

    打开压缩包即可在描述中找到flag

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/LEOGG321/p/13510726.html
Copyright © 2011-2022 走看看