[密码攻击] 密码破解实战:从哈希原理到字典攻击与防御全解析

密码破解,这四个字在安全圈里是个经久不衰的话题。我做过不少授权渗透测试项目,也帮朋友恢复过遗忘的路由器管理密码,说实话,“破解”这个词听起来很玄,但真正落地时拼的是对密码体系原理的理解、对工具参数的把握,还有足够的耐心。这篇文章我想从实操者的角度,把密码破解的常见路径、核心原理和防御思路一次讲透,重点突出“为什么这样做”和“踩过的坑”,给正在学安全测试或者做企业自查的朋友一份能直接上手的参考。

1. 密码破解的本质:不是“猜”,而是“计算与匹配”

很多人以为密码破解就是拿个工具在那儿傻猜,其实完全不是。密码破解的本质是 在海量候选值中找到与目标哈希值匹配的那一个 ,或者 在认证协议的弱点中找到可利用的突破口 。搞懂这一点,后面所有操作思路都会清晰很多。

1.1 先搞清楚攻击目标:明文密码还是密码哈希

绝大多数系统不会直接存储明文密码,而是存储密码的哈希值。哈希算法(比如MD5、SHA1、SHA256、bcrypt、scrypt、Argon2等)把任意长度的密码映射成固定长度的字符串,而且这个映射是单向的。破解的本质,就是把候选密码逐个哈希,拿算出来的哈希和目标哈希比对,一致就算命中。

所以实际工作中,你通常需要先拿到一份哈希文件,比如Linux系统的 /etc/shadow 文件、Windows的SAM文件,或者某个Web应用数据库里的用户表。没有哈希文件,纯靠对在线登录页面做尝试,那是“撞登录口”,属于另一种场景,效率和成功率都差很多。

这里有个很重要的判断: 哈希算法的强度直接决定破解成本 。MD5和SHA1在GPU面前脆弱得跟纸一样,但bcrypt和Argon2设计之初就是故意“算得慢”,让暴力破解的成本呈指数级上升。后面实操环节我会专门说参数怎么选。

1.2 攻击路径的三种基本形态

  • 纯暴力破解 :穷举所有字符组合。理论上一定能穷出来,但受限于密码长度和字符集大小。比如8位纯小写字母是26的8次方,约2088亿种组合,看着吓人,但在GPU集群面前也就一会儿的事。如果加了大小写、数字、特殊符号,复杂度就是指数级上涨。
  • 字典攻击 :用预生成的字典文件(比如rockyou.txt、常用密码列表)逐个尝试。现实中绝大多数人的密码都在字典里,因为人脑记不住随机字符串。
  • 规则变异攻击 :在字典基础上做变形,比如在单词后面加年份、统一换成Leetspeak写法(把e换成3,把a换成4)、大小写交替。这是性价比最高的路径,一条规则能跑出几亿种常见变体。

我的经验是: 90%以上的实际破解任务,靠的是字典加规则,而不是纯暴力穷举 。所以拿到哈希后第一步不是急着跑GPU,而是先分析这个哈希是什么算法、目标用户可能是什么习惯,再选字典和规则。

1.3 合规边界:哪些场景可以动手

这里必须先说清楚: 没有授权就尝试破解任何系统密码,都是违法行为 。我写这篇文章的前提是你拥有目标系统的合法测试授权,或者是在恢复自己设备的密码。正规的渗透测试项目都会签授权书,写明测试范围和时间窗口;漏洞赏金项目也会在白帽范围内划定边界。千万不要越线,安全测试这份职业的口碑和安全,比任何一次“秀技术”都重要。

2. 工具选型:哈希破解与在线爆破的分工

工具太多容易眼花,我按场景把主流工具分成了两大类,实操时根据需求选就行。

2.1 离线哈希破解:Hashcat与John the Ripper

哈希破解的核心工具就两个:Hashcat和John the Ripper(简称John)。两者各有侧重。

维度 Hashcat John the Ripper
硬件加速 支持NVIDIA/AMD GPU,速度极快 支持GPU但优化略逊,CPU模式更常用
规则引擎 功能更强,支持复杂变异规则 规则相对简单,但内置常见模式
哈希类型支持 超过300种,覆盖主流算法 约200种,配合社区版可用性也不错
上手难度 参数多,但教程丰富 更简单,适合入门

我自己主攻Hashcat,因为企业项目里面对的多是WPA2握手包、NTLM哈希、数据库密文,Hashcat的覆盖度和速度优势非常明显。但John在Unix系设备上开箱即用,处理一些老哈希格式时也很顺手,两者的规则文件可以互相转换用。

2.2 在线登录爆破:Hydra与Burp Suite

如果目标没有可离线提取的哈希,只能尝试在线登录,这属于完全不同的战场。Hydra是个老牌在线爆破工具,支持HTTP表单登录、SSH、FTP、SMTP、RDP等几十种服务协议。Burp Suite则是Web应用测试的全能选手,它的Intruder模块可以用来对登录接口做字典尝试,而且能灵活处理验证码、Token等防护逻辑。

坦率讲,在线爆破的效率和成功率都很低:一是受网络延迟限制,每秒尝试次数有限;二是现在的系统基本都有失败锁定、验证码、双因素认证等机制。所以在线爆破通常只在测试低防护的内部系统、或者验证弱口令策略是否存在时使用。

2.3 字典资料:质量决定成败

字典文件是破解的“弹药库”,我电脑里长期存着以下这几类:

  • 标准字典 :rockyou.txt,约1400万条真实泄露密码,覆盖了大量历史弱口令,适合起步阶段。
  • 中文密码字典 :国内安全社区整理的常见中文拼音组合、手机号段、姓名变体、生日组合,对公司内部人员的弱口令测试效果奇好。
  • 行业定制字典 :针对目标行业的关键词组合,比如金融公司用“jinyin”、电商公司用“dianshang”,加上年份和特殊字符后缀,命中率往往出人意料。
  • 规则文件 :Hashcat自带的 best64.rule 、 rockyou-30000.rule ,以及社区分享的高阶规则。

不要小看字典准备工作。有一次项目,我用默认rockyou跑了两小时没出结果,后来把目标公司官网上的产品名、公司英文名、创始团队姓名做成定制字典,十分钟内连出三个弱口令。密码学里有个术语叫“密钥空间”,但从攻击者视角看, 用户的思维模式才是真正需要探索的空间 。

3. 核心实现:从拿到哈希到跑出密码的全流程

下面以两个最常见场景为例,拆解完整实操过程。我会把每一步的参数选择和目的讲透,方便你真正理解而不是照抄命令。

3.1 场景一:Linux系统哈希的破解实战

假设你在授权测试中拿到了目标的 /etc/shadow 文件,里面通常是 $6$ 开头的SHA-512哈希,或者 $y$ 开头的yescrypt哈希。第一步是清理数据,把用户名和哈希提取出来,做成Hashcat能识别的格式。

  1. # 提取shadow文件中“用户名:哈希”的字段
  2. awk -F':' '{print $1":"$2}' shadow.txt > hash.txt
复制代码

然后先判断哈希类型。 $6$ 就是哈希模式 1800 (sha512crypt), $y$ 对应 10900 (yescrypt), $2y$ 对应bcrypt的 3200 。判断对了模式,破解就成功了一半;判断错了,跑多久都是白费。

接下来选字典。先跑一遍标准字典:

  1. hashcat -m 1800 hash.txt /path/to/rockyou.txt -r /path/to/best64.rule --force
复制代码

参数的意图很简单: -m 指定哈希类型, -r 加载规则变异, --force 跳过一些环境检测(比如非NVIDIA环境用OpenCL时)。跑完如果没出,就升级到更昂贵的规则组合、更大的字典,最后才考虑纯暴力模式。

3.2 场景二:WPA2 Wi-Fi握手包捕获与破解

WPA2的破解思路跟离线哈希不同,它需要先捕获目标AP(无线接入点)与客户端之间的四步握手报文。用一个支持监听模式的无线网卡(芯片推荐Realtek 8812AU或Atheros AR9271),配合Aircrack-ng工具套件操作。

  1. # 查看无线网卡接口
  2. airmon-ng
  3. # 开启监听模式
  4. airmon-ng start wlan0
  5. # 扫描周围AP
  6. airodump-ng wlan0mon
  7. # 锁定目标信道与BSSID,捕获握手
  8. airodump-ng -c 6 --bssid XX:XX:XX:XX:XX:XX -w capture wlan0mon
复制代码

如果周边客户端连接不活跃,可以发送deauth(取消认证)包踢掉一个客户端,强制它重连,从而抓到握手:

  1. aireplay-ng -0 2 -a XX:XX:XX:XX:XX:XX wlan0mon
复制代码

抓到握手后,文件里会保存为cap格式,然后转成Hashcat可用的hccapx格式再跑GPU:

  1. # 将cap转为hashcat格式
  2. cap2hccapx capture.cap capture.hccapx
  3. # GPU跑WPA2
  4. hashcat -m 22000 capture.hccapx /path/to/wordlist.txt --rule
复制代码

这里有个关键点:WPA2破解的目标其实是PMKID或者握手包里的PSK哈希,字典里的每一个候选密码都会经过PBKDF2-SHA1计算4096次迭代才能验证。这个算法相对较慢,所以对GPU性能要求高,但哪怕只有一张中端显卡,跑常用弱密码字典也能有不错的成功率。

3.3 硬件与参数:跑得快不如跑得对

GPU型号决定了每秒能尝试的哈希次数。拿 SHA-512crypt (模式1800)举例,一张RTX 4090大概每秒能跑40万到60万次,但一张普通CPU核跑同一算法可能一秒只能完成几百次。两者差距是数量级的。所以条件允许,搞一块NVIDIA显卡会省很多时间。

但参数选错,硬件再好也白搭:

  • 迭代次数 :bcrypt的cost factor默认是12(即2的12次方次迭代),如果目标哈希是cost 12,那每秒能跑的量会断崖下跌。此时不要硬刚纯暴力,必须靠字典加规则。
  • 规则文件层级 : best64.rule 只做小幅度变形,适合快速筛选; rockyou-30000.rule 做了大量组合变形,速度慢但漏网概率低。务实做法是先跑快规则,再跑慢规则。
  • 掩码攻击 :当你大概知道密码格式时,比如“首字母大写+8位数字+感叹号”,用 ?u?d?d?d?d?d?d?d?s 这样的掩码能大大压缩尝试空间,比纯暴力少跑几个数量级。

4. 从破解到防御:把攻击视角转为加固思路

做了这么多次攻防对抗,我最大的感受是: 理解攻击路径的价值,在于知道怎么防 。很多企业招人做安全测试,目的不是为了“证明系统可以被打穿”,而是要拿到这份证据去推动整改。

4.1 密码策略的设计原则

  • 长度优先于复杂度 :NIST早就建议,与其强制大小写数字符号混用,不如要求至少14位以上,支持长密码短语。原因是14位以上的随机短语,即使全用小写字母,密钥空间也远大于8位混合字符。
  • 禁用已知弱口令 :阻止用户使用rockyou字典界定的高频弱口令,这一步能挡掉大量撞库攻击。
  • 不要定期强制改密 :除非有泄露事件或明确风险,否则频繁改密只会逼用户加序号后缀,比如 Password1! 、 Password2! ,反而降低整体安全性。
  • 允许多因素认证 :这一点是压倒性的。密码泄露不可怕,可怕的是只有一个密码因子在裸奔。

4.2 开发者视角的加密存储

服务端存储密码,现在不应该再用MD5或SHA1这种快速算法。正确做法是加盐加慢哈希。我建议新项目直接上 Argon2id ,它的内存参数和迭代参数可以调节,抗GPU破解能力比bcrypt更硬;老项目至少升级到bcrypt,把cost factor调到12以上。

加盐也很关键:盐必须是每个用户独立的随机值,长度至少16字节。否则两个密码相同的用户,哈希值会一致,攻击者一眼就能分辨出重复口令。

4.3 企业侧的多层防御

单靠密码策略远远不够,实际工作中我经常建议企业再叠加这几层:

  • 登录风控 :同一IP高频失败自动限速,异地登录触发二次验证,新设备登录需要邮件确认。
  • 泄露情报监控 :订阅泄露数据库检索服务,一旦发现企业员工的邮箱或域名出现在泄露数据中,立即强制重置相关账号。
  • 硬件密钥推广 :对内部高权限系统强制使用FIDO2硬件密钥,替代短信验证码。

有一回项目复盘时,客户问我:“既然密码这么容易被破,为什么还在用密码?”我回答:“密码不会消失,但它的定位已经从唯一防线变成了多因素认证中的一环。你要做的不是取消密码,而是让密码即使泄露也派不上用场。”

5. 常见问题与排查技巧实录

长期实操中,我积累了不少典型问题和排查思路,整理成速查表,对照着处理能少走很多弯路。

问题现象 可能原因 处理方案
Hashcat提示 No devices found OpenCL驱动未装,或显卡驱动版本过旧 安装对应显卡厂商的驱动与OpenCL运行时,NVIDIA装CUDA Toolkit
哈希跑了一天没出结果 字典覆盖度不够,或规则太弱 换大字典、加载更激进的规则,尝试掩码攻击缩小范围
WPA2抓了很多包但显示 0 handshake Deauth包没发出去,或网卡不支持注入 检查网卡驱动是否支持包注入,换USB网卡并重试
跑出来的“密码”是乱码 哈希类型判断错误 用 hashcat --identify 或者在线哈希识别工具核对算法模式
John与Hashcat规则不通用 两者规则语法存在差异 用工具自带的规则格式互转,或直接单独适配

还有一个高频提示: 跑出来的明文密码可能是“历史密码”而非“当前密码” 。如果目标系统会定期轮换口令,你破解到的哈希可能来自旧记录,拿到结果后要在目标环境里做一次实际登录验证,别直接拿来写报告,否则容易闹笑话。

做安全测试这些年,我有个非常深的体会:密码破解这项技术,真正考验人的不是命令记得多熟,而是 是否愿意花时间观察目标、分析习惯、打磨字典 。工具是死的,思路是活的。遇到瓶颈时,回头想想对方会怎么设置密码——人的惯性,往往就是最大的突破口。

最后再说一个细节:破解完成后,记得清理现场。临时生成的哈希文件、cap包、破解出的明文密码,该销毁就销毁,该脱敏就脱敏。我们做测试的目的是帮系统变强,不是让敏感数据二次扩散。守住这条底线,这门技术才能一直走在正确的方向上。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行天