Documentation
¶
Index ¶
- Variables
- func BuildPayloadFromOptions(options *Options) map[string]interface{}
- func CopyMap(originalMap map[string]interface{}) map[string]interface{}
- type ConditionType
- type Executer
- type ExecuterOptions
- type Extractor
- type ExtractorType
- type Generator
- type InternalEvent
- type InternalWrappedEvent
- type Iterator
- type Matcher
- func (m *Matcher) CompileMatchers() error
- func (m *Matcher) GetType() MatcherType
- func (m *Matcher) MatchBinary(corpus string) bool
- func (m *Matcher) MatchRegex(corpus string) bool
- func (m *Matcher) MatchSize(length int) bool
- func (m *Matcher) MatchStatusCode(statusCode int) bool
- func (m *Matcher) MatchWords(corpus string) bool
- func (m *Matcher) Result(data bool) bool
- type MatcherType
- type Operators
- func (r *Operators) Compile() error
- func (operators *Operators) Execute(data map[string]interface{}, match matchFunc, extract extractFunc) (*Result, bool)
- func (operators *Operators) ExecuteInternalExtractors(data map[string]interface{}, extract extractFunc) map[string]interface{}
- func (r *Operators) GetMatchersCondition() ConditionType
- type Options
- type OutputEventCallback
- type Request
- type Result
- type ResultEvent
- type Type
Constants ¶
This section is empty.
Variables ¶
var StringToType = map[string]Type{ "sniper": Sniper, "pitchfork": PitchFork, "clusterbomb": ClusterBomb, }
StringToType is an table for conversion of attack type from string.
Functions ¶
func BuildPayloadFromOptions ¶
BuildPayloadFromOptions returns a map with the payloads provided via CLI
Types ¶
type Executer ¶
type Executer interface {
// Compile compiles the execution generators preparing any requests possible.
Compile() error
// Requests returns the total number of requests the rule will perform
Requests() int
// Execute executes the protocol group and returns true or false if results were found.
Execute(input string) (*Result, error)
}
Executer is an interface implemented any protocol based request executer.
type ExecuterOptions ¶
type Extractor ¶
type Extractor struct {
// description: |
// Name of the extractor. Name should be lowercase and must not contain
// spaces or underscores (_).
// examples:
// - value: "\"cookie-extractor\""
Name string `json:"name,omitempty" `
// description: |
// Type is the type of the extractor.
Type string `json:"type"`
// description: |
// Regex contains the regular expression patterns to extract from a part.
//
// Go regex engine does not support lookaheads or lookbehinds, so as a result
// they are also not supported in nuclei.
// examples:
// - name: Braintree Access Token Regex
// value: >
// []string{"access_token\\$production\\$[0-9a-z]{16}\\$[0-9a-f]{32}"}
// - name: Wordpress Author Extraction regex
// value: >
// []string{"Author:(?:[A-Za-z0-9 -\\_=\"]+)?<span(?:[A-Za-z0-9 -\\_=\"]+)?>([A-Za-z0-9]+)<\\/span>"}
Regex []string `json:"regex,omitempty" `
// description: |
// Group specifies a numbered group to extract from the regex.
// examples:
// - name: Example Regex Group
// value: "1"
RegexGroup int `json:"group,omitempty" `
// description: |
// kval contains the key-value pairs present in the HTTP response header.
// kval extractor can be used to extract HTTP response header and cookie key-value pairs.
// kval extractor inputs are case-insensitive, and does not support dash (-) in input which can replaced with underscores (_)
// For example, Content-Type should be replaced with content_type
//
// A list of supported parts is available in docs for request types.
// examples:
// - name: Extract Server Header From HTTP Response
// value: >
// []string{"server"}
// - name: Extracting value of PHPSESSID Cookie
// value: >
// []string{"phpsessid"}
// - name: Extracting value of Content-Type Cookie
// value: >
// []string{"content_type"}
KVal []string `json:"kval,omitempty" `
// description: |
// Part is the part of the request response to extract 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 `json:"part,omitempty" `
// description: |
// Internal, when set to true will allow using the value extracted
// in the next request for some protocols (like HTTP).
Internal bool `json:"internal,omitempty"`
// description: |
// CaseInsensitive enables case-insensitive extractions. Default is false.
// values:
// - false
// - true
CaseInsensitive bool `json:"case-insensitive,omitempty" `
// contains filtered or unexported fields
}
Extractor is used to extract part of response using a regex.
func (*Extractor) CompileExtractors ¶
CompileExtractors performs the initial setup operation on an extractor
func (*Extractor) ExtractKval ¶
ExtractKval extracts key value pairs from a data map
func (*Extractor) ExtractRegex ¶
ExtractRegex extracts text from a corpus and returns it
func (*Extractor) GetType ¶
func (e *Extractor) GetType() ExtractorType
GetType returns the type of the matcher
type ExtractorType ¶
type ExtractorType int
ExtractorType is the type of the extractor specified
const ( // name:regex RegexExtractor ExtractorType = iota + 1 // name:kval KValExtractor )
name:ExtractorType
func GetSupportedExtractorTypes ¶
func GetSupportedExtractorTypes() []ExtractorType
GetSupportedExtractorTypes returns list of supported types
type Generator ¶
type Generator struct {
Type Type
// contains filtered or unexported fields
}
generator is the generator struct for generating payloads
func (*Generator) NewIterator ¶
NewIterator creates a new iterator for the payloads generator
type InternalEvent ¶
type InternalEvent map[string]interface{}
type InternalWrappedEvent ¶
type InternalWrappedEvent struct {
InternalEvent InternalEvent
Results []*ResultEvent
OperatorsResult *Result
}
type Iterator ¶
type Iterator struct {
Type Type
// contains filtered or unexported fields
}
Iterator is a single instance of an iterator for a generator structure
func (*Iterator) Reset ¶
func (i *Iterator) Reset()
Reset resets the iterator back to its initial value
type Matcher ¶
type Matcher struct {
// Type is the type of the matcher
Type string `json:"type"`
// Condition is the optional condition between two matcher variables
//
// By default, the condition is assumed to be OR.
Condition string `json:"condition,omitempty"`
// Part is the part of the data to match
Part string `json:"part,omitempty"`
// Negative specifies if the match should be reversed
// It will only match if the condition is not true.
Negative bool `json:"negative,omitempty"`
// Name is matcher Name
Name string `json:"name,omitempty"`
// Status are the acceptable status codes for the response
Status []int `json:"status,omitempty"`
// Size is the acceptable size for the response
Size []int `json:"size,omitempty"`
// Words are the words required to be present in the response
Words []string `json:"words,omitempty"`
// Regex are the regex pattern required to be present in the response
Regex []string `json:"regex,omitempty"`
// Binary are the binary characters required to be present in the response
Binary []string `json:"binary,omitempty"`
// DSL are the dsl queries
DSL []string `json:"dsl,omitempty"`
// Encoding specifies the encoding for the word content if any.
Encoding string `json:"encoding,omitempty"`
MatchersCondition string `json:"matchers-condition"`
Matchers []Matcher
// contains filtered or unexported fields
}
func (*Matcher) CompileMatchers ¶
CompileMatchers performs the initial setup operation on a matcher
func (*Matcher) GetType ¶
func (m *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.
type MatcherType ¶
type MatcherType = int
MatcherType is the type of the matcher specified
const ( // WordsMatcher matches responses with words WordsMatcher MatcherType = iota + 1 // RegexMatcher matches responses with regexes RegexMatcher // BinaryMatcher matches responses with words BinaryMatcher // StatusMatcher matches responses with status codes StatusMatcher // SizeMatcher matches responses with response size SizeMatcher // DSLMatcher matches based upon dsl syntax DSLMatcher )
type Operators ¶
type Operators struct {
// Matchers contains the detection mechanism for the request to identify
// whether the request was successful
Matchers []*Matcher `json:"matchers,omitempty"`
// Extractors contains the extraction mechanism for the request to identify
// and extract parts of the response.
Extractors []*Extractor `json:"extractors,omitempty"`
// MatchersCondition is the condition of the matchers
// whether to use AND or OR. Default is OR.
MatchersCondition string `json:"matchers-condition,omitempty"`
// contains filtered or unexported fields
}
operators contains the operators that can be applied on protocols
func (*Operators) Execute ¶
func (operators *Operators) Execute(data map[string]interface{}, match matchFunc, extract extractFunc) (*Result, bool)
Execute executes the operators on data and returns a result structure
func (*Operators) ExecuteInternalExtractors ¶
func (operators *Operators) ExecuteInternalExtractors(data map[string]interface{}, extract extractFunc) map[string]interface{}
ExecuteInternalExtractors executes internal dynamic extractors
func (*Operators) GetMatchersCondition ¶
func (r *Operators) GetMatchersCondition() ConditionType
getMatchersCondition returns the condition for the matchers
type OutputEventCallback ¶
type OutputEventCallback func(result *InternalWrappedEvent)
type Request ¶
type Request interface {
// Compile compiles the request generators preparing any requests possible.
Compile(options *ExecuterOptions) error
// Requests returns the total number of requests the rule will perform
Requests() int
// GetID returns the ID for the request if any. IDs are used for multi-request
// condition matching. So, two requests can be sent and their match can
// be evaluated from the third request by using the IDs for both requests.
//GetID() string
// Match performs matching operation for a matcher on model and returns true or false.
Match(data map[string]interface{}, matcher *Matcher) bool
// Extract performs extracting operation for a extractor on model and returns true or false.
//Extract(data map[string]interface{}, matcher *extractors.Extractor) map[string]struct{}
// ExecuteWithResults executes the protocol requests and returns results instead of writing them.
ExecuteWithResults(input string, dynamicValues map[string]interface{}, callback OutputEventCallback) error
}
Request is an interface implemented any protocol based request generator.
type Result ¶
type Result struct {
// Matched is true if any matchers matched
Matched bool
// Extracted is true if any result type values were extracted
Extracted bool
// Matches is a map of matcher names that we matched
Matches map[string]struct{}
// Extracts contains all the data extracted from inputs
Extracts map[string][]string
// OutputExtracts is the list of extracts to be displayed on screen.
OutputExtracts []string
// DynamicValues contains any dynamic values to be templated
DynamicValues map[string]interface{}
// PayloadValues contains payload values provided by user. (Optional)
PayloadValues map[string]interface{}
}
Result is a result structure created from operators running on data.
type ResultEvent ¶
type ResultEvent struct {
//TemplateID is the ID of the template for the result.
TemplateID string `json:"templateID"`
// Info contains information block of the template for the result.
//Info map[string]interface{} `json:"info,inline"`
// MatcherName is the name of the matcher matched if any.
MatcherName string `json:"matcher_name,omitempty"`
// ExtractorName is the name of the extractor matched if any.
ExtractorName string `json:"extractor_name,omitempty"`
// Type is the type of the result event.
Type string `json:"type"`
// Host is the host input on which match was found.
Host string `json:"host,omitempty"`
// Path is the path input on which match was found.
Path string `json:"path,omitempty"`
// Matched contains the matched input in its transformed form.
Matched string `json:"matched,omitempty"`
// ExtractedResults contains the extraction result from the inputs.
ExtractedResults []string `json:"extracted_results,omitempty"`
// Request is the optional dumped request for the match.
//Request string `json:"request,omitempty"`
// Response is the optional dumped response for the match.
//Response string `json:"response,omitempty"`
// Metadata contains any optional metadata for the event
Metadata map[string]interface{} `json:"meta,omitempty"`
// IP is the IP address for the found result event.
IP string `json:"ip,omitempty"`
// Timestamp is the time the result was found at.
Timestamp time.Time `json:"timestamp"`
}