pikachu 暴力破解

pikachu靶场

环境:phpstudy(MySQL5.7.26+Apache2.4.39)+pikachu靶场

暴力破解

基于表单的暴力破解

  1. 填写账号密码,submit时抓包

image

  1. send to intruder之后设置爆破字典

image

  1. 跑出可以使用的账号和密码,登录成功

    其实上面一张图已经可以看到密码了

    数据包Length与其他不同

image

image

验证码绕过(on server)

  1. 尝试使用之前破解出来的账号密码并且不提交验证码,显示验证码为空,而且在抓包的时候不小心看到了hint

image

image

  1. 显示账号不变,那就继续使用之前的admin/123456,抓包会POST一段形如username=admin&password=123456&vcode=1234&submit=Login的代码

  2. 将上面代码中vcode内容按照验证码内容改写后send,Response中找不到关于验证码的内容,搜索后发现login success

  3. 正常做法应该是再去intruder进行一次爆破

    得出结论是有验证码可以抵御部分爆破,但是验证码需要有时效性,登录不成功需要及时更换(现在正常网站登录不成功都会自动更换)

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

    在跟着老师学长做的渗透测试中,验证码太容易/重复/可以被OCR识别也可以被算成是漏洞

验证码(on client)

看到一个十分简陋的框,直接抓包看response

看到一段前端代码

<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>

用chatgpt给它来一段注释

这段代码实现了一个验证码的功能。它定义了一个全局变量 code,表示验证码的值。然后定义了一个 createCode 函数,用于生成验证码。在这个函数中,定义了一个变量 codeLength,表示验证码的长度。然后定义了一个数组 selectChar,表示所有可能用来组成验证码的字符。

接下来,使用 for 循环,随机选择 selectChar 数组中的字符,并拼接到 code 变量中。最后,将生成的验证码值赋值给 checkCode 元素的 value 属性。

另外还定义了一个 validate 函数,用于验证用户输入的验证码是否正确。如果用户没有输入验证码,则提示用户输入验证码;如果用户输入的验证码不正确,则提示错误并刷新验证码。

最后,在页面加载完毕后,调用 createCode 函数,生成一个新的验证码。

但是验证码完全是前端random出来的,意味着与服务器并没有交互并进行确定,验证码并没有验证作用

image

token防爆破

token了解下,后面搞CSRF会用到....虽然这里并没有什么鸟用.

依旧抓包,POST的内容为username=admin&password=1111&token=5167863aaab5a2ce73894292892&submit=Login

可以看到中间新增了一段token

因为admin账号存在,固定账号为admin,intruder中设置变量为passwordtoken

https://blog.csdn.net/qq_37077262/article/details/103013368

https://blog.csdn.net/Minorko/article/details/126018180

image

使用admin/123456登录成功

posted @ 2022-12-27 16:55  noobwei  阅读(85)  评论(0编辑  收藏  举报