基于servier端

  • 1.首先尝试输入错误的用户名,密码,验证码。

返回验证码不正确

  • 2.输入错误的用户名密码,输入正确的验证码。

返回用户名或者密码不正确
8

  • 3.输入错误的用户名密码,不输入验证码

返回验证码不能为空
1.png
然后刷新页面,会生出新的验证码。
可以发现服务器对验证码的有效性做过校验,一切逻辑正常。
但是如果这个验证码在后台长期不过期,或者过期时间较长。足够我们去爆破用户名和密码,那么就会产生漏洞。

1.输入错误的用户名和密码,然后输入正确的验证码。
2.png
然后将包发送到repeater模块中
3.png
注意:如果提示密码错误,请刷新页面。获取新的验证码即可。

然后添加到intruder

设置参数 跑出结果即可。
5.png

client端

不安全的验证码——on client(只在前端处理)绕过
步骤:
1、打开burp suite,打开PHP study,打开Pikachu,点击on client选项
2、输入一次正确的验证码,随意输入账号密码,进行抓包。
001.png
抓包
002.png
选中,右键发送至repeater
4、点击raw,随意改一下验证码,点击“go”,若出现用户名或密码错误,而不是验证码错误,则验证码只在前端处理,将地址发到intruder,直接暴力破解,无需考虑验证码。
003.png
看,这里提示是用户名和密码错误,而不是验证码错误。
也就是说,前端的这个js验证码就是吓唬人的。

<script language="javascript" type="text/javascript">
    var code; //在全局 定义验证码
    function createCode() {
        code = "";
        var codeLength = 5;//验证码的长度
        var checkCode = document.getElementById("checkCode");
        var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的

        for (var i = 0; i < codeLength; i++) {
            var charIndex = Math.floor(Math.random() * 36);
            code += selectChar[charIndex];
        }
        //alert(code);
        if (checkCode) {
            checkCode.className = "code";
            checkCode.value = code;
        }
    }

    function validate() {
        var inputCode = document.querySelector('#bf_client .vcode').value;
        if (inputCode.length <= 0) {
            alert("请输入验证码!");
            return false;
        } else if (inputCode != code) {
            alert("验证码输入错误!");
            createCode();//刷新验证码
            return false;
        }
        else {
            return true;
        }
    }


    createCode();
</script>

接着,我们连着上述步骤进行暴力破解即可!
004.png

Last modification:April 25th, 2019 at 04:09 pm
正在沿街乞讨中……