暴力破解
概述
暴力破解是一种针对于密码或身份认证的破译方法,即穷举尝试各种可能,找到突破身份认证的一种攻击方法。
暴力破解是一把双刃剑,一方面能够被恶意者使用,另一方面在计算机安全性方面却非常重要,它用于检查系统、网络或应用程序中使用的弱密码。
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
原理
暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。因为理论上来说,只要字典足够庞大,枚举总是能够成功的!
分类
由于未对登录页面进行相关的人机验证机制,如无验证码、或有验证码但验证码失效以及无登录错误次数限制等,导致攻击者可通过暴力破解获取用户登录账号和密码。口令暴力破解常有如下的分类,我们以pikachu靶场的暴力破解为例,进行讲解
基于表单的暴力破解
对于如下这种表单,无验证码机制且没有对登录次数进行限制,则可以进行暴力破解。
爆破双字段(username和password)
进入靶场我们发现共有三组用户和密码:admin/123456,pikachu/000000,test/abc123。
- 首先,输入用户名和密码,截取数据包
- 发送到intruder(ctrl+i),点击positions,点击clear,选择用户名和密码字段值,点击add标记为爆破字段,因为需要爆破两个字段所以选择攻击类型(attack type)为cluster bomb(如果为单个字段的话就选择sniper)。操作步骤如下
- 之后再选择payloads,添加字典,payload set 1代表第一个字段用户名,然后再添加用户的字典如下📎webuser.txt
- 再选择第二个字段,并添加密码字典📎webpass.txt
- 点击开始攻击,如下
- 查看结果,点击length,length代表HTTP数据响应体的字符长度,如果登陆成功那么页面肯定是不一样的,所以数据长度也是不一样,根据这个可以判断是否登录成功
验证码(服务器生成)绕过(on server)
总所周知,验证码是服务端生成的,能暴力破解的前提是验证码失效(即不刷新)。
输入随便的用户名和密码和正确的验证码,截取数据宝发送到repeated模块,重复发几次包,看是否会显示验证码错误若不会说明验证码失效了,可进行暴力破解。
- 首先我们进入靶场登录用户,密码随便输,输入正确的验证码,抓包放到repeater模块
- 我们当把验证码字段进行删除,显示验证码不能为空,说明后端对这个验证码进行了校验
- 我们把正确的验证码还原,多次发送包,发现页面显示用户名或密码错误,而不是提示验证码错误,由于存在验证码失效的问题,所以可以进行暴力破解。(tips:若其验证码没有失效,则无法进行暴力破解)
- 之后我们将其发送到intruder模块,选择我们要爆破的参数,再添加字典即可
- 点击开始攻击,之后方式与基于表单的暴力破解是一样的,这里我就不加以赘述了。
验证码(前端生成)绕过(on client)
- 输入正确的验证码进行抓包,发现此时再修改为任意的验证码都不会提示验证码错误。可知后端并没有对验证码进行校验,此时客户端进行了校验
- 于是我们查看源码发现这种验证码是在客户端生成的,且直接在客户端进行校验。这种我们直接删除限制的js函数就行,或者先先通过前端校验再暴力破解。
- 通过源码也可以看到,我们每点一次验证码,就会调用 createcode() 生成验证码
修复方案
对登录的账号口令使用js进行强加密后传输
图形验证码
限制错误的登录次数
版权归原作者 百事都可樂. 所有, 如有侵权,请联系我们删除。