如何用OSX Bash脚本暴力破解MD5哈希以查找已知密码对应盐?
针对固定盐MD5哈希的破解方案
嘿,你已经抓准了关键线索——这个网站用的是固定盐的MD5哈希,而且你还把盐的范围缩小到了2字符,这事儿就好办多了!结合你已知的密码123321和目标哈希896501b1d2ed4ec4e2d3a6c69a672152,我给你整理一套可行的思路:
第一步:确认盐的拼接规则
加盐MD5最常见的两种组合方式是「盐在前+密码」或者「密码+盐在后」,你可以先用自己的测试用例验证:比如你已知某个盐XX和密码生成的哈希,分别计算md5(XX+密码)和md5(密码+XX),看哪个结果和测试用例的哈希一致,先把规则搞对。
第二步:暴力遍历2字符盐(附Python示例)
因为只有2字符,哪怕包含所有可打印ASCII字符,总共也才9000多种组合,完全可以暴力遍历出来。这里给你写个基础脚本:
import hashlib # 替换成你的目标哈希和已知密码 target_hash = "896501b1d2ed4ec4e2d3a6c69a672152" known_password = "123321" # 定义盐的字符范围,可根据实际情况调整(比如只保留字母数字) salt_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;:,.<>?" # 遍历所有2字符组合 for first_char in salt_chars: for second_char in salt_chars: current_salt = first_char + second_char # 测试盐在前的情况 hash_result = hashlib.md5(f"{current_salt}{known_password}".encode()).hexdigest() if hash_result == target_hash: print(f"找到匹配的盐(前缀):{current_salt}") exit() # 测试盐在后的情况 hash_result = hashlib.md5(f"{known_password}{current_salt}".encode()).hexdigest() if hash_result == target_hash: print(f"找到匹配的盐(后缀):{current_salt}") exit() print("没找到匹配的盐?可能需要扩大字符范围,或者检查拼接规则是不是有其他变种(比如加盐后再转大写?)")
第三步:用你的测试用例验证脚本
先把你已知盐和密码的测试数据代入脚本,确认脚本能准确输出已知的盐,这能确保你的脚本逻辑没问题,再拿去跑目标哈希。
如果你的测试代码遇到了报错或者不符合预期的情况,把代码片段贴出来,我帮你排查问题~
内容的提问来源于stack exchange,提问作者Cyborg




