Documentation
¶
Overview ¶
Package matchers implements matchers for http response matching with templates.
Index ¶
- Variables
- type ConditionType
- type Matcher
- func (matcher *Matcher) CompileMatchers() error
- func (matcher *Matcher) GetCondition() ConditionType
- func (matcher *Matcher) GetType() MatcherType
- func (matcher *Matcher) MatchBinary(corpus string) (bool, []string)
- func (matcher *Matcher) MatchDSL(data map[string]interface{}) bool
- func (matcher *Matcher) MatchHTML(corpus string) bool
- func (matcher *Matcher) MatchRegex(corpus string) (bool, []string)
- func (matcher *Matcher) MatchSize(length int) bool
- func (matcher *Matcher) MatchStatusCode(statusCode int) bool
- func (matcher *Matcher) MatchWords(corpus string, data map[string]interface{}) (bool, []string)
- func (matcher *Matcher) MatchXML(corpus string) bool
- func (matcher *Matcher) MatchXPath(corpus string) bool
- func (matcher *Matcher) Result(data bool) bool
- func (matcher *Matcher) ResultWithMatchedSnippet(data bool, matchedSnippet []string) (bool, []string)
- func (matcher *Matcher) Validate() error
- type MatcherType
- type MatcherTypeHolder
- func (holder MatcherTypeHolder) JSONSchema() *jsonschema.Schema
- func (holder MatcherTypeHolder) MarshalJSON() ([]byte, error)
- func (holder MatcherTypeHolder) MarshalYAML() (interface{}, error)
- func (t MatcherTypeHolder) String() string
- func (holder *MatcherTypeHolder) UnmarshalJSON(data []byte) error
- func (holder *MatcherTypeHolder) UnmarshalYAML(unmarshal func(interface{}) error) error
Constants ¶
This section is empty.
Variables ¶
var ConditionTypes = map[string]ConditionType{ "and": ANDCondition, "or": ORCondition, }
ConditionTypes is a table for conversion of condition type from string.
var MatcherTypes = map[MatcherType]string{ StatusMatcher: "status", SizeMatcher: "size", WordsMatcher: "word", RegexMatcher: "regex", BinaryMatcher: "binary", DSLMatcher: "dsl", XPathMatcher: "xpath", }
MatcherTypes is a table for conversion of matcher type from string.
Functions ¶
This section is empty.
Types ¶
type ConditionType ¶
type ConditionType int
ConditionType is the type of condition for matcher
const ( // ANDCondition matches responses with AND condition in arguments. ANDCondition ConditionType = iota + 1 // ORCondition matches responses with AND condition in arguments. ORCondition )
type Matcher ¶
type Matcher struct {
// description: |
// Type is the type of the matcher.
Type MatcherTypeHolder `` /* 154-byte string literal not displayed */
// description: |
// Condition is the optional condition between two matcher variables. By default,
// the condition is assumed to be OR.
// values:
// - "and"
// - "or"
Condition string `` /* 177-byte string literal not displayed */
// description: |
// 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:
// - value: "\"body\""
// - value: "\"raw\""
Part string `` /* 136-byte string literal not displayed */
// description: |
// Negative specifies if the match should be reversed
// It will only match if the condition is not true.
Negative bool `` /* 219-byte string literal not displayed */
// description: |
// Name of the matcher. Name should be lowercase and must not contain
// spaces or underscores (_).
// examples:
// - value: "\"cookie-matcher\""
Name string `yaml:"name,omitempty" json:"name,omitempty" jsonschema:"title=name of the matcher,description=Name of the matcher"`
// description: |
// Status are the acceptable status codes for the response.
// examples:
// - value: >
// []int{200, 302}
Status []int `` /* 127-byte string literal not displayed */
// description: |
// Size is the acceptable size for the response
// examples:
// - value: >
// []int{3029, 2042}
Size []int `` /* 148-byte string literal not displayed */
// description: |
// Words contains word patterns required to be present in the response part.
// examples:
// - name: Match for Outlook mail protection domain
// value: >
// []string{"mail.protection.outlook.com"}
// - name: Match for application/json in response headers
// value: >
// []string{"application/json"}
Words []string `` /* 177-byte string literal not displayed */
// description: |
// Regex contains Regular Expression patterns required to be present in the response part.
// examples:
// - name: Match for Linkerd Service via Regex
// value: >
// []string{`(?mi)^Via\\s*?:.*?linkerd.*$`}
// - name: Match for Open Redirect via Location header
// value: >
// []string{`(?m)^(?:Location\\s*?:\\s*?)(?:https?://|//)?(?:[a-zA-Z0-9\\-_\\.@]*)example\\.com.*$`}
Regex []string `` /* 177-byte string literal not displayed */
// description: |
// Binary are the binary patterns required to be present in the response part.
// examples:
// - name: Match for Springboot Heapdump Actuator "JAVA PROFILE", "HPROF", "Gunzip magic byte"
// value: >
// []string{"4a4156412050524f46494c45", "4850524f46", "1f8b080000000000"}
// - name: Match for 7zip files
// value: >
// []string{"377ABCAF271C"}
Binary []string `` /* 190-byte string literal not displayed */
// description: |
// 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:
// - name: DSL Matcher for package.json file
// value: >
// []string{"contains(body, 'packages') && contains(tolower(all_headers), 'application/octet-stream') && status_code == 200"}
// - name: DSL Matcher for missing strict transport security header
// value: >
// []string{"!contains(tolower(all_headers), ”strict-transport-security”)"}
DSL []string `` /* 193-byte string literal not displayed */
// description: |
// XPath are the xpath queries expressions that will be evaluated against the response part.
// examples:
// - name: XPath Matcher to check a title
// value: >
// []string{"/html/head/title[contains(text(), 'How to Find XPath')]"}
// - name: XPath Matcher for finding links with target="_blank"
// value: >
// []string{"//a[@target=\"_blank\"]"}
XPath []string `` /* 213-byte string literal not displayed */
// description: |
// Encoding specifies the encoding for the words field if any.
// values:
// - "hex"
Encoding string `` /* 153-byte string literal not displayed */
// description: |
// CaseInsensitive enables case-insensitive matches. Default is false.
// values:
// - false
// - true
CaseInsensitive bool `` /* 152-byte string literal not displayed */
// description: |
// MatchAll enables matching for all matcher values. Default is false.
// values:
// - false
// - true
MatchAll bool `` /* 145-byte string literal not displayed */
// 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
Internal bool `` /* 132-byte string literal not displayed */
// contains filtered or unexported fields
}
Matcher is used to match a part in the output from a protocol.
func (*Matcher) CompileMatchers ¶
CompileMatchers performs the initial setup operation on a matcher
func (*Matcher) GetCondition ¶
func (matcher *Matcher) GetCondition() ConditionType
GetType returns the condition type of the matcher todo: the field should be exposed natively
func (*Matcher) GetType ¶
func (matcher *Matcher) GetType() MatcherType
GetType returns the type of the matcher
func (*Matcher) MatchBinary ¶
MatchBinary matches a binary check against a corpus
func (*Matcher) MatchRegex ¶
MatchRegex matches a regex check against a corpus
func (*Matcher) MatchStatusCode ¶
MatchStatusCode matches a status code check against a corpus
func (*Matcher) MatchWords ¶
MatchWords matches a word check against a corpus.
func (*Matcher) MatchXPath ¶
MatchXPath matches on a generic map result
func (*Matcher) Result ¶
Result reverts the results of the match if the matcher is of type negative.
type MatcherType ¶
type MatcherType int
MatcherType is the type of the matcher specified
const ( // name:word WordsMatcher MatcherType = iota + 1 // name:regex RegexMatcher // name:binary BinaryMatcher // name:status StatusMatcher // name:size SizeMatcher // name:dsl DSLMatcher // name:xpath XPathMatcher )
name:MatcherType
func GetSupportedMatcherTypes ¶
func GetSupportedMatcherTypes() []MatcherType
GetSupportedMatcherTypes returns list of supported types
func (MatcherType) String ¶
func (t MatcherType) String() string
type MatcherTypeHolder ¶
type MatcherTypeHolder struct {
MatcherType MatcherType `mapping:"true"`
}
MatcherTypeHolder is used to hold internal type of the matcher
func (MatcherTypeHolder) JSONSchema ¶
func (holder MatcherTypeHolder) JSONSchema() *jsonschema.Schema
func (MatcherTypeHolder) MarshalJSON ¶
func (holder MatcherTypeHolder) MarshalJSON() ([]byte, error)
func (MatcherTypeHolder) MarshalYAML ¶
func (holder MatcherTypeHolder) MarshalYAML() (interface{}, error)
func (MatcherTypeHolder) String ¶
func (t MatcherTypeHolder) String() string
func (*MatcherTypeHolder) UnmarshalJSON ¶
func (holder *MatcherTypeHolder) UnmarshalJSON(data []byte) error
func (*MatcherTypeHolder) UnmarshalYAML ¶
func (holder *MatcherTypeHolder) UnmarshalYAML(unmarshal func(interface{}) error) error