【必看】Yakit的热加载验证码识别

admin 2024年3月19日16:49:40评论30 views字数 3695阅读12分19秒阅读模式

0x01    前言

老话说的好“工欲善其事,必先利其器”,对于不管是在日常工作、打比赛还是挖SRC,搞安全的师傅们估计都离不开 Burp suite 这个“神器”,可以说开完电脑的下一步就是打开BP也不为过。由于我前一段时间尝试上手有着号称“网络安全单兵作战工具”的 Yakit ,经过一段时间的使用,个人觉得 Yakit 的某些方面其实是已经超越了BP,例如java反序列化Payload可以通过Fuzztag渲染后直接使用等。对于目前的我来说,Yakit已经是逐渐替代BP成为我的主力工具,但是在使用的过程中也有碰到一些小问题,今天就想和师傅们来分享其中的 “如何使用Yakit进行验证码识别爆破”。

在进入主题正文前我想抛出一个问题给师傅们:

“碰到有验证码的登录框你会如何使用Yakit爆破?”

如果是把Yakit当主力工具的师傅,可以带着问题思考一下,然后来看下面的内容。

0x02   过程

估计以BP当主力工具的师傅们对于带图形验证码的登录框爆破,常规操作的话都是使用 captcha-killer-modified 插件 + codereg.py脚本(离线)/ 打码平台(在线)来进行爆破。但是我在使用Yakit的过程中,发现如果碰到了带图形验证码的登录框想要爆破,在Yakit自带的插件商店中,无法搜索出相关的辅助插件。

【必看】Yakit的热加载验证码识别

那这样的话对于这种情况,我偏要说“我就是只想用Yakit去爆破”,这时候该怎么办?不要着急,我们先来分析一下BP使用 captcha-killer-modified 插件是如何去识别验证码的。

这里我们通过 本地搭建环境,使用BP通过 captcha-killer-modified 插件来进行验证码识别爆破演示:

首先我们先把识别处理的codereg.py脚本先运行起来

【必看】Yakit的热加载验证码识别

打开BP在captcha-killer-modified插件中选择ddddocr模板库

【必看】Yakit的热加载验证码识别

可以看到在默认情况下,captcha-killer-modified插件选择ddddocr模板库的验证码识别处理请求的就是我们前面起的识别处理接口。

【必看】Yakit的热加载验证码识别

接着我们抓取一个验证码接口发送至captcha-killer-modified插件并点击“获取”按钮,可以看到成功通过接口获取验证码信息

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

点击“识别”按钮,可以看到最右边显示验证码已经成功被识别处理了

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

接着我们把验证码接口发送至Repeater模块中,通过3次重发测试请求验证码接口,发现每次返回的都是一张不同的图片

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

我们返回captcha-killer-modified插件,通过查看Requst template与Requst raw的识别处理请求

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

至此通过上面使用captcha-killer-modified 插件来进行验证码识别分析,我们已经得知逻辑图如下:

【必看】Yakit的热加载验证码识别

看完逻辑图,我们已经清楚知道了整个流程,那么我们就进入主题,Yakit要如何实现这个流程?这里我们就引用出“热加载”这个功能。什么是热加载?在官方的热加载文档介绍中写着:“在Yakit 的Web Fuzzer中,热加载是一种高级技术,让 Yak 成为 Web Fuzzer 和用户自定义代码中的桥梁,它允许我们编写一段 Yak 函数,在 Web Fuzzer 过程中使用,从而实现自定义 fuzztag 或更多功能”。

既然如此,那么我们通过运用热加载来实现这个流程不就是很简单的事情了吗?这里提前和大家说个小知识点,如果我们需要使用加载来辅助完成这个流程,我们需要使用热加载中的“魔术方法”,为什么呢?在查阅官方文档时,可以看到清楚的写着“beforeRequest 允许发送数据包前再做一次处理”,按照Yakit团队的师傅原话来说就是“通常情况下热加载函数是希望不重复调用的,即一次任务只使用一次,但是为了应对需要重复调用的情况,我们加了beforeRequest 这个魔术方法,这个方法的使用的与其他不同,不使用fuzztag插入调用,声明之后会自己调用用于修改数据包”(谨记:魔术方法是修改数据包的作用的,不再会渲染fuzztag)

【必看】Yakit的热加载验证码识别

那么“beforeRequest 这个魔术方法,这个方法的使用的与其他不同,不使用fuzztag插入调用,声明之后会自己调用用于修改数据包”是什么意思呢?我们打开Yakit,在Web Fuzzer中点开热加载,可以看到正常情况下,正常情况下我们如果需要调用热加载,是需要使用标签调用才会触发,但是对于 beforeRequest 这个特殊的方法来说,是不需要使用标签调用。具体怎么触发调用,请师傅们详细看后面演示的截图。

【必看】Yakit的热加载验证码识别

下图为官方文档的说明:

【必看】Yakit的热加载验证码识别

接下来可以看到其实beforeRequest方法已经预置好了,那么我们只需要把我们的代码写到beforeRequest方法里的作用域内即可使用。

【必看】Yakit的热加载验证码识别

那我们要如何实现呢?首先我们按照前面BP的流程逻辑来规划一下在Yakit中要如何实现,逻辑图如下:

【必看】Yakit的热加载验证码识别

清楚知道要怎么实现后,那么我们就在热加载的beforeRequest方法中编写代码。这里我使用的是Yaklang语言中的HTTP库,身边的师傅都说这个是老库,建议使用POC库,但是对于我来说,作为思路的演示,只要能实现就行了,当然师傅们如有需要,也可以自己查阅官方开发接口文档,使用POC库从新编写。

【必看】Yakit的热加载验证码识别

每次使用按照需求稍微修改验证码接口信息即可,热加载代码如下:

beforeRequest = func(req) {    /*        // 我们可以提供一些基础用法,比如说单纯就是替换一个时间戳~        req = str.ReplaceAll(req, "TIMESTAMP_INT64", sprint(time.Now().Unix()))*/// 定义验证码接口信息    method = "GET"    url = "https://xxxxxx.com/verifyCode"    params = "/"cookie = "PHPSESSID=xxxxxx"// 请求验证码接口    reqOne = http.NewRequest(        method,        url,        http.params(params),        http.cookie(cookie),        http.fakeua(),        http.proxy("http://127.0.0.1:7890")        )~    rspOne = http.Do(reqOne)~    encodeBody = codec.EncodeBase64(rspOne.Body)// 定义识别处理接口信息    methodTow = "POST"    urlTow = "http://127.0.0.1:8888/reg"    paramTow = encodeBody// 识别处理验证码    reqTow = http.NewRequest(        methodTow,        urlTow,        http.postparams(paramTow),        http.fakeua(),        http.header("Authorization", "Basic f0ngauth"),        http.header("Accept-Encoding", "gzip, deflate"),        http.header("Content-Type", "application/x-www-form-urlencoded"),        http.header("Accept-Encoding", "gzip, deflate"),        http.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"))~rspTow = http.Do(reqTow)~    req = str.ReplaceAll(req, "_verify_", string(http.GetAllBody(rspTow)))    return []byte(req)}

前面说过 beforeRequest 这个特殊的方法是不需要使用标签调用的热加载的,那么我们要怎么触发呢?官方文档看一下我们在beforeRequest方法中使用的str.ReplaceAll函数就知道了

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

如果还是有疑问的话,建议多看几遍上面两图与热加载代码,思考一下

接下来通过 本地搭建的环境,使用Yakit通过热加载来进行验证码识别爆破演示:

同样,我们首先把识别处理的codereg.py脚本先运行起来

【必看】Yakit的热加载验证码识别

抓取验证码接口发送至Web Fuzzer

【必看】Yakit的热加载验证码识别

然后我们设置好热加载验证码接口信息

【必看】Yakit的热加载验证码识别

我们抓取一个登录包,尝试登录爆破账号,查看是否验证码已经实现自动识别验证(这里我们先不管类似于防CSRF每次刷新的hash值,主要测试验证码是否自动验证识别成功)

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

【必看】Yakit的热加载验证码识别

经过上面的实验,可以清楚的看到我们已经成功通过热加载来实现验证码识别爆破,如果师傅们想识别一些比较难的验证码,或者想提高识别精准度,可以稍微修改热加载代码使用打码平台,这里就不做推荐。

0x03    结语

其实这篇文章只是一个引喻,热加载是一个很强大的功能;“工欲善其事,必先利其器”,或许你能灵活使用的话,会使你有意想不到的结果~ 最后,可能文笔不好,如有错误,请各位师傅多多指导。

【必看】Yakit的热加载验证码识别

原文始发于微信公众号(知攻善防实验室):【必看】Yakit的热加载验证码识别

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月19日16:49:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【必看】Yakit的热加载验证码识别https://cn-sec.com/archives/2580366.html

发表评论

匿名网友 填写信息