关于昨天甘佬抽奖的漏洞

甘佬在昨天抽了个奖
https://linux.do/t/topic/37787
甘佬提前将楼层压缩包发出来,到时间再公开密码,看起来不会有什么问题。

让我以一个CTF萌新的视角来看看


打开压缩包,可以看到里面只有一个文件,且文件大小为7字节,并且能看到文件的CRC为0b636e9a
根据甘佬的提示,2个中奖楼层,且大于100
猜测文件格式为 楼层号某个字符楼层号 ,这样正好7字节

已有信息已经足够破解文件内容了,代码如下


import java.util.zip.CRC32;
public class X {
    public static void main(String[] args) {
        String r = "0b636e9a";
        String concat = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\n\t";
        for (int i = 100; i <= 500; i++) {
            for (int j = 100; j <= 500; j++) {
                for (int k = 0; k < concat.length(); k++) {
                    String input = "" + i + concat.charAt(k) + j;
                    if (crc(input).equals(r)) {
                        System.out.printf("%d %d", i, j);
                        return;
                    }
                }
            }
        }
    }

    static String crc(String s) {
        CRC32 crc32 = new CRC32();
        crc32.update(s.getBytes());
        return String.format("%08x", crc32.getValue());
    }
}

结果
136 200

我看很多人还是没理解这次的破解原理,说什么换摘要算法,把密码加长,其实这两种都没用
本质是文件太小,只有7字节
因为文件太小且格式可猜,因此我上面的代码使用的是枚举文件内容,计算枚举到的文件内容的CRC和zip里看到的CRC是否一致,你换其它摘要算法我破解代码跟着换就行,破解时也并没有涉及到密码

82 个赞

你为什么啥都会?

6 个赞

好使好使。

5 个赞

厉害厉害,快教教我

7 个赞

破解的一把好手啊佬

5 个赞

厉害厉害

5 个赞

看来以后在论坛发点儿啥需要更高的技术了……

7 个赞

毕竟是楼层,暴力破解不需要多久

6 个赞

niubility

5 个赞

正好学过一点CTF

5 个赞

牛逼,长见识了

5 个赞

弔弔弔

5 个赞

以后256加密吧

5 个赞

:ox::beer:

3 个赞

牛的牛的,卧虎藏龙

4 个赞

如果 zip 压缩包内有已知明文文件且使用默认加密算法 ,可以采用: GitHub - kimci86/bkcrack: Crack legacy zip encryption with Biham and Kocher's known plaintext attack. 爆破,实测过耗时不算长。 :face_with_hand_over_mouth:

4 个赞

处处都是大佬

3 个赞

这里并没有已知明文,只是猜出了文件格式

4 个赞

甘佬看看 :rofl: @deleted_account_1

3 个赞

玩ctf玩的

3 个赞