Auto Generate Syntax Docs + JSONSchema [Wed Mar 13 22:02:48 UTC 2024] 🤖

dev
GitHub Action 2024-03-13 22:02:48 +00:00
parent 5d0b82c6a1
commit f6d0b1cd95
3 changed files with 830 additions and 88 deletions

View File

@ -1611,6 +1611,32 @@ DisablePathAutomerge disables merging target url path with raw request path
<hr /> <hr />
<div class="dd">
<code>filters</code> <i>[]<a href="#matchersmatcher">matchers.Matcher</a></i>
</div>
<div class="dt">
Filter is matcher-like field to check if fuzzing should be performed on this request or not
</div>
<hr />
<div class="dd">
<code>filters-condition</code> <i>string</i>
</div>
<div class="dt">
Filter condition is the condition to apply on the filter (AND/OR). Default is OR
</div>
<hr />
@ -1885,31 +1911,52 @@ values:
<div class="dd"> <div class="dd">
<code>fuzz</code> <i>[]string</i> <code>fuzz</code> <i><a href="#sliceormapslice">SliceOrMapSlice</a></i>
</div> </div>
<div class="dt"> <div class="dt">
Fuzz is the list of payloads to perform substitutions with. description: |
Fuzz is the list of payloads to perform substitutions with.
examples:
- name: Examples of fuzz
Examples: value: >
[]string{"{{ssrf}}", "{{interactsh-url}}", "example-value"}
or
```yaml x-header: 1
# Examples of fuzz x-header: 2
fuzz:
- '{{ssrf}}'
- '{{interactsh-url}}'
- example-value
```
</div> </div>
<hr /> <hr />
<div class="dd">
<code>replace-regex</code> <i>string</i>
</div>
<div class="dt">
replace-regex is regex for regex-replace rule type
it is only required for replace-regex rule type
</div>
<hr />
## SliceOrMapSlice
Appears in:
- <code><a href="#fuzzrule">fuzz.Rule</a>.fuzz</code>
@ -1928,6 +1975,459 @@ Appears in:
## matchers.Matcher
Matcher is used to match a part in the output from a protocol.
Appears in:
- <code><a href="#httprequest">http.Request</a>.filters</code>
<hr />
<div class="dd">
<code>type</code> <i><a href="#matchertypeholder">MatcherTypeHolder</a></i>
</div>
<div class="dt">
Type is the type of the matcher.
</div>
<hr />
<div class="dd">
<code>condition</code> <i>string</i>
</div>
<div class="dt">
Condition is the optional condition between two matcher variables. By default,
the condition is assumed to be OR.
Valid values:
- <code>and</code>
- <code>or</code>
</div>
<hr />
<div class="dd">
<code>part</code> <i>string</i>
</div>
<div class="dt">
Part is the part of the request response to match data from.
Each protocol exposes a lot of different parts which are well
documented in docs for each request type.
Examples:
```yaml
part: body
```
```yaml
part: raw
```
</div>
<hr />
<div class="dd">
<code>negative</code> <i>bool</i>
</div>
<div class="dt">
Negative specifies if the match should be reversed
It will only match if the condition is not true.
</div>
<hr />
<div class="dd">
<code>name</code> <i>string</i>
</div>
<div class="dt">
Name of the matcher. Name should be lowercase and must not contain
spaces or underscores (_).
Examples:
```yaml
name: cookie-matcher
```
</div>
<hr />
<div class="dd">
<code>status</code> <i>[]int</i>
</div>
<div class="dt">
Status are the acceptable status codes for the response.
Examples:
```yaml
status:
- 200
- 302
```
</div>
<hr />
<div class="dd">
<code>size</code> <i>[]int</i>
</div>
<div class="dt">
Size is the acceptable size for the response
Examples:
```yaml
size:
- 3029
- 2042
```
</div>
<hr />
<div class="dd">
<code>words</code> <i>[]string</i>
</div>
<div class="dt">
Words contains word patterns required to be present in the response part.
Examples:
```yaml
# Match for Outlook mail protection domain
words:
- mail.protection.outlook.com
```
```yaml
# Match for application/json in response headers
words:
- application/json
```
</div>
<hr />
<div class="dd">
<code>regex</code> <i>[]string</i>
</div>
<div class="dt">
Regex contains Regular Expression patterns required to be present in the response part.
Examples:
```yaml
# Match for Linkerd Service via Regex
regex:
- (?mi)^Via\\s*?:.*?linkerd.*$
```
```yaml
# Match for Open Redirect via Location header
regex:
- (?m)^(?:Location\\s*?:\\s*?)(?:https?://|//)?(?:[a-zA-Z0-9\\-_\\.@]*)example\\.com.*$
```
</div>
<hr />
<div class="dd">
<code>binary</code> <i>[]string</i>
</div>
<div class="dt">
Binary are the binary patterns required to be present in the response part.
Examples:
```yaml
# Match for Springboot Heapdump Actuator "JAVA PROFILE", "HPROF", "Gunzip magic byte"
binary:
- 4a4156412050524f46494c45
- 4850524f46
- 1f8b080000000000
```
```yaml
# Match for 7zip files
binary:
- 377ABCAF271C
```
</div>
<hr />
<div class="dd">
<code>dsl</code> <i>[]string</i>
</div>
<div class="dt">
DSL are the dsl expressions that will be evaluated as part of nuclei matching rules.
A list of these helper functions are available [here](https://nuclei.projectdiscovery.io/templating-guide/helper-functions/).
Examples:
```yaml
# DSL Matcher for package.json file
dsl:
- contains(body, 'packages') && contains(tolower(all_headers), 'application/octet-stream') && status_code == 200
```
```yaml
# DSL Matcher for missing strict transport security header
dsl:
- '!contains(tolower(all_headers), ''''strict-transport-security'''')'
```
</div>
<hr />
<div class="dd">
<code>xpath</code> <i>[]string</i>
</div>
<div class="dt">
XPath are the xpath queries expressions that will be evaluated against the response part.
Examples:
```yaml
# XPath Matcher to check a title
xpath:
- /html/head/title[contains(text(), 'How to Find XPath')]
```
```yaml
# XPath Matcher for finding links with target="_blank"
xpath:
- //a[@target="_blank"]
```
</div>
<hr />
<div class="dd">
<code>encoding</code> <i>string</i>
</div>
<div class="dt">
Encoding specifies the encoding for the words field if any.
Valid values:
- <code>hex</code>
</div>
<hr />
<div class="dd">
<code>case-insensitive</code> <i>bool</i>
</div>
<div class="dt">
CaseInsensitive enables case-insensitive matches. Default is false.
Valid values:
- <code>false</code>
- <code>true</code>
</div>
<hr />
<div class="dd">
<code>match-all</code> <i>bool</i>
</div>
<div class="dt">
MatchAll enables matching for all matcher values. Default is false.
Valid values:
- <code>false</code>
- <code>true</code>
</div>
<hr />
<div class="dd">
<code>internal</code> <i>bool</i>
</div>
<div class="dt">
description: |
Internal when true hides the matcher from output. Default is false.
It is meant to be used in multiprotocol / flow templates to create internal matcher condition without printing it in output.
or other similar use cases.
values:
- false
- true
</div>
<hr />
## MatcherTypeHolder
MatcherTypeHolder is used to hold internal type of the matcher
Appears in:
- <code><a href="#matchersmatcher">matchers.Matcher</a>.type</code>
<hr />
<div class="dd">
<code></code> <i>MatcherType</i>
</div>
<div class="dt">
Enum Values:
- <code>word</code>
- <code>regex</code>
- <code>binary</code>
- <code>status</code>
- <code>size</code>
- <code>dsl</code>
- <code>xpath</code>
</div>
<hr />
## dns.Request ## dns.Request
Request contains a DNS protocol request to be made from a template Request contains a DNS protocol request to be made from a template

View File

@ -2,6 +2,101 @@
"$schema": "http://json-schema.org/draft-04/schema#", "$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/templates.Template", "$ref": "#/definitions/templates.Template",
"definitions": { "definitions": {
"fuzz.Rule": {
"properties": {
"type": {
"enum": [
"replace",
"prefix",
"postfix",
"infix",
"replace-regex"
],
"type": "string",
"title": "type of rule",
"description": "Type of fuzzing rule to perform"
},
"part": {
"enum": [
"query",
"header",
"path",
"body",
"cookie",
"request"
],
"type": "string",
"title": "part of rule",
"description": "Part of request rule to fuzz"
},
"mode": {
"enum": [
"single",
"multiple"
],
"type": "string",
"title": "mode of rule",
"description": "Mode of request rule to fuzz"
},
"keys": {
"items": {
"type": "string"
},
"type": "array",
"title": "keys of parameters to fuzz",
"description": "Keys of parameters to fuzz"
},
"keys-regex": {
"items": {
"type": "string"
},
"type": "array",
"title": "keys regex to fuzz",
"description": "Regex of parameter keys to fuzz"
},
"values": {
"items": {
"type": "string"
},
"type": "array",
"title": "values regex to fuzz",
"description": "Regex of parameter values to fuzz"
},
"fuzz": {
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/fuzz.SliceOrMapSlice",
"title": "payloads of fuzz rule",
"description": "Payloads to perform fuzzing substitutions with"
},
"replace-regex": {
"type": "string",
"title": "replace regex of rule",
"description": "Regex for regex-replace rule type"
}
},
"additionalProperties": false,
"type": "object"
},
"fuzz.SliceOrMapSlice": {
"required": [
"Value",
"KV"
],
"properties": {
"Value": {
"items": {
"type": "string"
},
"type": "array"
},
"KV": {
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/github.com/projectdiscovery/utils/maps.OrderedMap[string,string]"
}
},
"additionalProperties": false,
"type": "object"
},
"model.Classification": { "model.Classification": {
"properties": { "properties": {
"cve-id": { "cve-id": {
@ -456,72 +551,6 @@
"additionalProperties": false, "additionalProperties": false,
"type": "object" "type": "object"
}, },
"fuzz.Rule": {
"properties": {
"type": {
"enum": [
"replace",
"prefix",
"postfix",
"infix"
],
"type": "string",
"title": "type of rule",
"description": "Type of fuzzing rule to perform"
},
"part": {
"enum": [
"query"
],
"type": "string",
"title": "part of rule",
"description": "Part of request rule to fuzz"
},
"mode": {
"enum": [
"single",
"multiple"
],
"type": "string",
"title": "mode of rule",
"description": "Mode of request rule to fuzz"
},
"keys": {
"items": {
"type": "string"
},
"type": "array",
"title": "keys of parameters to fuzz",
"description": "Keys of parameters to fuzz"
},
"keys-regex": {
"items": {
"type": "string"
},
"type": "array",
"title": "keys regex to fuzz",
"description": "Regex of parameter keys to fuzz"
},
"values": {
"items": {
"type": "string"
},
"type": "array",
"title": "values regex to fuzz",
"description": "Regex of parameter values to fuzz"
},
"fuzz": {
"items": {
"type": "string"
},
"type": "array",
"title": "payloads of fuzz rule",
"description": "Payloads to perform fuzzing substitutions with"
}
},
"additionalProperties": false,
"type": "object"
},
"generators.AttackTypeHolder": { "generators.AttackTypeHolder": {
"enum": [ "enum": [
"batteringram", "batteringram",
@ -1126,6 +1155,23 @@
"type": "boolean", "type": "boolean",
"title": "disable auto merging of path", "title": "disable auto merging of path",
"description": "Disable merging target url path with raw request path" "description": "Disable merging target url path with raw request path"
},
"filters": {
"items": {
"$ref": "#/definitions/matchers.Matcher"
},
"type": "array",
"title": "filter for fuzzing",
"description": "Filter is matcher-like field to check if fuzzing should be performed on this request or not"
},
"filters-condition": {
"enum": [
"and",
"or"
],
"type": "string",
"title": "condition between the filters",
"description": "Conditions between the filters"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
@ -1835,6 +1881,11 @@
}, },
"additionalProperties": false, "additionalProperties": false,
"type": "object" "type": "object"
},
"github.com/projectdiscovery/utils/maps.OrderedMap[string,string]": {
"properties": {},
"additionalProperties": false,
"type": "object"
} }
} }
} }

View File

@ -19,7 +19,10 @@ var (
GENERATORSAttackTypeHolderDoc encoder.Doc GENERATORSAttackTypeHolderDoc encoder.Doc
HTTPMethodTypeHolderDoc encoder.Doc HTTPMethodTypeHolderDoc encoder.Doc
FUZZRuleDoc encoder.Doc FUZZRuleDoc encoder.Doc
SliceOrMapSliceDoc encoder.Doc
SignatureTypeHolderDoc encoder.Doc SignatureTypeHolderDoc encoder.Doc
MATCHERSMatcherDoc encoder.Doc
MatcherTypeHolderDoc encoder.Doc
DNSRequestDoc encoder.Doc DNSRequestDoc encoder.Doc
DNSRequestTypeHolderDoc encoder.Doc DNSRequestTypeHolderDoc encoder.Doc
FILERequestDoc encoder.Doc FILERequestDoc encoder.Doc
@ -456,7 +459,7 @@ func init() {
Value: "HTTP response headers in name:value format", Value: "HTTP response headers in name:value format",
}, },
} }
HTTPRequestDoc.Fields = make([]encoder.Doc, 33) HTTPRequestDoc.Fields = make([]encoder.Doc, 35)
HTTPRequestDoc.Fields[0].Name = "path" HTTPRequestDoc.Fields[0].Name = "path"
HTTPRequestDoc.Fields[0].Type = "[]string" HTTPRequestDoc.Fields[0].Type = "[]string"
HTTPRequestDoc.Fields[0].Note = "" HTTPRequestDoc.Fields[0].Note = ""
@ -650,6 +653,16 @@ func init() {
HTTPRequestDoc.Fields[32].Note = "" HTTPRequestDoc.Fields[32].Note = ""
HTTPRequestDoc.Fields[32].Description = "DisablePathAutomerge disables merging target url path with raw request path" HTTPRequestDoc.Fields[32].Description = "DisablePathAutomerge disables merging target url path with raw request path"
HTTPRequestDoc.Fields[32].Comments[encoder.LineComment] = "DisablePathAutomerge disables merging target url path with raw request path" HTTPRequestDoc.Fields[32].Comments[encoder.LineComment] = "DisablePathAutomerge disables merging target url path with raw request path"
HTTPRequestDoc.Fields[33].Name = "filters"
HTTPRequestDoc.Fields[33].Type = "[]matchers.Matcher"
HTTPRequestDoc.Fields[33].Note = ""
HTTPRequestDoc.Fields[33].Description = "Filter is matcher-like field to check if fuzzing should be performed on this request or not"
HTTPRequestDoc.Fields[33].Comments[encoder.LineComment] = "Filter is matcher-like field to check if fuzzing should be performed on this request or not"
HTTPRequestDoc.Fields[34].Name = "filters-condition"
HTTPRequestDoc.Fields[34].Type = "string"
HTTPRequestDoc.Fields[34].Note = ""
HTTPRequestDoc.Fields[34].Description = "Filter condition is the condition to apply on the filter (AND/OR). Default is OR"
HTTPRequestDoc.Fields[34].Comments[encoder.LineComment] = "Filter condition is the condition to apply on the filter (AND/OR). Default is OR"
GENERATORSAttackTypeHolderDoc.Type = "generators.AttackTypeHolder" GENERATORSAttackTypeHolderDoc.Type = "generators.AttackTypeHolder"
GENERATORSAttackTypeHolderDoc.Comments[encoder.LineComment] = " AttackTypeHolder is used to hold internal type of the protocol" GENERATORSAttackTypeHolderDoc.Comments[encoder.LineComment] = " AttackTypeHolder is used to hold internal type of the protocol"
@ -734,7 +747,7 @@ func init() {
FieldName: "fuzzing", FieldName: "fuzzing",
}, },
} }
FUZZRuleDoc.Fields = make([]encoder.Doc, 7) FUZZRuleDoc.Fields = make([]encoder.Doc, 8)
FUZZRuleDoc.Fields[0].Name = "type" FUZZRuleDoc.Fields[0].Name = "type"
FUZZRuleDoc.Fields[0].Type = "string" FUZZRuleDoc.Fields[0].Type = "string"
FUZZRuleDoc.Fields[0].Note = "" FUZZRuleDoc.Fields[0].Note = ""
@ -785,12 +798,26 @@ func init() {
FUZZRuleDoc.Fields[5].AddExample("Examples of value regex", []string{"https?://.*"}) FUZZRuleDoc.Fields[5].AddExample("Examples of value regex", []string{"https?://.*"})
FUZZRuleDoc.Fields[6].Name = "fuzz" FUZZRuleDoc.Fields[6].Name = "fuzz"
FUZZRuleDoc.Fields[6].Type = "[]string" FUZZRuleDoc.Fields[6].Type = "SliceOrMapSlice"
FUZZRuleDoc.Fields[6].Note = "" FUZZRuleDoc.Fields[6].Note = ""
FUZZRuleDoc.Fields[6].Description = "Fuzz is the list of payloads to perform substitutions with." FUZZRuleDoc.Fields[6].Description = "description: |\n Fuzz is the list of payloads to perform substitutions with.\n examples:\n - name: Examples of fuzz\n value: >\n []string{\"{{ssrf}}\", \"{{interactsh-url}}\", \"example-value\"}\n or\n x-header: 1\n x-header: 2"
FUZZRuleDoc.Fields[6].Comments[encoder.LineComment] = "Fuzz is the list of payloads to perform substitutions with." FUZZRuleDoc.Fields[6].Comments[encoder.LineComment] = " description: |"
FUZZRuleDoc.Fields[7].Name = "replace-regex"
FUZZRuleDoc.Fields[7].Type = "string"
FUZZRuleDoc.Fields[7].Note = ""
FUZZRuleDoc.Fields[7].Description = "replace-regex is regex for regex-replace rule type\nit is only required for replace-regex rule type"
FUZZRuleDoc.Fields[7].Comments[encoder.LineComment] = "replace-regex is regex for regex-replace rule type"
FUZZRuleDoc.Fields[6].AddExample("Examples of fuzz", []string{"{{ssrf}}", "{{interactsh-url}}", "example-value"}) SliceOrMapSliceDoc.Type = "SliceOrMapSlice"
SliceOrMapSliceDoc.Comments[encoder.LineComment] = ""
SliceOrMapSliceDoc.Description = ""
SliceOrMapSliceDoc.AppearsIn = []encoder.Appearance{
{
TypeName: "fuzz.Rule",
FieldName: "fuzz",
},
}
SliceOrMapSliceDoc.Fields = make([]encoder.Doc, 0)
SignatureTypeHolderDoc.Type = "SignatureTypeHolder" SignatureTypeHolderDoc.Type = "SignatureTypeHolder"
SignatureTypeHolderDoc.Comments[encoder.LineComment] = " SignatureTypeHolder is used to hold internal type of the signature" SignatureTypeHolderDoc.Comments[encoder.LineComment] = " SignatureTypeHolder is used to hold internal type of the signature"
@ -803,6 +830,167 @@ func init() {
} }
SignatureTypeHolderDoc.Fields = make([]encoder.Doc, 0) SignatureTypeHolderDoc.Fields = make([]encoder.Doc, 0)
MATCHERSMatcherDoc.Type = "matchers.Matcher"
MATCHERSMatcherDoc.Comments[encoder.LineComment] = " Matcher is used to match a part in the output from a protocol."
MATCHERSMatcherDoc.Description = "Matcher is used to match a part in the output from a protocol."
MATCHERSMatcherDoc.AppearsIn = []encoder.Appearance{
{
TypeName: "http.Request",
FieldName: "filters",
},
}
MATCHERSMatcherDoc.Fields = make([]encoder.Doc, 16)
MATCHERSMatcherDoc.Fields[0].Name = "type"
MATCHERSMatcherDoc.Fields[0].Type = "MatcherTypeHolder"
MATCHERSMatcherDoc.Fields[0].Note = ""
MATCHERSMatcherDoc.Fields[0].Description = "Type is the type of the matcher."
MATCHERSMatcherDoc.Fields[0].Comments[encoder.LineComment] = "Type is the type of the matcher."
MATCHERSMatcherDoc.Fields[1].Name = "condition"
MATCHERSMatcherDoc.Fields[1].Type = "string"
MATCHERSMatcherDoc.Fields[1].Note = ""
MATCHERSMatcherDoc.Fields[1].Description = "Condition is the optional condition between two matcher variables. By default,\nthe condition is assumed to be OR."
MATCHERSMatcherDoc.Fields[1].Comments[encoder.LineComment] = "Condition is the optional condition between two matcher variables. By default,"
MATCHERSMatcherDoc.Fields[1].Values = []string{
"and",
"or",
}
MATCHERSMatcherDoc.Fields[2].Name = "part"
MATCHERSMatcherDoc.Fields[2].Type = "string"
MATCHERSMatcherDoc.Fields[2].Note = ""
MATCHERSMatcherDoc.Fields[2].Description = "Part is the part of the request response to match data from.\n\nEach protocol exposes a lot of different parts which are well\ndocumented in docs for each request type."
MATCHERSMatcherDoc.Fields[2].Comments[encoder.LineComment] = "Part is the part of the request response to match data from."
MATCHERSMatcherDoc.Fields[2].AddExample("", "body")
MATCHERSMatcherDoc.Fields[2].AddExample("", "raw")
MATCHERSMatcherDoc.Fields[3].Name = "negative"
MATCHERSMatcherDoc.Fields[3].Type = "bool"
MATCHERSMatcherDoc.Fields[3].Note = ""
MATCHERSMatcherDoc.Fields[3].Description = "Negative specifies if the match should be reversed\nIt will only match if the condition is not true."
MATCHERSMatcherDoc.Fields[3].Comments[encoder.LineComment] = "Negative specifies if the match should be reversed"
MATCHERSMatcherDoc.Fields[4].Name = "name"
MATCHERSMatcherDoc.Fields[4].Type = "string"
MATCHERSMatcherDoc.Fields[4].Note = ""
MATCHERSMatcherDoc.Fields[4].Description = "Name of the matcher. Name should be lowercase and must not contain\nspaces or underscores (_)."
MATCHERSMatcherDoc.Fields[4].Comments[encoder.LineComment] = "Name of the matcher. Name should be lowercase and must not contain"
MATCHERSMatcherDoc.Fields[4].AddExample("", "cookie-matcher")
MATCHERSMatcherDoc.Fields[5].Name = "status"
MATCHERSMatcherDoc.Fields[5].Type = "[]int"
MATCHERSMatcherDoc.Fields[5].Note = ""
MATCHERSMatcherDoc.Fields[5].Description = "Status are the acceptable status codes for the response."
MATCHERSMatcherDoc.Fields[5].Comments[encoder.LineComment] = "Status are the acceptable status codes for the response."
MATCHERSMatcherDoc.Fields[5].AddExample("", []int{200, 302})
MATCHERSMatcherDoc.Fields[6].Name = "size"
MATCHERSMatcherDoc.Fields[6].Type = "[]int"
MATCHERSMatcherDoc.Fields[6].Note = ""
MATCHERSMatcherDoc.Fields[6].Description = "Size is the acceptable size for the response"
MATCHERSMatcherDoc.Fields[6].Comments[encoder.LineComment] = "Size is the acceptable size for the response"
MATCHERSMatcherDoc.Fields[6].AddExample("", []int{3029, 2042})
MATCHERSMatcherDoc.Fields[7].Name = "words"
MATCHERSMatcherDoc.Fields[7].Type = "[]string"
MATCHERSMatcherDoc.Fields[7].Note = ""
MATCHERSMatcherDoc.Fields[7].Description = "Words contains word patterns required to be present in the response part."
MATCHERSMatcherDoc.Fields[7].Comments[encoder.LineComment] = "Words contains word patterns required to be present in the response part."
MATCHERSMatcherDoc.Fields[7].AddExample("Match for Outlook mail protection domain", []string{"mail.protection.outlook.com"})
MATCHERSMatcherDoc.Fields[7].AddExample("Match for application/json in response headers", []string{"application/json"})
MATCHERSMatcherDoc.Fields[8].Name = "regex"
MATCHERSMatcherDoc.Fields[8].Type = "[]string"
MATCHERSMatcherDoc.Fields[8].Note = ""
MATCHERSMatcherDoc.Fields[8].Description = "Regex contains Regular Expression patterns required to be present in the response part."
MATCHERSMatcherDoc.Fields[8].Comments[encoder.LineComment] = "Regex contains Regular Expression patterns required to be present in the response part."
MATCHERSMatcherDoc.Fields[8].AddExample("Match for Linkerd Service via Regex", []string{`(?mi)^Via\\s*?:.*?linkerd.*$`})
MATCHERSMatcherDoc.Fields[8].AddExample("Match for Open Redirect via Location header", []string{`(?m)^(?:Location\\s*?:\\s*?)(?:https?://|//)?(?:[a-zA-Z0-9\\-_\\.@]*)example\\.com.*$`})
MATCHERSMatcherDoc.Fields[9].Name = "binary"
MATCHERSMatcherDoc.Fields[9].Type = "[]string"
MATCHERSMatcherDoc.Fields[9].Note = ""
MATCHERSMatcherDoc.Fields[9].Description = "Binary are the binary patterns required to be present in the response part."
MATCHERSMatcherDoc.Fields[9].Comments[encoder.LineComment] = "Binary are the binary patterns required to be present in the response part."
MATCHERSMatcherDoc.Fields[9].AddExample("Match for Springboot Heapdump Actuator \"JAVA PROFILE\", \"HPROF\", \"Gunzip magic byte\"", []string{"4a4156412050524f46494c45", "4850524f46", "1f8b080000000000"})
MATCHERSMatcherDoc.Fields[9].AddExample("Match for 7zip files", []string{"377ABCAF271C"})
MATCHERSMatcherDoc.Fields[10].Name = "dsl"
MATCHERSMatcherDoc.Fields[10].Type = "[]string"
MATCHERSMatcherDoc.Fields[10].Note = ""
MATCHERSMatcherDoc.Fields[10].Description = "DSL are the dsl expressions that will be evaluated as part of nuclei matching rules.\nA list of these helper functions are available [here](https://nuclei.projectdiscovery.io/templating-guide/helper-functions/)."
MATCHERSMatcherDoc.Fields[10].Comments[encoder.LineComment] = "DSL are the dsl expressions that will be evaluated as part of nuclei matching rules."
MATCHERSMatcherDoc.Fields[10].AddExample("DSL Matcher for package.json file", []string{"contains(body, 'packages') && contains(tolower(all_headers), 'application/octet-stream') && status_code == 200"})
MATCHERSMatcherDoc.Fields[10].AddExample("DSL Matcher for missing strict transport security header", []string{"!contains(tolower(all_headers), ''strict-transport-security'')"})
MATCHERSMatcherDoc.Fields[11].Name = "xpath"
MATCHERSMatcherDoc.Fields[11].Type = "[]string"
MATCHERSMatcherDoc.Fields[11].Note = ""
MATCHERSMatcherDoc.Fields[11].Description = "XPath are the xpath queries expressions that will be evaluated against the response part."
MATCHERSMatcherDoc.Fields[11].Comments[encoder.LineComment] = "XPath are the xpath queries expressions that will be evaluated against the response part."
MATCHERSMatcherDoc.Fields[11].AddExample("XPath Matcher to check a title", []string{"/html/head/title[contains(text(), 'How to Find XPath')]"})
MATCHERSMatcherDoc.Fields[11].AddExample("XPath Matcher for finding links with target=\"_blank\"", []string{"//a[@target=\"_blank\"]"})
MATCHERSMatcherDoc.Fields[12].Name = "encoding"
MATCHERSMatcherDoc.Fields[12].Type = "string"
MATCHERSMatcherDoc.Fields[12].Note = ""
MATCHERSMatcherDoc.Fields[12].Description = "Encoding specifies the encoding for the words field if any."
MATCHERSMatcherDoc.Fields[12].Comments[encoder.LineComment] = "Encoding specifies the encoding for the words field if any."
MATCHERSMatcherDoc.Fields[12].Values = []string{
"hex",
}
MATCHERSMatcherDoc.Fields[13].Name = "case-insensitive"
MATCHERSMatcherDoc.Fields[13].Type = "bool"
MATCHERSMatcherDoc.Fields[13].Note = ""
MATCHERSMatcherDoc.Fields[13].Description = "CaseInsensitive enables case-insensitive matches. Default is false."
MATCHERSMatcherDoc.Fields[13].Comments[encoder.LineComment] = "CaseInsensitive enables case-insensitive matches. Default is false."
MATCHERSMatcherDoc.Fields[13].Values = []string{
"false",
"true",
}
MATCHERSMatcherDoc.Fields[14].Name = "match-all"
MATCHERSMatcherDoc.Fields[14].Type = "bool"
MATCHERSMatcherDoc.Fields[14].Note = ""
MATCHERSMatcherDoc.Fields[14].Description = "MatchAll enables matching for all matcher values. Default is false."
MATCHERSMatcherDoc.Fields[14].Comments[encoder.LineComment] = "MatchAll enables matching for all matcher values. Default is false."
MATCHERSMatcherDoc.Fields[14].Values = []string{
"false",
"true",
}
MATCHERSMatcherDoc.Fields[15].Name = "internal"
MATCHERSMatcherDoc.Fields[15].Type = "bool"
MATCHERSMatcherDoc.Fields[15].Note = ""
MATCHERSMatcherDoc.Fields[15].Description = "description: |\n Internal when true hides the matcher from output. Default is false.\n It is meant to be used in multiprotocol / flow templates to create internal matcher condition without printing it in output.\n or other similar use cases.\n values:\n - false\n - true"
MATCHERSMatcherDoc.Fields[15].Comments[encoder.LineComment] = " description: |"
MatcherTypeHolderDoc.Type = "MatcherTypeHolder"
MatcherTypeHolderDoc.Comments[encoder.LineComment] = " MatcherTypeHolder is used to hold internal type of the matcher"
MatcherTypeHolderDoc.Description = "MatcherTypeHolder is used to hold internal type of the matcher"
MatcherTypeHolderDoc.AppearsIn = []encoder.Appearance{
{
TypeName: "matchers.Matcher",
FieldName: "type",
},
}
MatcherTypeHolderDoc.Fields = make([]encoder.Doc, 1)
MatcherTypeHolderDoc.Fields[0].Name = ""
MatcherTypeHolderDoc.Fields[0].Type = "MatcherType"
MatcherTypeHolderDoc.Fields[0].Note = ""
MatcherTypeHolderDoc.Fields[0].Description = ""
MatcherTypeHolderDoc.Fields[0].Comments[encoder.LineComment] = ""
MatcherTypeHolderDoc.Fields[0].EnumFields = []string{
"word",
"regex",
"binary",
"status",
"size",
"dsl",
"xpath",
}
DNSRequestDoc.Type = "dns.Request" DNSRequestDoc.Type = "dns.Request"
DNSRequestDoc.Comments[encoder.LineComment] = " Request contains a DNS protocol request to be made from a template" DNSRequestDoc.Comments[encoder.LineComment] = " Request contains a DNS protocol request to be made from a template"
DNSRequestDoc.Description = "Request contains a DNS protocol request to be made from a template" DNSRequestDoc.Description = "Request contains a DNS protocol request to be made from a template"
@ -1810,7 +1998,10 @@ func GetTemplateDoc() *encoder.FileDoc {
&GENERATORSAttackTypeHolderDoc, &GENERATORSAttackTypeHolderDoc,
&HTTPMethodTypeHolderDoc, &HTTPMethodTypeHolderDoc,
&FUZZRuleDoc, &FUZZRuleDoc,
&SliceOrMapSliceDoc,
&SignatureTypeHolderDoc, &SignatureTypeHolderDoc,
&MATCHERSMatcherDoc,
&MatcherTypeHolderDoc,
&DNSRequestDoc, &DNSRequestDoc,
&DNSRequestTypeHolderDoc, &DNSRequestTypeHolderDoc,
&FILERequestDoc, &FILERequestDoc,