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

  • 相关阅读:
    Python开发【Part 2】:初识Python
    Python开发
    python-软件开发目录规范
    python-常用模块-re正则
    python-常用函数模块学习-logging模块
    python-常用函数模块学习-subprocess
    python-常用函数模块hashlib加密
    python-常用函数模块学习
    python-函数-内置方法
    python-函数
  • 原文地址:https://www.cnblogs.com/LEOGG321/p/13510726.html
Copyright © 2011-2022 走看看