安全能力强化:Fuzztag再升级!

admin 2023年1月1日16:37:11安全文章评论2 views2064字阅读6分52秒阅读模式

安全能力强化:Fuzztag再升级!

背景


前面的一次更新对 Fuzztag 进行了升级,在使用时可以用更简便的写法,而且支持了同步渲染。本篇文章将会从这两方面介绍下更新内容。


Fuzztag优化


使用 Fuzztag 标签时函数要与{{}}成对使用;

如:{{base64dec({{base64enc(admin)}})}}嵌套的多了看起来特别乱,不够优雅。所以本次优化,在实现原本的语法基础上,支持了一些简便写法。

Fuzztag原理

 

Fuzztag 解析时,会将输入数据解析为 Data 节点和 Tag 节点,如图中的红色部分就是 Tag 节点,其它的是 Data 节点

安全能力强化:Fuzztag再升级!

然后将 Tag 节点替换为执行结果(如果一个 Tag 生成了多个结果就做笛卡尔乘积,生成多份数据),再将数据按顺序拼接起来,就是最终的执行结果。知道了原理后,再想下为什么函数要与{{}}成对使用?原因是为了区别 Data 节点和 Tag 节点,遇到{{开始解析 Tag 节点,遇到}}结束解析,{{}}外面都是数据节点。再看下 Tag 节点内,包含函数名和参数,这里参数也是 Data 节点,这里节点开始的标志是遇到(,结束的标志是遇到),一个请求包解析的语法树如图:

安全能力强化:Fuzztag再升级!

重点看下 Tag Node 的解析,这里将参数解析为了 Data2 Node,与普通的 Data Node 区别是这里不能使用(),因为这是 Data2 Node 的边界,所以需要转义使用,例如()

安全能力强化:Fuzztag再升级!

本次优化重点针对 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 明显不是,所以会作为数据节点处理。

安全能力强化:Fuzztag再升级!

再看一些极端情况,如图,第二种情况,已经成功将base64enc1()解析为函数调用,将会作为 Tag Node 执行,但是由于这个函数不存在,对于这种执行时错误,它的根 Tag 将会返回空数据。第三种情况,将 123() 解析为函数时发生错误,因为 123 不能作为 Identifier ,属于明显的语法错误,会直接返回当前根 Tag 的源码。

安全能力强化:Fuzztag再升级!

还有一种特殊情况,Fuzztag 调用无参函数时是可以省略()的,例如{{headerauth}},但是如果这个函数作为参数,即放在 Data2 Node 的位置会直接作为数据处理,这种情况不能省略括号,如图:

安全能力强化:Fuzztag再升级!

嵌套数据和函数 

       

原本的 Data2 Node 变得更智能了,如果是函数调用,会解析为 Tag 节点,否则是 Data2 节点,但当函数和数据一起作为参数时,还是需要使用传统方法区分数据和函数调用。如图是生成admin1到admin3的base64编码的 Tag

安全能力强化:Fuzztag再升级!

因为要将admin和int(1-3)区分开,所以不得不用{{}}。还有另一种情况,如果生成的是1admin到3admin的base64编码,还是可以使用简便写法。原因是解析到)可以作为边界将 Tag 节点和  Data 节点分隔开。

安全能力强化:Fuzztag再升级!

当然,还可以这样用

安全能力强化:Fuzztag再升级!

平行标签优化  

    

{{}}是 Tag Node 的边界,其内部是函数调用,那如果在{{}}和函数调用之间写一些字符会发生什么呢。如图,在标签内,会忽略空白符。可以将{{理解为开启函数调用模式,}}是关闭函数调用模式

安全能力强化:Fuzztag再升级!

作为参数使用也是一样的

安全能力强化:Fuzztag再升级!


同步渲染


多个平行的 Fuzztag 在生成数据时,会做笛卡尔乘积,在做爆破时,类似 Burp Suite 的 Cluster bomb 模式。但如果在爆破用户名密码时,账号和密码是一对一的关系,这种场景的爆破,在 Burp Suite 中 需要使用 Pitchfork 模式。现在 Fuzztag 也支持这种模式了。

实现原理  


原理上就是在每个函数后加一个 Label ,在生成数据时,会将具有相同 Label 的数据记录当前位置并打包,再将他们进行笛卡尔乘积,再将打包的数据恢复到原位置,原理类似下面这个过程,但实际在笛卡尔乘积过程中就已经进行了排序。

安全能力强化:Fuzztag再升级!

安全能力强化:Fuzztag再升级!

方法介绍   


Lebal 命名规则在函数基础上,还允许数字开头,同一层级具有相同 label 的函数生成的数据在组合过程中,他们的索引是同步的,如图

安全能力强化:Fuzztag再升级!

当然也可以嵌套使用,但只有同级标签才会生效

安全能力强化:Fuzztag再升级!


总结


本次更新简化了 Fuzztag 的写法,支持了同步渲染,让 Fuzztag 可以适用于更多的场景。Fuzztag 越来越好用了,师傅们要多多使用啊。


往期推荐


使用 Fuzztag 一爆破反序列化链

Yso-Java Hack 进阶:利用反序列化漏洞打内存马

Yakit实战技巧:用MITM热加载任意修改流量

YakVM:编写栈机虚拟机分离语法编译与运行时

安全基础设施|Yaklang SQL Injection 检测启发式算法

安全能力强化:Fuzztag再升级!

原文始发于微信公众号(Yak Project):安全能力强化:Fuzztag再升级!

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月1日16:37:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  安全能力强化:Fuzztag再升级! http://cn-sec.com/archives/1486992.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: