zoukankan      html  css  js  c++  java
  • MD5截断比较验证

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

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

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

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

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

    from multiprocessing.dummy import Pool as tp
    import hashlib
    
    knownMd5 = '9331c'      #已知的md5明文

    def md5(text): return hashlib.md5(str(text).encode('utf-8')).hexdigest() def findCode(code): key = code.split(':') start = int(key[0]) end = int(key[1]) for code in range(start, end): if md5(code)[0:5] == knownMd5: print code break list=[] for i in range(3): #这里的range(number)指爆破出多少结果停止 list.append(str(10000000*i) + ':' + str(10000000*(i+1))) pool = tp() #使用多线程加快爆破速度 pool.map(findCode, list) pool.close() pool.join()

    运行结果如下:

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

  • 相关阅读:
    17. Letter Combinations of a Phone Number
    16. 3Sum Closest
    15. 3Sum
    14. Longest Common Prefix
    13. Roman to Integer
    12. Integer to Roman
    11. Container With Most Water
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/yesec/p/11297568.html
Copyright © 2011-2022 走看看