众所周知,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编码,然后把得到的字符串除去=
的部分进行反转。
------WebKitFormBoundaryGouXJdAIBgciqtxi
Content-Disposition: form-data; name="username"
4WatRWY=
------WebKitFormBoundaryGouXJdAIBgciqtxi
Content-Disposition: form-data; name="password"
4WatRWY=
------WebKitFormBoundaryGouXJdAIBgciqtxi
Content-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编码作为第一个例子。
标签定义采用关键字yak
,选择调用用户代码函数为 base64,测试字符串 admin
{{yak(base64|admin)}}
base64 = func(param) {
return codec.EncodeBase64(param)
}
创建一个函数 base64,输入参数 param 后,输出 base64编码后的内容。
然后,我们以字符串 base64后末尾=
字符 url 编码为例。
标签定义采用关键字yak
,选择调用用户代码函数为 base64url,测试字符串 admin
{{yak(base64url|admin)}}
base64url = func(param){
return codec.EscapeQueryUrl(codec.EncodeBase64(param))
}
最后,我们以字符串 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)}})}}
------WebKitFormBoundaryGouXJdAIBgciqtxi
Content-Disposition: form-data; name="password"
4WatRWY=
------WebKitFormBoundaryGouXJdAIBgciqtxi
Content-Disposition: form-data; name="verifyCode"
AZoVzR==
------WebKitFormBoundaryGouXJdAIBgciqtxi--
有没有公司有关于等保测评,密码测评,软件测试,风险评估的项目,可以联系利刃信安,我们有资质,可以接项目!密评仅限北京!其他不限!
温馨提示:
如果你需要投标安服项目+申请安服资质,可报考️CISP(国家注册信息安全人员认证),这个证书在国企央企事业单位和政府机关非常有用!
如果你是银行证券等金融行业,可报考CISA(国际注册信息系统审计师)、CISSP(国际注册信息安全专家)、CISM(国际注册信息安全经理)。
如果你是安全技术支持、技术售前、工程师,可报考 CISSP(国际注册信息安全专家)、CISP(国家注册信息安全人员)。
如果你专注于渗透测试,可报考 CISP-PTE(国家注册渗透测试工程师)。
如果你专注于信息安全管理,可报考 CISSP(国际注册信息安全专家)、ISO27001(信息安全管理体系认证)。
如果你专注于云安全领域,可报考CCSK(云安全认证)。
如果你是一名学生或安全入门级选手,可报考 Security+(安全+认证)。
有兴趣考证的可以联系我,不考的也可以白嫖资料!