暴力破解攻防教程:你的密码能扛住几秒?
“123456”在2025年的数据泄露统计里依然是使用最多的密码,占所有用户的6.7%。第二名是“password”,第三名是“qwerty”。攻击者根本不需要什么高级漏洞,只要拿着一本几万条的弱密码字典,就能攻破上万个账号。
暴力破解(Brute Force)是所有攻击里技术门槛最低的一种。它不依赖SQL注入、不依赖XSS,只需要知道登录接口在哪,剩下的就是猜——直到猜对为止。但低门槛不意味着危害小。2025年某电商平台因为没做登录限制,被撞库攻击拿走了12万用户账户,损失了800万。
这篇文章讲清楚暴力破解的几种形式、主流工具怎么用、字典怎么生成,以及怎么防御。
1. 暴力破解的三种形式
1.1 纯暴力穷举
理论上,攻击者会尝试所有可能的字符组合。假设密码只包含数字,6位长度,最多100万种组合。8位字母+数字+符号,组合数几十亿亿,纯穷举几乎不可能。
纯暴力主要用于短密码(≤6位)或者已知密码格式的情况。大部分实际攻击用的都是“字典攻击”。
1.2 字典攻击
攻击者准备一本包含常见密码、泄露密码库、行业术语的字典文件(每行一个密码)。字典里的词可能是从历年数据泄露里整理出来的,比如rockyou.txt(1400万条密码)、SecLists的Passwords目录、以及中文常见的“123456”“888888”“admin123”等。
攻击过程:用字典里的每一个密码去试登录接口,直到成功。
1.3 撞库攻击
攻击者从某个已经泄露的网站数据库里拿到一批用户名和密码,然后去另一个网站尝试登录。很多人所有平台用同一套密码,一个网站的数据库泄露,等于给攻击者打开了所有网站的门。
撞库是2025-2026年最常见的攻击方式之一。某知名论坛2025年底被撞库攻击,超过30万用户账号被用来发垃圾帖。
2. 实战工具:Hydra(最经典的网络登录爆破器)
Hydra支持FTP、SSH、MySQL、HTTP-GET/POST、RDP等50多种协议。
2.1 安装
# Ubuntu/Debiansudo apt install hydra -y
# macOSbrew install hydra
# 源码编译(Windows用WSL)git clone https://github.com/vanhauser-thc/thc-hydracd thc-hydra./configuremakesudo make install2.2 基本用法
# SSH爆破(用户名root,密码字典pass.txt)hydra -l root -P pass.txt ssh://192.168.1.100
# FTP爆破(用户字典user.txt + 密码字典pass.txt)hydra -L user.txt -P pass.txt ftp://192.168.1.100
# HTTP POST登录表单爆破hydra -l admin -P pass.txt 192.168.1.100 http-post-form "/login.php:username=^USER^&password=^PASS^:Login failed"^USER^和^PASS^会被Hydra替换成字典里的用户名和密码。最后一部分是“登录失败”的错误特征字符串,Hydra根据这个判断是否成功。
2.3 实际案例:爆破WordPress登录
WordPress默认登录地址/wp-login.php,POST参数是log和pwd,登录失败页面包含ERROR字符串。
hydra -L wp_users.txt -P rockyou.txt 192.168.1.100 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&redirect_to=:ERROR"2.4 常用参数
| 参数 | 说明 |
|---|---|
-l | 单个用户名 |
-L | 用户名字典 |
-p | 单个密码 |
-P | 密码字典 |
-t | 并发线程数(默认16,太大会被封IP) |
-vV | 显示详细过程(方便看当前尝试的密码) |
-f | 找到一个有效密码后停止 |
-o | 输出结果到文件 |
-s | 指定端口(非默认端口) |
2.5 防御Hydra攻击
Hydra速度快但特征明显。如果服务器配置了登录失败次数限制(比如连续5次失败封IP 15分钟),Hydra的几十万次尝试会被瞬间阻断。加上验证码或延迟响应,Hydra基本废了。
3. Burp Suite Intruder(Web登录接口精细爆破)
Hydra适合快速扫,Burp Intruder适合更精细的定制。
3.1 步骤
- 打开Burp,浏览器设置代理127.0.0.1:8080
- 在登录页面输入任意用户名密码,点击登录
- 在Burp Proxy里找到这个POST请求,右键Send to Intruder
- 进入Intruder → Positions,清空payload标记,把用户名和密码的值加上
§标记 - 选择Attack type:Cluster bomb(同时爆破用户名和密码)或Sniper(单变量)
- Payloads:用户字典加载user.txt,密码字典加载pass.txt
- 在Options → Grep - Extract里添加“登录成功”的特征字符串(比如
Welcome或dashboard) - 点击Start attack,等待结果
3.2 应对防重放Token
有些登录表单有CSRF Token或随机隐藏字段,每次请求都变化。Intruder需要先发一个GET请求拿到Token,再在POST里动态替换。
解决方案:使用Burp的宏或Turbo Intruder插件编写脚本。
4. 字典生成技巧
没有好的字典,爆破就是浪费时间。以下是几种制作高质量字典的方法。
4.1 基于个人信息生成(cewl)
cewl可以爬取目标网站,提取页面里的单词,自动生成自定义字典。
# 爬取公司官网,生成字典cewl -d 2 -m 5 https://example.com -w dict.txt# -d 深度,-m 最小单词长度4.2 规则组合(hashcat + rule)
利用已知密码加上变形规则生成更丰富的字典。hashcat自带几十条规则(追加数字、替换字母、大小写变换等)。
# 用base.txt作为基础字典,应用best64规则生成新字典hashcat --stdout -r /usr/share/hashcat/rules/best64.rule base.txt > final_dict.txt常用规则示例:
$1在末尾加1$2$0$1$9加2019c首字母大写t变换大小写d复制单词并大写
4.3 合并泄露数据库
从公开数据泄露集中提取常见的用户名和密码组合。比如SecLists仓库里的Usernames/top-usernames-shortlist.txt和Passwords/Common-Credentials/10-million-password-list-top-1000.txt。
4.4 中文拼音与生日字典
针对国内网站,可以生成拼音词典(例如zhangsan、lisi、wangwu)和生日字典(19900101、900101)。使用crunch工具可以按规则生成。
# 生成所有8位数字组合(太大会爆炸,慎用)crunch 8 8 0123456789 -o 8digits.txt
# 生成前缀+数字,比如admin001~admin999crunch 6 8 -t admin@@@ -o admin_dict.txt5. 防御暴力破解
防爆破的核心是让攻击者的尝试成本远高于收益。
5.1 登录失败次数限制
最简单的防御。连续5次登录失败,锁定账号15分钟或要求输入验证码。
注意:不要返回“用户名不存在”或“密码错误”这种区分信息,统一返回“用户名或密码错误”,防止攻击者枚举用户名。
5.2 验证码(CAPTCHA)
图形验证码、滑块验证、算术验证码都能有效阻挡自动化工具。注意验证码必须有足够的复杂度(比如干扰线、变形字体),且每个请求只能使用一次。2026年已有AI可以轻松破解简单验证码,建议使用服务商的滑块或行为验证。
5.3 双因素认证(2FA)
即使密码被爆破,攻击者没有第二因素(手机验证码、TOTP、硬件密钥)也无法登录。这是目前最可靠的防御手段。
5.4 延迟响应
无论密码是否正确,登录接口都固定延迟2秒返回。攻击者原来每秒能试100次,现在每秒0.5次,效率被压到1/200。
5.5 封禁IP与限流
同一IP短时间内请求登录接口超过阈值(比如每分钟20次),自动封禁该IP 1小时。但攻击者可以用代理池绕过,需要配合其他手段。
5.6 强制使用强密码
注册时要求密码长度≥8位,包含大小写字母、数字、特殊符号。定期检测用户密码是否在公开泄露库中,如果是则强制修改。
5.7 监控与告警
配置登录失败率突增的告警,当某个用户或某IP失败次数异常时,立即触发临时封禁并通知管理员。
6. 靶场实战:搭建一个测试环境
DVWA有Brute Force模块。用Docker启动DVWA:
docker run --rm -p 80:80 vulnerables/web-dvwa登录后进入Brute Force页面,Security Level调到low。这是一个简单的登录框,没有验证码,没有次数限制。
用Hydra爆破:
hydra -l admin -P /usr/share/wordlists/rockyou.txt 127.0.0.1 http-get-form "/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:Username and/or password incorrect"用Burp Intruder:
- 抓取登录POST请求:
/vulnerabilities/brute/ - 参数:
username和password - 加载字典(DVWA默认用户admin, gordonb, 1337等,密码可以试弱密码)
- 根据响应长度判断成功(成功页面有
Welcome字样)
把Security Level调到medium或high,会看到增加了验证码或延迟,爆破难度大幅提升。
7. 常见问题
| 问题 | 原因与解决办法 |
|---|---|
| Hydra报“too many bad passwords” | 目标服务器可能限制了短时间内错误尝试次数。降低线程数(-t 4),增加延迟(-w 2) |
| Burp Intruder跑得极慢 | 字典太大或网络延迟。改用Cluster bomb模式,或者用Turbo Intruder插件多线程 |
| 登录失败但字典密码是正确的 | 可能页面有CSRF Token或隐藏字段。需要用Burp宏先获取Token |
| 验证码怎么绕过? | 低级验证码可以用OCR识别;高级验证码(reCAPTCHA、滑块)几乎无法自动化,只能人工打码服务(如2captcha),但成本较高。防御目的已经达到了 |
| 撞库防御怎么实现? | 要求用户设置唯一密码;使用登录设备识别(新设备登录需要邮件验证);提供泄露密码检测功能 |
8. 总结
暴力破解是最笨的攻击,但也是最有效的——只要你的密码够弱,或者登录接口没有防护,被攻破只是时间问题。
对于攻击者,掌握Hydra和Burp Intruder,配合好的字典,能攻破大量防护薄弱的系统。
对于防御者,记住几条硬规则:登录失败锁账号、加验证码、强制强密码、开启2FA。做到这几条,99%的暴力破解攻击都会转向更容易的目标。
建议学习路径:
- 本地搭DVWA,用Hydra爆破low级别的登录框
- 用Burp Intruder做自定义字典爆破,理解POST参数
- 尝试在medium级别下绕验证码(或者了解为什么绕不过)
- 用cewl和crunch自己生成一本针对“公司名”的字典
- 在自己项目里实现登录失败限制 + 验证码,再回头用Hydra测一下,感受防御效果
别让你的登录接口成为别人字典里的练习题。
相关资源:
- Hydra GitHub:https://github.com/vanhauser-thc/thc-hydra
- SecLists字典库:https://github.com/danielmiessler/SecLists
- rockyou.txt下载:https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
- 在线字典生成:https://weakpass.com/wordlist
- OWASP 暴力破解防御指南:https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks
免责声明
本教程(包括所有文字、代码、工具示例及技术描述)仅供网络安全教育、学术研究及合法的防御测试使用。
-
禁止非法用途:严禁将本教程所述技术用于任何未经授权的系统入侵、数据窃取、账户爆破、服务破坏或其他违反中华人民共和国法律法规及国际公约的行为。使用者须自行确保所有操作均已获得明确授权。
-
使用者独立担责:您理解并同意,因使用本教程导致的任何直接或间接后果(包括但不限于数据丢失、系统损坏、法律纠纷、行政处罚等),均由您个人承担全部责任。教程发布方不承担任何形式的连带或补偿责任。
-
测试环境要求:所有漏洞验证、渗透模拟等操作必须在您拥有合法控制权或已获书面授权的测试环境中进行,严禁在未授权的真实生产系统、公共网络或他人设备上实施。
-
工具与代码风险:本教程引用的第三方工具及代码示例可能存在安全缺陷或法律风险,使用前请自行审计和评估。因使用此类工具导致的任何损失,发布方不承担责任。
-
信息准确性:发布方尽力保证技术描述的准确性,但鉴于网络安全技术快速演变及环境差异,不保证内容在所有场景下均正确无误、无时效滞后或完全适用。
-
法律责任保留:若您利用本教程从事违法活动,发布方将保留向执法机关举报及追究您法律责任的权利。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









