yaklang
- 关注
背景
前面的一次更新对 Fuzztag 进行了升级,在使用时可以用更简便的写法,而且支持了同步渲染。
本篇文章将会从这两方面介绍下更新内容。
FuzzTag优化
使用 Fuzztag 标签时函数要与{{}}
成对使用,如:{{base64dec({{base64enc(admin)}})}}
嵌套的多了看起来特别乱,不够优雅。所以本次优化,在实现原本的语法基础上,支持了一些简便写法。
Fuzztag 原理
Fuzztag 解析时,会将输入数据解析为 Data 节点和 Tag 节点,如图中的红色部分就是 Tag 节点,其它的是 Data 节点
然后将 Tag 节点替换为执行结果(如果一个 Tag 生成了多个结果就做笛卡尔乘积,生成多份数据),再将数据按顺序拼接起来,就是最终的执行结果。知道了原理后,再想下为什么函数要与{{}}
成对使用?原因是为了区别 Data 节点和 Tag 节点,遇到{{
开始解析 Tag 节点,遇到}}
结束解析,{{}}
外面都是数据节点。再看下 Tag 节点内,包含函数名和参数,这里参数也是 Data 节点,这里节点开始的标志是遇到(
,结束的标志是遇到)
,一个请求包解析的语法树如图
重点看下 Tag Node 的解析,这里将参数解析为了 Data2 Node,与普通的 Data Node 区别是这里不能使用(
和)
,因为这是 Data2 Node 的边界,所以需要转义使用,例如\(\)
。
本次优化重点针对 Data2 Node 部分,把它变成一个更智能的节点。
嵌套函数
base64enc 函数嵌套 int 函数的传统写法是这样的:{{base64enc({{int(1-5)}})}}
,简化后:{{base64enc(int(1-5))}}
,在原本的基础上省略了int函数外的{{}}
。
简便写法中的int(1-5)
本应解析为 Data2 Node。优化后会尝试解析参数为函数调用,成功后,则生成一个 Tag Node,否则生成 Data2 Node。
嵌套数据
原理和嵌套函数相同,会尝试将 Data2 Node 部分解析为函数调用,这里 admin 明显不是,所以会作为数据节点处理。
再看一些极端情况,如图,第二种情况,已经成功将base64enc1()解析为函数调用,将会作为 Tag Node 执行,但是由于这个函数不存在,对于这种执行时错误,它的根 Tag 将会返回空数据。第三种情况,将 123() 解析为函数时发生错误,因为 123 不能作为 Identifier ,属于明显的语法错误,会直接返回当前根 Tag 的源码。
还有一种特殊情况,Fuzztag 调用无参函数时是可以省略()
的,例如{{headerauth}}
,但是如果这个函数作为参数,即放在 Data2 Node 的位置会直接作为数据处理,这种情况不能省略括号,如图:
嵌套数据和函数
原本的 Data2 Node 变得更智能了,如果是函数调用,会解析为 Tag 节点,否则是 Data2 节点,但当函数和数据一起作为参数时,还是需要使用传统方法区分数据和函数调用。如图是生成admin1到admin3的base64编码的 Tag
因为要将admin和int(1-3)区分开,所以不得不用{{}}
。还有另一种情况,如果生成的是1admin到3admin的base64编码,还是可以使用简便写法。原因是解析到)
可以作为边界将 Tag 节点和 Data 节点分隔开。
当然,还可以这样用
平行标签优化
{{
和}}
是 Tag Node 的边界,其内部是函数调用,那如果在{{}}
和函数调用之间写一些字符会发生什么呢。如图,在标签内,会忽略空白符。可以将{{
理解为开启函数调用模式,}}
是关闭函数调用模式
作为参数使用也是一样的
同步渲染
多个平行的 Fuzztag 在生成数据时,会做笛卡尔乘积,在做爆破时,类似 Burp Suite 的 Cluster bomb 模式。但如果在爆破用户名密码时,账号和密码是一对一的关系,这种场景的爆破,在 Burp Suite 中 需要使用 Pitchfork 模式。现在 Fuzztag 也支持这种模式了。
实现原理
原理上就是在每个函数后加一个 Label ,在生成数据时,会将具有相同 Label 的数据记录当前位置并打包,再将他们进行笛卡尔乘积,再将打包的数据恢复到原位置,原理类似下面这个过程,但实际在笛卡尔乘积过程中就已经进行了排序。
方法介绍
Lebal 命名规则在函数基础上,还允许数字开头,同一层级具有相同 label 的函数生成的数据在组合过程中,他们的索引是同步的,如图
当然也可以嵌套使用,但只有同级标签才会生效
总结
本次更新简化了 Fuzztag 的写法,支持了同步渲染,让 Fuzztag 可以适用于更多的场景。Fuzztag 越来越好用了,师傅们要多多使用啊。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)