Making matcher name case insensitive

This commit is contained in:
Mzack9999 2022-11-25 17:22:50 +01:00
parent 1493fd3d6a
commit d3a929d4c3
6 changed files with 31 additions and 14 deletions

View File

@ -52,12 +52,16 @@ func (stringSlice *StringSlice) UnmarshalYAML(unmarshal func(interface{}) error)
result := make([]string, 0, len(marshalledSlice)) result := make([]string, 0, len(marshalledSlice))
for _, value := range marshalledSlice { for _, value := range marshalledSlice {
result = append(result, strings.ToLower(strings.TrimSpace(value))) // TODO do we need to introduce RawStringSlice and/or NormalizedStringSlices? result = append(result, stringSlice.normalize(value))
} }
stringSlice.Value = result stringSlice.Value = result
return nil return nil
} }
func (stringSlice StringSlice) normalize(value string) string {
return strings.ToLower(strings.TrimSpace(value))
}
func (stringSlice StringSlice) MarshalYAML() (interface{}, error) { func (stringSlice StringSlice) MarshalYAML() (interface{}, error) {
return stringSlice.Value, nil return stringSlice.Value, nil
} }
@ -82,7 +86,7 @@ func (stringSlice *StringSlice) UnmarshalJSON(data []byte) error {
switch { switch {
case len(marshalledValuesAsSlice) > 0: case len(marshalledValuesAsSlice) > 0:
result = marshalledValuesAsSlice result = marshalledValuesAsSlice
case utils.IsNotBlank(marshalledValueAsString): case !utils.IsBlank(marshalledValueAsString):
result = strings.Split(marshalledValueAsString, ",") result = strings.Split(marshalledValueAsString, ",")
default: default:
result = []string{} result = []string{}
@ -90,7 +94,7 @@ func (stringSlice *StringSlice) UnmarshalJSON(data []byte) error {
values := make([]string, 0, len(result)) values := make([]string, 0, len(result))
for _, value := range result { for _, value := range result {
values = append(values, strings.ToLower(strings.TrimSpace(value))) // TODO do we need to introduce RawStringSlice and/or NormalizedStringSlices? values = append(values, stringSlice.normalize(value))
} }
stringSlice.Value = values stringSlice.Value = values
return nil return nil
@ -112,7 +116,7 @@ func marshalStringToSlice(unmarshal func(interface{}) error) ([]string, error) {
switch { switch {
case len(marshalledValuesAsSlice) > 0: case len(marshalledValuesAsSlice) > 0:
result = marshalledValuesAsSlice result = marshalledValuesAsSlice
case utils.IsNotBlank(marshalledValueAsString): case !utils.IsBlank(marshalledValueAsString):
result = strings.Split(marshalledValueAsString, ",") result = strings.Split(marshalledValueAsString, ",")
default: default:
result = []string{} result = []string{}

View File

@ -3,6 +3,7 @@ package operators
import ( import (
"fmt" "fmt"
"strconv" "strconv"
"strings"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -91,6 +92,23 @@ type Result struct {
LineCount string LineCount string
} }
func (result *Result) HasMatch(name string) bool {
return result.hasItem(name, result.Matches)
}
func (result *Result) HasExtract(name string) bool {
return result.hasItem(name, result.Extracts)
}
func (result *Result) hasItem(name string, m map[string][]string) bool {
for matchName := range m {
if strings.EqualFold(name, matchName) {
return true
}
}
return false
}
// MakeDynamicValuesCallback takes an input dynamic values map and calls // MakeDynamicValuesCallback takes an input dynamic values map and calls
// the callback function with all variations of the data in input in form // the callback function with all variations of the data in input in form
// of map[string]string (interface{}). // of map[string]string (interface{}).

View File

@ -57,7 +57,7 @@ func (exporter *Exporter) Export(event *output.ResultEvent) error {
templateID := event.TemplateID + "-" + hex.EncodeToString(h.Sum(nil)) templateID := event.TemplateID + "-" + hex.EncodeToString(h.Sum(nil))
var ruleName string var ruleName string
if utils.IsNotBlank(event.Info.Name) { if !utils.IsBlank(event.Info.Name) {
ruleName = event.Info.Name ruleName = event.Info.Name
} }
@ -69,7 +69,7 @@ func (exporter *Exporter) Export(event *output.ResultEvent) error {
} }
var ruleDescription string var ruleDescription string
if utils.IsNotBlank(event.Info.Description) { if !utils.IsBlank(event.Info.Description) {
ruleDescription = event.Info.Description ruleDescription = event.Info.Description
} }

View File

@ -14,7 +14,6 @@ import (
"github.com/projectdiscovery/nuclei/v2/pkg/types" "github.com/projectdiscovery/nuclei/v2/pkg/types"
) )
// Summary returns a formatted built one line summary of the event // Summary returns a formatted built one line summary of the event
func Summary(event *output.ResultEvent) string { func Summary(event *output.ResultEvent) string {
template := GetMatchedTemplate(event) template := GetMatchedTemplate(event)
@ -179,7 +178,7 @@ func ToMarkdownTableString(templateInfo *model.Info) string {
insertionOrderedStringMap.ForEach(func(key string, value interface{}) { insertionOrderedStringMap.ForEach(func(key string, value interface{}) {
switch value := value.(type) { switch value := value.(type) {
case string: case string:
if utils.IsNotBlank(value) { if !utils.IsBlank(value) {
builder.WriteString(fmt.Sprintf("| %s | %s |\n", key, value)) builder.WriteString(fmt.Sprintf("| %s | %s |\n", key, value))
} }
} }

View File

@ -14,10 +14,6 @@ func IsBlank(value string) bool {
return strings.TrimSpace(value) == "" return strings.TrimSpace(value) == ""
} }
func IsNotBlank(value string) bool {
return !IsBlank(value)
}
func UnwrapError(err error) error { func UnwrapError(err error) error {
for { // get the last wrapped error for { // get the last wrapped error
unwrapped := errors.Unwrap(err) unwrapped := errors.Unwrap(err)

View File

@ -105,8 +105,8 @@ func (matcher *Matcher) Match(result *operators.Result) bool {
} }
for i, name := range names { for i, name := range names {
_, matchOK := result.Matches[name] matchOK := result.HasMatch(name)
_, extractOK := result.Extracts[name] extractOK := result.HasExtract(name)
if !matchOK && !extractOK { if !matchOK && !extractOK {
if matcher.condition == ANDCondition { if matcher.condition == ANDCondition {