Yakit 热加载功能—上帝之手
2022-11-23 01:21:38 Author: 利刃信安(查看原文) 阅读量:48 收藏

Yakit 热加载功能—上帝之手


热加载定义

众所周知,Yakit 在进行劫持过程中,任何用户输入的 Yak 代码均可以随时加载到 MITM 过程中执行。基于这项技术,在 Web Fuzzer 执行数据包修复和渲染之前,让用户输入一段 Yak 代码,利用类似 MITM 插件的 “热加载技术”,让 Yak 成为 Web Fuzzer 和用户自定义代码中的桥梁,编写 “函数”,在恰当的时候执行这个回调函数,就可以很好的实现标签核心代码 “图灵完备”。

调用热加载标签

在插件调用时,可以不加参数,通过 {{yak}} 标签告诉引擎这是一个 yak hotpatch 标签,需要配合热加载代码使用。

{{yak(funcname)}}

上述内容,标签如果配合热加载代码的话,可以实现调用代码中名为 funcname 的函数。

当然如果需要接受一个参数,funcname 的参数调用方式如下:

{{yak(funcname|param)}}

通过 |来分割函数名与参数内容。

情景模式

渗透测试过程中,遇到一些数据包,在一个标签中,实现 {{base64(xxxx)}} 即可把内容进行 base64 编码,但是经常性,在 base64 之后需要过一层 urlescape或者加前后缀,进行其他变换。一般这种情况,我们需要自行编写脚本来实现。

渗透测试遇到一个站点,用户名、口令和图形验证码采用 base64编码,然后把得到的字符串除去=的部分进行反转。

------WebKitFormBoundaryGouXJdAIBgciqtxiContent-Disposition: form-data; name="username"
4WatRWY=------WebKitFormBoundaryGouXJdAIBgciqtxiContent-Disposition: form-data; name="password"
4WatRWY=------WebKitFormBoundaryGouXJdAIBgciqtxiContent-Disposition: form-data; name="verifyCode"
AZoVzR==------WebKitFormBoundaryGouXJdAIBgciqtxi--

我们以用户名为例,用户名输入admin,base64编码后是YWRtaW4=,得到的字符串除去=的部分进行反转后得到4WatRWY=

现在开始编写热加载脚本实现上述功能,从而做到暴力破解或者 sql注入测试。

热加载函数创建

func(param: string) (string | []string, error)

实际在创建时,可以通过如下案例直接创建

// 定义只有一个返回值的渲染标签handle = func(param) {    return "rendered" + param}
// 定义一个返回多个渲染结果的标签handle = func(param) {    return [param, "asdfasdfasd" + param, "foo", "bar", "param:"+param]}
// 定义一个返回多个渲染结果的标签(复杂逻辑)handle = func(param) {    list = make([]string)    list = append(list, "param:"+param)    list = append(list, codec.EncodeBase64(param))    return list}

定义一个返回值或者多个文本返回值都会生效,定义多个返回值的话,会为每一个返回值生成数据包并在 Web Fuzzer 中执行发送。

base64

首先,我们以简单的字符串 base64编码作为第一个例子。

标签定义采用关键字yak,选择调用用户代码函数为 base64,测试字符串 admin

{{yak(base64|admin)}}
base64 = func(param) {    return codec.EncodeBase64(param)}

创建一个函数 base64,输入参数 param 后,输出 base64编码后的内容。

base64url

然后,我们以字符串 base64后末尾=字符 url 编码为例。

标签定义采用关键字yak,选择调用用户代码函数为 base64url,测试字符串 admin

{{yak(base64url|admin)}}
base64url = func(param){    return codec.EscapeQueryUrl(codec.EncodeBase64(param))}

base64reverse

最后,我们以字符串 base64后得到的字符串除去=的部分进行反转为例。

标签定义采用关键字yak,选择调用用户代码函数为 base64reverse,测试字符串 admin

{{yak(base64reverse|admin)}}
base64reverse = func(param) {    return x.Reverse(str.TrimRight(codec.EncodeBase64(param), "=")) + str.Repeat("=", str.Count(codec.EncodeBase64(param), "="))}

实战应用

我们以用户名进行爆破猜解演示。

热加载函数

{{yak(base64reverse|{{x(user1)}})}}

以上内容表示,我们存在一个user命名的字典,把字典里面的字符串进行 base64编码后得到的字符串除去=的部分进行反转然后进行暴力猜解。

{{yak(base64reverse|{{x(user)}})}}------WebKitFormBoundaryGouXJdAIBgciqtxiContent-Disposition: form-data; name="password"
4WatRWY=------WebKitFormBoundaryGouXJdAIBgciqtxiContent-Disposition: form-data; name="verifyCode"
AZoVzR==------WebKitFormBoundaryGouXJdAIBgciqtxi--

有没有公司有关于等保测评,密码测评,软件测试,风险评估的项目,可以联系利刃信安,我们有资质,可以接项目!密评仅限北京!其他不限!

温馨提示:

如果你需要投标安服项目+申请安服资质,可报考️CISP(国家注册信息安全人员认证),这个证书在国企央企事业单位和政府机关非常有用!

如果你是银行证券等金融行业,可报考CISA(国际注册信息系统审计师)、CISSP(国际注册信息安全专家)、CISM(国际注册信息安全经理)。

如果你是安全技术支持、技术售前、工程师,可报考 CISSP(国际注册信息安全专家)、CISP(国家注册信息安全人员)。

如果你专注于渗透测试,可报考 CISP-PTE(国家注册渗透测试工程师)。

如果你专注于信息安全管理,可报考 CISSP(国际注册信息安全专家)、ISO27001(信息安全管理体系认证)。

如果你专注于云安全领域,可报考CCSK(云安全认证)。

如果你是一名学生或安全入门级选手,可报考 Security+(安全+认证)。

有兴趣考证的可以联系我,不考的也可以白嫖资料!


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1Mjk3MDY1OA==&mid=2247499115&idx=1&sn=3970cfa952bb8cce42c864cded1d826b&chksm=fbfb4da6cc8cc4b09d603a7bb9786b73b110bd1f2590f5582914655feaa672adb649020a676a#rd
如有侵权请联系:admin#unsafe.sh