深夜,一台安全服务器的监控系统突然弹出一条告警:“检测到异常登录尝试,IP来源:国外,账户:admin,状态:失败”。
紧接着是第二条、第三条……每分钟都有上百条失败记录涌入。值守的安全工程师盯着屏幕,心里非常清楚:有人正在尝试进行暴力破解。
他熟练地打开防护策略控制台——这种场面见得太多了,无非是某个攻击者用自动化脚本在“撞库”。但这次,他多看了一眼记录下来的用户名和密码尝试:“admin”,“123456”、“admin123”、“password”……
三分钟后,告警停了。不是因为攻击者放弃了,而是因为他们——猜对了。
登录日志清晰地显示:凌晨3点14分,有人使用“admin/123456”这个组合成功进入了后台系统。第二天,公司数据库泄露的消息便传遍了全网。
这一切的起点,仅仅是一个弱口令,和一台不知疲倦运行的爆破脚本。
一、什么是弱口令?一道形同虚设的“明锁”
弱口令,顾名思义,就是那些过于简单、极易被猜测或破解的密码。你可以把它想象成你家门上用的一把普通挂锁,锁芯结构外露,稍有经验的人用一根铁丝就能捅开,这样的门锁与不锁又有何区别?
那么,常见的弱口令究竟长什么样呢?
根据历年泄露的密码数据库统计,人类最爱使用的密码前十名如下(看看你是否也在用):
- 123456
- password
- 123456789
- 12345
- 12345678
- qwerty
- 1234567
- 111111
- 1234567890
- admin
此外,还有那些自认为“浪漫”的组合,例如“woaini1314”(我爱你一生一世)、“5201314”、“a123456”……这些密码在攻击者眼中,其脆弱程度往往令人发笑,通常会被直接收录进攻击字典的首页。
更可怕的是一种“条件型弱口令”——因为它们与个人信息强相关,一旦个人信息泄露,密码将不堪一击。
例如:
- 姓名拼音缩写 + 生日:
lhh2007
- 手机号后六位
- 英文名 + 特殊数字:
Hugo520
如果你曾用过上述任何一种类型的密码,请立刻去修改。不要等到安全事故发生后才追悔莫及。
二、暴力破解是什么?永不疲倦的“试钥匙机器”
暴力破解,也常被称为“爆破”,其原理简单得令人咋舌:就是拿着一个预先准备好的密码“字典”,向目标系统发起海量登录请求,逐个尝试,直到成功。
你可以想象这样一个场景:你丢了家门钥匙,站在门口,手里拿着一大串相似的钥匙。你只能一把接一把地插入锁孔尝试转动,直到听到“咔哒”一声门开了。
暴力破解就是这个过程的数字化版本,不同之处在于:
- 执行尝试的是自动化脚本,而不是人(因此永远不会感到疲倦)。
- 尝试的对象是系统登录凭证,而非物理钥匙。
- 尝试的速度可以达到每秒数百甚至上千次,远非人力可比。
三种常见的暴力破解方式
| 方式 |
说明 |
例子 |
| 字典攻击 |
使用常见的弱口令列表进行尝试 |
尝试 admin/123456、admin/admin123 等组合 |
| 穷举攻击 |
尝试所有可能的字符组合 |
从 aaa、aab、aac……一直尝试到 zzz |
| 撞库攻击 |
利用其他网站泄露的账号密码,在本网站进行尝试 |
用你在A网站泄露的密码,尝试登录B网站 |
讽刺的是,大部分成功的攻击根本用不上复杂的穷举算法,因为绝大多数人使用的密码,都早已躺在那份“Top 100弱口令列表”里了。
三、一次典型的暴力破解是如何进行的?
注意:以下内容旨在帮助理解攻击原理以加强防御,请务必遵守法律法规,切勿用于非法用途。
假设目标是一个网站后台,其登录地址为:http://example.com/admin/login
第一步:抓取登录请求数据包
使用浏览器正常访问登录页面,输入任意账号密码(例如admin/123456),在点击提交按钮的瞬间,使用 Burp Suite 这类拦截代理工具截获HTTP请求。
通常,拦截到的POST请求数据包格式如下:
POST /admin/login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=admin&password=123456
第二步:标记爆破变量
在Burp Suite的Intruder模块中,将数据包中的password=123456参数值部分标记为“攻击变量”。这相当于告诉工具:“这个位置的值,需要被字典中的内容逐个替换”。
第三步:加载弱口令字典
加载一个包含常见弱口令的字典文件,例如:
123456
password
admin123
12345678
qwerty
...
(此类字典文件在安全测试专用的Kali Linux系统中,位于/usr/share/wordlists目录下,种类繁多。)
第四步:启动攻击并分析结果
点击“Start Attack”,攻击便会自动进行。几秒或几分钟后,攻击完成。通常,通过对比服务器对不同密码尝试的响应数据包长度,可以快速筛选出正确的密码——成功登录的响应页面长度往往与其他失败尝试不同。
针对常见防护措施的绕过思路
如果网站有验证码怎么办?
- 验证码复用漏洞:部分网站设计存在缺陷,验证码在会话期内可重复使用,这形同虚设。
- 验证码自动识别:对于简单的数字或字母图形验证码,可以借助OCR脚本或机器学习模型进行自动识别。
- IP池轮换:如果网站限制了单个IP的尝试频率,攻击者会使用代理IP池,不断切换来源IP以规避限制。
如果密码在传输前被加密了呢?
有些网站会在前端使用JavaScript对密码进行MD5等加密后再传输。但这并不能阻止爆破。攻击者可以采取两种策略:
- 将字典中的所有密码预先加密,生成一个新的“密文字典”进行攻击。
- 使用Burp Suite的插件(如jsEncrypter),直接调用目标网站前端的加密JS代码,实现“实时加密,实时爆破”。
了解这些攻击手法,是构建有效防御的第一步。对于想要深入研究防御技术与攻防实战的朋友,可以参考安全/渗透/逆向领域的专业讨论。
四、如何有效防御?别让自己成为“活靶子”
作为普通用户,应立即采取的行动:
✅ 立刻检查并更新你的密码
- 密码是
123456、password 或 admin 吗? → 立即更改。
- 密码是你的生日、手机号或姓名拼音吗? → 立即更改。
- 你是否在所有网站都使用同一个密码? → 必须使用不同密码!
✅ 采用“强密码”生成策略
一个强密码应至少包含12位字符,并混合以下四类元素:
- 大写字母 (A-Z)
- 小写字母 (a-z)
- 数字 (0-9)
- 特殊符号 (!@#$%^&*)
例如:G7@k9#pL2$qR 这样的密码,其猜测难度比 admin123 高出无数个数量级。
✅ 全面启用账户安全防护
- 开启双因素认证 (2FA/MFA):如短信验证码、认证器App(Google Authenticator)、生物识别等。
- 利用账户登录限制:对于支持“输错密码锁定”功能的账户,务必开启。
- 实施密码分级管理:邮箱、网银、主社交账号等核心账户,必须使用独立且强度最高的密码。
作为网站或系统管理员,应在后端实施的防护措施:
| 防护措施 |
具体说明与最佳实践 |
| 验证码 |
必须确保验证码一次性有效,且校验逻辑在服务端完成,防止前端绕过。 |
| 登录尝试限制 |
对同一IP、同一账号在短时间内的连续失败登录进行临时封禁。 |
| 强制密码复杂度策略 |
在用户注册或修改密码时,强制要求达到一定的长度和字符组合复杂度。 |
| 定期扫描弱口令 |
使用安全工具对系统内所有用户账号进行扫描,发现弱口令后强制用户修改。 |
| 实时日志监控与告警 |
对异地登录、非常规时间登录、频繁失败登录等异常行为建立监控规则,实现实时告警。 |
这些防护策略的有效实施,是保障系统稳定性的基石,通常属于运维 & 测试团队与安全团队协同工作的范畴。
写在最后
回到开头的那个故事。事后复盘发现,那个admin/123456的账号,原来是三个月前测试人员为临时验证功能所创建,之后所有人都忘了将其删除。而攻击者的爆破脚本,仅仅运行了2分17秒,就成功命中了这个密码。
弱口令,堪称网络安全领域最古老、最“低级”,却又始终最致命的安全漏洞之一。它不够酷,也不高深,但它就像房间角落的灰尘,一直存在。
而抵御它的方法,从来都不复杂:使用强密码,开启双重验证,定期更新,永不偷懒。
今日互动(改编自原文):你身边是否遇到过因弱口令导致的安全问题?欢迎在云栈社区的技术安全板块分享你的经历与见解,让我们共同筑起更牢固的防线。
