Background
在 HTB:BountyHunter 中,我们发现 Web Fuzzer 在使用中可以 “更强”,我们需要编写 Yak 脚本的事情,如果可以经过某些 Web
Fuzzer 的优化,可以达到同样的效果。
在一个标签中,我们实现{
{base64(xxxx)}}
即可把内容进行 base64 编码,但是经常性,我们在 base64
之后需要过一层urlescape
或者加前后缀,进行其他变换。一般这种情况,我们需要自行编写脚本来实现。
HowTo
众所周知,Fuzz Tag 是 Yakit Web Fuzzer 的灵魂,在实际的工程实践中,我们可能会使用各种各样的 tag 来实现核心功能:
- Fuzz 一个参数的证书范围我们常用
{ {int(1-100)}}
- 为一个参数值增加一个随机字符串,我们使用
{ {randstr(10,10)}}
- 针对某一个位置进行爆破,比如爆破目录等,我们通常使用
{ {x(dictname)}}
但是往往在实战中,需要面对的参数是非常复杂的,上述类似的简单标签只能覆盖百分之六十的情况,那么如何解决后面的问题?
我们尝试了标签组合,把标签分为 “普通标签” / “编码标签”。但是实际上效果并不理想,编码可能会多次叠加,这是非常要命的缺陷,那么我们要一次性解决这个
“多次叠加” 的问题,方法绝对不是剪枝。
就像 Yak 解决 Yaml PoC 的问题,理论上来说要解决这个问题,最好的方案就是 “让标签图灵完备”。
技术核心:热加载 HotPatch
众所周知,在 Yakit MITM 插件中,HotPatch 是一个非常有意思的设定,在劫持过程中,任何用户输入的 Yak 代码均可以随时加载到 MITM
过程中执行。
那么基于这项技术,我们在 Web Fuzzer 执行数据包修复和渲染之前,让用户输入一