zoukankan      html  css  js  c++  java
  • pikachu靶场-暴力破解(验证码、token)

    甲.基于表单的破解

    较为简单,直接BurpSuite爆破。

     

    乙.验证码绕过(on server)

    打开题目,比第一题多了一个验证码验证,很多初学者遇到验证码就会感觉不知所措。其实这题也较为简单,首先正常进行测试。

    点击登录,返回账户或密码错误,并且验证码也更新了。

    我们截取数据包看看

    将数据包发到重发模块,测试多次提交,结果发现返回信息仅提示账户密码错误,验证码并未更新,所以验证码只随页面刷新而更新。在一次请求中多次提交数据,验证码不变,也是直接用BurpSuite爆破。

     

    爆破出一个,看回包

    提示login success,登录成功。

     

    丙.验证码绕过(no client)

    打开题目和第二题不同,验证码不再是图片方式呈现。

    首先查看前端代码。

    <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();

    可以看出该验证码使用的是前段js脚本生成的,常规操作,直接禁用浏览器js脚本支持。

    刷新后试试,这个时候就没有验证码了。尝试后也没提示要我们输入验证码。

    直接爆破,登录成功。

    丁.token防爆破

     

    题目和第一题看起来一样,但进行数据重发的时候会提示token错误。

    抓包后发现请求包参数中多了一个token。

    抓个包看看

    查看第二个包

    查看第三个包

    一共提交了两次,观察数据包中token值关系。

    1---token-a---2  2---token-b---1  1---token-b---2  2---token-c---1

    就是说我提交的token值等于上次服务器回应给我的token值。那么我需要做的就是在爆破时提交上次服务器回给我的token值。

     

    解题方法:

    1.截取数据包,线程数改为1,因为token值是单次传递的。

     

    在下面重定向功能中选择总是(always)。

    2.在GREP-Extract中获取响应包,从中提取参数。选中token值,这个时候工具会自动编辑规则,复制token值备用。点击ok。

    3.选择攻击模块中有效负载,用户和密码按照之前配置,第三个token值选择递归搜索(Recursive grep),然后填入刚刚复制的token值,开始暴破。

     

    这里有一个坑,你在网上看到的大多数情况都是两个参数做Pichfork爆破,但由于本题是三个参数,所以爆破起来会有问题,只有当你的账号密码能够恰好都在各自字典的同一行时才会匹配上。网上我看到的账号密码加token参数做爆破都是作者自己有意添加的正确密码,参考性不强。你要做这题也能做出来,类似这种

    在不考虑有意默认用户名,只做密码和token爆破,以及有意把正确账号密码做匹配的情况下。

    我能想到的方法是账号和密码做笛卡尔乘积模式爆破(最后一种),然后账号密码作为整体和token做Pichfork爆破。

    但,,,,我不会,如果有大佬能教教我,我感激不尽。

  • 相关阅读:
    mysql相关
    java注解@Valid@Validated表单验证
    驼峰参数、下划线["_"]参数,属性互传
    redis,windows设置记录
    Java入门第一季学习总结
    计算属性calc()的运算规则
    swiper实现翻页,页面高度超出可滚动
    git常用命令
    Linux下svn常用命令
    图片高度不够一页,如何覆盖全屏
  • 原文地址:https://www.cnblogs.com/pykiller/p/12612290.html
Copyright © 2011-2022 走看看