密码爆破介绍
密码爆破又叫 暴力猜解 , 简单来说就是将密码逐个尝试,直到找出真正的密码为止,本质上是利用了 穷举法。
穷举法专业点讲是叫 枚举法 , 枚举法的中心思想是逐个考察某类事件的所有可能情况,从而得出一般结论。通常情况下,我们根据已知的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。由于枚举法所需的计算成本太高,因此我们可以利用计算机运算速度快精度高的特点来执行枚举过程。理论上来讲,使用枚举法可以 暴力破解任意一个用户密码, 但实际上枚举法的运算量比较大,解决效率不高。如果枚举的范围太大 ( 一般以两百万次为限制), 在时间上就难以承受了。换句话来说,只要你有足够的时间,你就能破解世界上任意一个账号和密码。

密码爆破使用场景
密码爆破的目标有两种,一种是针对 网站的高权限用户 , 比如网站的管理员账号。

另一种就是 web 应用程序的用户 , 比如 ssh, ftp, mysql 等,这些服务往往存在一个高权限用户用来执行命令的操作,比如 mysql 的 root 账号。这些高权限用户原本是为了给开发人员提供方便,但如果被爆破了密码,后果将会不堪设想。
密码爆破利用思路
- 检查网站是否存在验证码
- 尝试登录,判断网站是否对登录行为有所限制
- 判断网站是否采用了双因素认证,Token 值认证等身份验证手段
- 注册账号,获取网站对密码的限制,比如长度必须是 8 位以上,必须包含字母数字大小写等
- 准备一个有效的字典并根据密码的限制条件优化字典,比如去掉明显不符合要求的密码,提高爆破的效率
- 使用代理工具拦截请求,提供字典开始爆破 ( 或者自己编写脚本进行爆破)
- 如果是后台管理的密码,可以优先尝试 admin/administrator/root 这种使用概率较高的账号,破解过程中注意观察'用户名或密码错误','用户名不存在'等提示
需要注意的是,有些网站的登录界面会提示 用户名不存在 这类提示。

这就意味着开发人员在编写代码时先判断了用户名,用户名匹配后再判断密码,这样一来或许效率会高一些,但逻辑并不严谨。遇到这种情况我们可以先尝试爆破用户名,拿到真实的用户名以后再针对密码进行爆破。
防范密码爆破
密码的复杂性
毋庸置疑,提高密码的复杂性是防范暴力破解的第一道防线,开发人员在设计密码格式的时候一定要采用一些相对复杂的策略,避免出现'123456'这类的弱口令,常见的密码策略有以下几种:
- 密码长度 8 位数以上,8 位数到 16 位之间最合适
- 至少包含一个大写字母 ( A-Z)
- 至少包含一个小写字母 ( a-z)
- 至少包含一个数字 ( 0-9)
- 至少包含一个特殊字符 ( *&^%$#@!)
- 禁止使用手机号码,邮箱等关键'特征'为密码
- 用户名和密码不能有任何联系,比如用户名是 admin,密码是 admin123




