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都是可以使用的,針對不同情況可以選擇爆破出不同數量的結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM