类型
一个请求中可以指定多个匹配器。基本上有7种类型的匹配器:| 匹配器类型 | 匹配部分 |
|---|---|
| status | 部分的整数比较 |
| size | 部分的内容长度 |
| word | 协议的部分 |
| regex | 协议的部分 |
| binary | 协议的部分 |
| dsl | 协议的部分 |
| xpath | 协议的部分 |
| 响应部分 | 描述 | 示例 |
|---|---|---|
| content_length | Content-Length头 | content_length >= 1024 |
| status_code | 响应状态码 | status_code==200 |
| all_headers | 包含所有头的唯一字符串 | len(all_headers) |
| body | 正文字符串 | len(body) |
| header_name | 小写头名称,-转换为_ | len(user_agent) |
| raw | 头+响应 | len(raw) |
条件
单个匹配器中可以指定多个单词和正则表达式,并且可以使用不同的条件如AND和OR进行配置。当未指定条件时,默认使用OR。- AND - 使用AND条件允许匹配匹配器的单词列表中的所有单词。只有当所有单词都匹配时,请求才会被标记为成功。
- OR - 使用OR条件允许匹配匹配器的列表中的单个单词。当匹配器的任何一个单词匹配时,请求将被标记为成功。
匹配部分
还可以为请求匹配响应的多个部分,如果未定义,默认匹配部分是body。
使用AND条件的HTTP响应体匹配器示例:
否定匹配器
所有类型的匹配器也支持否定条件,当您需要排除某些匹配时非常有用。这可以通过在matchers块中添加negative: true来使用。
以下是使用negative条件的示例语法,这将返回响应头中没有PHPSESSID的所有URL。
多个匹配器
在单个模板中可以使用多个匹配器,通过单个请求对多个条件进行指纹识别。 以下是多个匹配器的语法示例。匹配器条件
在使用多个匹配器时,默认条件是在所有匹配器之间遵循OR操作,可以使用AND操作来确保只有当所有匹配器返回true时才返回结果。内部匹配器
在编写多协议或基于flow的模板时,可能会有一种情况,我们需要验证/匹配第一个请求,然后再进行下一个请求,一个很好的例子是CVE-2023-6553
在此模板中,我们首先使用匹配器检查目标是否实际使用了Backup Migration插件,如果为true,则在flow的帮助下继续下一个请求
但这将打印两个结果,每个请求匹配一个,由于我们使用第一个请求匹配器作为继续下一个请求的先决条件,我们可以使用internal: true在匹配器块中将其标记为内部。
全局匹配器
全局匹配器本质上是适用于运行其他模板时接收到的所有HTTP响应的matchers。这使它们对于被动检测、指纹识别、发现错误、WAF检测、识别异常行为,甚至捕获秘密和信息泄漏非常有用。通过将global-matchers设置为true,您可以启用模板自动匹配由其他模板触发的事件,而无需单独配置它们。
- 全局匹配器仅适用于基于HTTP协议的模板。
- 启用全局匹配器时,不会发送模板中定义的请求。
- 此功能不仅限于
matchers;您还可以在全局匹配器模板中定义extractors。
global-matchers设置为true的模板。它在所有HTTP请求中查找特定模式,如非对称私钥或Slack webhook。现在,当您运行此模板以及其他模板时,全局匹配器将自动检查所有HTTP响应中的这些模式。您不必在每个模板中单独设置匹配器即可使其工作。
要运行它,使用如下命令: