之前碰到的crc32碰撞题,都是3~4位的,拿我的土制python脚本就可以跑出来。
import time
import zlib
def fuc1(str, times, len, pswdall, crcall): # 所有位置的可能字符一样
times += 1
for i in pswdall:
if times == len:
#print(str + i)
crc = zlib.crc32((str + i).encode())
if crc in crcall:
print(hex(crc)[2:], str + i)
#print(time.asctime())
else:
fuc1(str+i, times, len, pswdall, crcall)
def fuc2(str, times, len, pswdall, crcall): # 不同位置的可能字符不一样
times += 1
for i in pswdall[times-1]:
if times == len:
#print(str + i)
crc = zlib.crc32((str + i).encode())
if crc in crcall:
print(hex(crc)[2:], str + i)
#print(time.asctime())
else:
fuc2(str+i, times, len, pswdall, crcall)
print(time.asctime())
fuc1("",0,3,"abcdefghijklmnopqrstuvwxyz",{0x96fd05bb,0x60f363de})
print(time.asctime())
fuc2("",0,3,["wm","ko","re"],{0x96fd05bb,0x60f363de})
print(time.asctime())
但是今天碰到一个五字节的文本需要进行crc32碰撞,然后我的土脚本就顶不住了,跑了半天没跑出来。
学长说有个叫hashcat
的神奇工具,我就去找了找,但是这玩意的中文资料特别少,关于咋碰撞crc就更少了,于是只好慢慢爬外网论坛,终于总结出了如下命令行。
hashcat -m 11500 -a 3 hash.txt ?a?a?a?a?a -i --increment-min 4 --increment-max 5 --outfile-autohex-disable --keep-guessing
-m 11500
指定hash函数为crc32-a 3
指定攻击方式为掩码爆破hash.txt
指定目标hash的所在文件(自己创建的),文件内容如下:
397e0355:00000000
96b1eaef:00000000
73fcc42d:00000000
后面的:00000000
是我在外网论坛的网友建议下加上的,具体原因不明,反正不加就没法跑crc32?a?a?a?a?a
5位ascii字符作为掩码-i --increment-min 4 --increment-max 5
期望明文长度4~5位--outfile-autohex-disable
禁用输出结果智能转hex,不禁用的话,带特殊字符和标点符号的明文会以hex形式显示。--keep-guessing
开启持久化攻击,这样子就能把所有可能明文给全跑一遍,而不是找到一个符合条件的明文就停止了,因为crc32的明文重复率比较高
然后因为我没指定结果的输出目标,所以默认会把结果输出在hashcat.potfile
文件中。
最后得到结果如下:
96b1eaef:00000000:-_-#
397e0355:00000000:*:eja
96b1eaef:00000000:VaD's
397e0355:00000000:6u9ku
73fcc42d:00000000:h0rs3
96b1eaef:00000000:&]5"#
96b1eaef:00000000:w?TN?
397e0355:00000000:FIHn%
最后,这些明文就可以挑选合适的拿去继续解题了。
以上。
感觉又学到了好多