MD5截断比较验证

最近在打De1CTF时在Web项目中碰到了两次MD5截断比较验证的题目,在做题时为了方便顺手写了一个小脚本来爆破Code,下面就简单分享一下思路

以De1CTF线上赛Web3为例,在De1CTF中,我遇到的MD5截断比较验证是这样的:

这个验证码提示的意思是“将问号(即为Code)进行md5加密之后截取前5位===9331c”

那么在理论上存在的可能性有16^5种,页面每次刷新之后md5都会更新一次,但是在现实中,md5前五位相同是多解

那么我们的思路就可以梳理为:创建一个彩虹表进行比对,暴力猜解Code

 1 from multiprocessing.dummy import Pool as tp
 2 import hashlib
 3 
 4 knownMd5 = '9331c'      #已知的md5明文
 5 
 6 def md5(text): 
 7     return hashlib.md5(str(text).encode('utf-8')).hexdigest()
 8 
 9 def findCode(code):   
10     key = code.split(':')
11     start = int(key[0])  
12     end = int(key[1]) 
13     for code in range(start, end):
14         if md5(code)[0:5] == knownMd5:            
15             print code
16             break
17 
18 list=[] 
19 for i in range(3):    #这里的range(number)指爆破出多少结果停止
20     list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
21 pool = tp()    #使用多线程加快爆破速度
22 pool.map(findCode, list) 
23 pool.close()
24 pool.join()

运行结果如下:

以上输出的3个Code都是可以使用的,针对不同情况可以选择爆破出不同数量的结果

猜你喜欢

转载自www.cnblogs.com/icecoke/p/11297568.html