zoukankan      html  css  js  c++  java
  • Pikachu-暴力破解--验证码绕过

    验证码:

    • 一般用验证码来进行登录暴力破解;防止机器恶意注册
    • 验证码的认证流程:
    1. 客户端request登陆页面,后台生成验证码:后台使用算法生成图片,并将图片response客户端;同时将算法生成的值全局赋值存到SESSION中。
    2. 校验验证码:客户端将认证信息和验证码一同提交;后台对提交的验证码与SESSION中的进行比较;
    3. 客户端重新刷新页面,再次生成新的验证码:验证码算法中一般包含随机函数,所以每次刷新都会改变。

    不安全的验证码-on client常见问题:

    • 使用前端js来实现验证码;
    • 将验证码在cookie中泄露,容易被获取;
    • 将验证码在前端源代码中泄露,容易被获取。

    不安全的验证码-on server常见问题:

    • 验证码在后台不过期,导致长时间可以被使用;
    • 验证码校验不严格,逻辑出现问题;
    • 验证码设计的太过简单和有规律,容易被猜测。

    验证码绕过(on client):

      1.打开Pikachu中的暴力破解--验证码绕过(on client)

      2.验证是否存在暴力破解的可能。随便输入账号和密码,当我们不输入验证码时,会提醒我们输入验证码;当输入错误的验证码时,会提醒验证码错误。接下来输入正确的验证码,提示用户名或者密码不存在

      3.进行抓包。请求的是POST数据,我们发现多了一个验证码

      4.查看源码,我们发现验证码的生成是在前端中实现的。在前端中用js来做验证码是不安全的,很容易被绕过

      5.分析抓到的数据包。将抓到的数据包发送到bp的Repeater模块,我们对数据进行验证。修改验证码,将验证码随意修改为不存在的或者为空,我呢发现只会提示用户名或密码不存在,并不会提示验证码错误或请输入验证码。所以说这个验证码是通过前端中的js来实现的

      6.我们将数据包发送到Intruder模块并对默认的变量进行清除

       7.我们将账号和密码设置成变量,此时的验证码并没有社么作用,所以不用设置成变量。设置暴力破解方式

      8.设置payloads和options与之前相同,进行暴力破解,我们发现账号是admin密码是123456的长度与其他的长度不相同,并且在response中显示登陆成功

    验证码绕过(on server):

      1.打开Pikachu中的暴力破解--验证码绕过(on server)

      2.确认验证码的有效性。当不输入验证码或者输入验证码错误时,会提示

      3.随便输入账号和密码并输入正确的验证码,进行抓包

      4,将抓到的数据包发送到repeater模块中,修改验证码,看后台是否对验证码进行了验证。提交验证码为空,返回提示如下

      5.输入一个错误的验证码,提示如下。说明后台对验证码进行了验证

      6.接下来验证验证码是否存在不过期的问题。刷新页面,获取新的验证码9vrsyg,不在前台进行登录,我们将新获取到的验证码输入到刚刚抓到数据包中,此时我们输入的是正确的验证码,应该返回用户名和密码不正确,返回结果与我们猜想的一样

      7.更改用户名或者密码的其中一个,正常的应该返回验证码不正确;然而返回的结果却与之前的相同,均为账号或者密码不正确。这说明验证码被重复使用,存在不过期的问题,所以我们就可以进行暴力破解。

      8.接下来进行暴力破解,操作与之前相同。将数据包发送到Intruder模块,选择爆破方式,注意此时的验证码应填写正确的验证码,使用刚刚刷新得到的验证码

       9.设置payloads,进行暴力破解。发现账号为admin密码为123456的长度与其他长度不同。即得到正确的账号和密码。

  • 相关阅读:
    scrum站立会议简介
    四人小组建立与项目选题
    每周工作量及进度统计
    null与对象的复杂关系(typeof null的结果是object的原因)
    CSS外边距合并(塌陷/margin越界)
    CSS负边距margin的应用
    CSS负margin的影响
    清除浮动的方式
    CSS文本阴影实例
    PWA之Service work
  • 原文地址:https://www.cnblogs.com/mxm0117/p/12599668.html
Copyright © 2011-2022 走看看