暴力破解概述
-
什么是暴力破解?
通过下面这些词来了解一下什么是暴力破解:
连续性尝试+字典+自动化
-
字典
一个有效的字典,可以大大的提高暴力破解的效率
○ 常用的账号密码(弱口令),比如常用用户名/密码TOP500等。
○ 互联网上被脱库后账号密码(社工库),比如CSDN当年泄露的约600w用户信息。
○ 使用指定的字符使用工具按照指定的规则进行排列组合算法生成的密码。
-
如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施。则称该网站存在暴力破解漏洞。
○ 是否要求用户设置了复杂的密码;
○ 是否每次认证都使用安全的验证码;
○ 是否对尝试登录的行为进行判断和限制;
○ 是否在必要订单情况下采用了双因素认证;等等
存在暴力破解漏洞的网站可能会遭受暴力破解,但成功的可能性并不是100%!所以有些网站即虽然存在暴力破解漏洞,但其管理员可能会忽略它的危害。
暴力破解漏洞测试流程
-
确认登录接口的脆弱性
确认目标是否存在暴力破解的漏洞。(确认被暴力破解的“可能性”)
比如:尝试登录--抓包--观察验证元素和response信息,判断是否存在被暴力破解的可能。
-
对字典进行优化
根据实际的情况对字典进行优化,提高爆破过程的效率。
-
工具自动化操作
配置自动化工具(比如线程、超时时间、重试次数等),进行自动化操作。
○ 字典优化技巧
技巧一:
根据注册提示信息进行优化
对目标站点进行注册,搞清楚账号密码的一些限制,比如目标站点要求密码必须是6位以上,字母数字组合,则可以按照此优化字典,比如去掉不符合要求的密码。
技巧二:
如果爆破的是管理后台,往往这种系统的管理员是admin/administrator/root的几率比较高,可以使用这三个账号+随便一个密码,尝试登录,观看返回的结果,确定用户名。
比如:
输入xxx/yyyf返回 “用户名或密码错误”;
输入admin/yyy返回 “密码错误”,则基本可以确定用户名是admin;
因此可以只对密码进行爆破即可,提高效率。
验证码
搞清楚验证码的认证流程
客户端request登录页面,后台生成验证码:
-
后台使用算法生成图片,并将图片response给客户端;
-
同时将算法生成的值全局赋值存到session中;
检验验证码:
-
客户端将认证信息和验证码一同提交;
-
后台对提交的验证码与session里面的进行比较;
客户端重新刷新页面,再次生成新的验证码:
-
验证码算法中一般包含随机函数,所以每次刷新都会改变;
前端不安全的验证码
使用前端js实现验证码(纸老虎) 将验证码在cookie中泄露,容易被获取 将验证码在前端源代码中泄露,容易被获取
防暴力破解的措施总结
设计安全的验证码(安全的流程+复杂而又可用的图形); 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时; 必要的情况下,使用双因素认证;
token对防暴力破解的意义
一般的做法:
-
将token以“type=‘hidden’ ”的形式输出在表单中;
-
在提交认证的时候一起提交,并在后台对其进行校验; 但是,由于其token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。一般token在防范CSRF上会有比较好的功效。