暴力破解分析与防护-pikachu
Burte Force(暴力破解)概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
下面以pikachu靶场来介绍一下
1.基于表单的暴力破解
直接bp抓包爆破,常见账号admin,直接爆破到密码123456
2.服务端验证码绕过
多了个验证码,还是一样抓包爆破
看起来好像跟之前没什么区别,看一下源码
根据流程看是先判断验证码是否正确,再判断账号密码是否正确。按照这个流程当爆破的时候会在页面上显示验证码输入错误,但是现在显示的是username or password is not exists~,说明这个验证码是一直有效的,这样就完成了验证码的服务器端绕过。
解决方法
防止验证码一直有效,每次验证码验证成功以后销毁$_SESSION['vcode']
3.客户端验证码绕过
继续抓包爆破,发现跟之前也没什么区别,看看代码
发现只用前端js对验证码进行验证,这种前端绕过只要bp抓包后都可以直接将验证码的字段删掉,而且对于请求没有影响。
解决方法
在服务端再进行一次验证码验证
总结
暴力破解主要包括
1.最基本没有验证的
2.只在客户端进行验证
3.在服务端进行验证但代码有漏洞
解决方法
1.设置复杂的密码
2.设置访问次数,例如1小时内密码输错5次锁定账号
3.设置安全的验证码(例如在图片中选择xxx),在客户端和服务端同时进行验证
4.使用双因素认证