大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
今天更新的是:
- P1 PikaChu_暴力破解
- 往期检索:程序设计学习笔记——目录
创建时间:2021年3月16日
软件: MindMaster Pro 、Burp Suite Pro 、火狐浏览器
P1 PikaChu_暴力破解
前言:
- Burte Force(暴力破解)概述“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
- 理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。
- 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。
这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
…等等。
一、基于表单的暴力破解
- 首先启动 Burp Suite 随便输入个用户名密码并观察回显情况,一边抓取数据包。
- 把下图这个带username和password参数的报文send to intruder
- 由于position设置了两个,Attack Type选了Cluster bomb,因此,需要两个字典,payload效果是两个字典条目的组合,数量是两个字典条目数的乘积。
- 按顺序,第一个字典像下图这样选simple list并把用户名字典load进来
- 第二个字典像下图这样选simple list并把密码字典load进来
- 按start attack开始爆破,完成后结果按Length排序,果然是那三个用户名密码(排序的前两个,Length和其他都不一样的)。
二、验证码绕过(on server)
- 首先观察一下,用户名和密码输入错误值,当验证码是错误值时,返回结果如下,提示验证码错误。
- 用户名和密码输入错误值,当验证码是正确值时,返回结果如下,提示用户名或密码不存在、并且每次提交都会自动刷新验证码
- 那有没有可能,我只要不在网页上点Login,不刷新网页,网页当前显示的验证码就一直有效呢?来试试~ 把刚刚试的随便一个包send to repeater
- 还是这个验证码,把密码改一下,send,发现response中提示的还是用户名或密码不存在,说明验证码还是对的
- 这就说明之前的猜想是正确的,只要网页没刷新,验证码在burp suite中可以多次使用
- 直接从repeater中把上图的请求包send to intruder,和上一关一样配置intruder
- 密码登录成功的情况:
- 密码登录失败的情况:
三、验证码绕过(on client)
- 还是先观察、用户名和密码输入错误值,当验证码是正确值时,返回结果如下,提示用户名或密码不存在。
- 用户名和密码输入错误值,当验证码是错误值时,有弹框提示验证码错误,之前对用户名或密码的提示也没有清除
- 那根据上面两张图,特别是验证码错误时有弹框这点,非常怀疑用户名和密码是在后端验证的,但验证码是在前端验证的。右键 查看网页源代码,发现果然前端有检验验证码的js脚本
- 到目前为止一切就清楚啦,既然是前端检测,那直接用burpsuite发请求报文绕过前端就可以了、把burpsuite的proxy模块抓到的这个报文send to intruder
- 跟之前配置的intruder 一样 、爆破得到结果
四、token防爆破
- 首先还是观察~这关没有验证码了,用户名或者密码输错会提示用户名或密码不存在
- 那既然和token有关,我们用不一样的值login两次看看burpsuite抓到的报文有啥区别?
- 把proxy模块抓到的两次登录的报文send to comparer对比一下,确实两次的token不一样
- 那试一下把request中的token值改为response中的token值,再次send,返回了提示用户名或密码不存在,并且返回了下一次的token值
- 根据以上结果,下一次request需要携带的token就是上一次response中html代码中的隐藏字段值,也就是说request中的token是可以从上一个response中提取的
- 那么还是可以暴力破解,只不过配置稍微复杂一点:
- 首先position除了username和password再增加token,此外要注意Attack type选Pitchfork(payload一一对应,数量为最少的payload的数量)。.这里为啥要选Pitchfork而不能选Cluster bomb,因为Cluster bomb是三组payload排列组合,一个token用好几次显然不行)
- 由于前面使用的用户名和密码payload列表都是适用于Cluster bomb的,而Pitchfork对payload的要求可能更高一些(需要提前整理好对应关系),所以我这里暗中把用户名和密码payload列表改了一下。
- 接着第一和第二个payload按照前几关那样设置,第三个payload如下方法设置
- 小框框勾选上,然后点add,弹出来的窗口要是下面啥也没有就点一下Refetch response,然后找到response中的token,双击value后面的值,上面define start and end的地方就会自动生成正则表达式啦,然后点OK就行。
- 确认上面这个设置之前我觉得保险起见应该在网页源代码里面观察一下有多少符合正则表达式的位置从下图来看就这一个地方符合,那就OK了
- 按start attack开始爆破,,完成后结果按Length排序。
五、一点点思考
1. 暴力破解漏洞的验证码绕过,从两个层面来说:
- 第一个层面从客户端来说:
- 验证码在前端通过JavaScript实现:可以通过抓包重放绕过前端提交,也可以直接禁用js脚本
- 验证码在客户端上:在前端源码中输出,容易被获取
- 在cookie中输入验证码:容易被获取,比如burp抓包等
- 第二个层面从服务端来说:
- 验证码不过期:抓包获取验证码,由于验证码过期机制问题,验证码可以复用,可以暴力破解登录信息
- 验证码过于简单,容易被猜测,比如有的网站是4位数的验证码。
2. 暴力破解漏洞的危害
- 破解成功后即可获取合法用户的权限,从而能够查看用户的敏感信息,还有可以进行钓鱼等操作
- 甚至可以破解管理员的密码从而能够拿到管理员的权限,通过查找网站是否还有其它危害较大的漏洞,进而控制整个站点
- 批量获取用户账号密码,对网站以及用户造成较大威胁,进入网站后,有多种攻击手法,具体问题具体分析
- 可以重置或者修改用户的账号密码等信息
3. 暴力破解漏洞的修复以及防范方法
- 使用验证码进行验证登陆,且验证码机制不能太简单。
- 使用 tokens生成 form_hash,然后验证。
- 使用随机数时,要确保用户无法获取随机数生成算法
- 身份验证需要用户凭短信、邮件接受验证码时,需要对验证次数做限制
- .输入错误锁定的限制,比如连续输入5次错误,锁定账号或者锁定IP地址
- 用户名密码,密文传输(暴力破解是绕过前端进行post重放,因此提交的是字典里面的直接账号密码,而无效)
- 使用双因素认证:比如账号密码+证书
各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。
每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
把握现在 ,展望未来 ,加油 !
由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !