CTF

安恒2020年元旦月赛(CRC32)

Posted on 2020-01-02,3 min read

binwalk。提示a-z0-9。6位密码


爆破得到abc123
解压后。获得一个压缩包,还是需要密码

这里就要提一下CRC32爆破了

CRC32:循环冗余校验。用来校验文件是否出错
就是将文件的每个数据块都进行运算。然后输出一个CRC32
修改任何一个数据。都会导致CRC32变化
CRC32爆破。即用暴力破解。去循环输出字符串的各种拼接。然后计算CRC32。计算是否于压缩包内的CRC32相同。

我们可以看到。在压缩包中。有1/2/3.txt。还有一个hint.txt
分别是4字节/2字节/2字节/23字节
由于CRC32采取的是暴力破解的方法。对于计算小文件还好。但是对于大文件。23位字符串循环爆破。。恐怕得不偿失
所以。这里我们就爆破1/2/3.txt

import string
import binascii
dic=string.printable
#字典。所有字符串
crc=0x7D90EE19
#4字节的CRC值
for a in dic:
    for b in dic:
        for c in dic:
            for d in dic:
                s=a+b+c+d
                #循环拼接字符串,4字节就4个循环。2字节就2个循环
                if crc==(binascii.crc32(s)&0xffffffff):
                #计算CRC32值。并且比较
                    print s
                    exit(0)

最后得出结果
1.txt:Blow
2.txt:it
3.txt:up

获得了这三个。我就尝试用ZIP明文攻击。将3个文件压缩。然后和密文压缩包进行明文攻击
然而明文攻击需要满足一个条件。就是压缩算法相同。我将3个文件压缩后。3个文件的字节大小永远在4字节左右。
密文压缩包的大小为17字节。因为加密算法不同。这里无法用ZIP明文攻击

然后发现。这三个字符拼接起来就是压缩包密码

OK。提示outguess。然后key是它(炸弹人)的生日
然而。百度搜到20120223。
outguess -k 20120223 -r Ziggs.jpg -t flag.txt
并没有flag。
题目名称叫爆破。。
想到编个脚本循环输出年月日放入命令里爆破

for i in range(1,13):
    if len(str(i))==1:
        i='0'+str(i)
    for b in range(1,32):
        if len(str(b))==1:
            b='0'+str(b)
        for a in range(2012,2015):
            s=str(a)+str(i)+str(b)
            print 'outguess -k '+s+' -r Ziggs.jpg -t '+s+'.txt'

python脚本输出2012年-2015年的所有年月日。然后放入命令中
将python输出的所有可能性放入1.sh执行

下一篇: Web hash长度扩展攻击→