-
Notifications
You must be signed in to change notification settings - Fork 151
Query Rule Guide
随着使用 Goby 的表哥越来越多,大家对 Goby 的使用也越来越深入,有很多表哥已经开始使用 Goby 录入自己的 PoC 了!在和这些大表哥交流的时候发现他们对自定义 PoC 中的 Query Rule 了解并不多经常导致自定义的 PoC 无法正常使用。为了不影响大表哥们开心地使用 Goby,也为其他想通过 Goby 自定义 PoC 的表哥做个参考,今天就把 Query Rule 的注意点总结记录下来吧!
Query Rule 其实就是资产的查询规则,我们在 Goby 的资产详情页可以发现是有一个搜索框的。这个搜索框是可以对资产进行查询筛选的。比如,我只想看用了 Tomcat 组件的资产,那么可以使用 app="Apache-Tomcat" 或 product="Apache-Tomcat" 对资产进行筛选(筛选对比截图如下)。
未进行资产筛选的截图如下:
资产筛选后的截图如下:
那么为什么自定义 PoC 的时候需要写这个查询规则呢?这就和 Goby 的漏洞扫描逻辑有关了,Goby 对目标进行某个漏洞扫描的前提是目标被识别了该漏洞 Query Rule 对应的资产。我们还拿 Tomcat 来举例,一般来说,当我们录入了一个 Tomcat 产品的漏洞后,这个漏洞应该只对使用了 Tomcat 组件的 Web 服务才有作用,对其他未使用 Tomcat 产品的目标扫描该漏洞都是无用的网络发包。在 Goby 中控制漏洞只对特定资产进行扫描的方法就是 Query Rule,所以说这个字段填的对不对、精确与否关乎于漏洞的整体质量。知道了 Query Rule 的作用之后,该如何正确的填写它呢?
现在假设我们在录入 ThinkPHP 5.x 版本远程代码执行这个漏洞,那么 Query Rule 该如何填写呢?我们可以先用 Goby 对该目标进行扫描一下,看 Goby 识别了目标的哪些资产。
如图,我们对测试目标进行扫描,发现识别到了 ThinkPHP 资产,这和我们的待录入漏洞对应的资产是一致的,那我们就可以将 app="ThinkPHP" 填入 Query Rule 中。这样就完成啦!当然也会有待录入漏洞对应的资产 Goby 无法识别,这时候就要看第二种方法了。
有时候,我们对测试目标进行扫描会发现 Goby 并没有识别与待录入漏洞对应的资产,那么此时就需要我们去提取目标资产的原始查询规则了。原始查询规则是一个布尔表达式,通过判断协议或者 HTML 内容来确定资产是否符合要求。比如,Apache Druid RCE (CVE-2021-25646) 这个漏洞,我们对测试目标扫描发现资产详情页没有关于 Apache Druid 的标签规则被识别到,那么这时候就需要我们去提取规则了。
对于 Apache Druid,一个简单的查询规则,我们可以通过查看 HTML 源码来提取。查看 HTML 源代码发现 title 是 Apache Druid,那我们就可以通过此信息来提取规则了,title="Apache Druid" 或者 title="Apache" && title="Druid" 都是符合要求的。
更多的规则语法可以通过 Goby 进行查看。
目前最新版本的 Goby 已经支持 Query Rule 的自动补全了,比如要录入 ThinkPHP 框架相关的漏洞,那么在 Query Rule 中输入的时候就会看到相应的补全提示。
但是该补全还有一些问题,比如补全的 app=thinkphp 是不可用的,因为 app 的标签是区分大小写的。
可以换成 product=thinkphp,product 的标签是不区分大小写的。