mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-18 11:05:26 +00:00
Misc
This commit is contained in:
parent
0abc7202b1
commit
1ca2cf3bea
@ -267,22 +267,7 @@ func (r *Runner) RunEnumeration() error {
|
|||||||
}
|
}
|
||||||
executerOpts.WorkflowLoader = workflowLoader
|
executerOpts.WorkflowLoader = workflowLoader
|
||||||
|
|
||||||
loaderConfig := loader.Config{
|
store, err := loader.New(loader.NewConfig(r.options, r.catalog, executerOpts))
|
||||||
Templates: r.options.Templates,
|
|
||||||
Workflows: r.options.Workflows,
|
|
||||||
ExcludeTemplates: r.options.ExcludedTemplates,
|
|
||||||
Tags: r.options.Tags,
|
|
||||||
ExcludeTags: r.options.ExcludeTags,
|
|
||||||
IncludeTemplates: r.options.IncludeTemplates,
|
|
||||||
Authors: r.options.Author,
|
|
||||||
Severities: r.options.Severities,
|
|
||||||
ExcludeSeverities: r.options.ExcludeSeverities,
|
|
||||||
IncludeTags: r.options.IncludeTags,
|
|
||||||
TemplatesDirectory: r.options.TemplatesDirectory,
|
|
||||||
Catalog: r.catalog,
|
|
||||||
ExecutorOptions: executerOpts,
|
|
||||||
}
|
|
||||||
store, err := loader.New(&loaderConfig)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "could not load templates from config")
|
return errors.Wrap(err, "could not load templates from config")
|
||||||
}
|
}
|
||||||
@ -300,54 +285,7 @@ func (r *Runner) RunEnumeration() error {
|
|||||||
return nil // exit
|
return nil // exit
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display stats for any loaded templates' syntax warnings or errors
|
r.displayExecutionInfo(store)
|
||||||
stats.Display(parsers.SyntaxWarningStats)
|
|
||||||
stats.Display(parsers.SyntaxErrorStats)
|
|
||||||
|
|
||||||
builder := &strings.Builder{}
|
|
||||||
if r.templatesConfig != nil && r.templatesConfig.NucleiLatestVersion != "" {
|
|
||||||
builder.WriteString(" (")
|
|
||||||
|
|
||||||
if strings.Contains(config.Version, "-dev") {
|
|
||||||
builder.WriteString(r.colorizer.Blue("development").String())
|
|
||||||
} else if config.Version == r.templatesConfig.NucleiLatestVersion {
|
|
||||||
builder.WriteString(r.colorizer.Green("latest").String())
|
|
||||||
} else {
|
|
||||||
builder.WriteString(r.colorizer.Red("outdated").String())
|
|
||||||
}
|
|
||||||
builder.WriteString(")")
|
|
||||||
}
|
|
||||||
messageStr := builder.String()
|
|
||||||
builder.Reset()
|
|
||||||
|
|
||||||
gologger.Info().Msgf("Using Nuclei Engine %s%s", config.Version, messageStr)
|
|
||||||
|
|
||||||
if r.templatesConfig != nil && r.templatesConfig.NucleiTemplatesLatestVersion != "" { // TODO extract duplicated logic
|
|
||||||
builder.WriteString(" (")
|
|
||||||
|
|
||||||
if r.templatesConfig.TemplateVersion == r.templatesConfig.NucleiTemplatesLatestVersion {
|
|
||||||
builder.WriteString(r.colorizer.Green("latest").String())
|
|
||||||
} else {
|
|
||||||
builder.WriteString(r.colorizer.Red("outdated").String())
|
|
||||||
}
|
|
||||||
builder.WriteString(")")
|
|
||||||
}
|
|
||||||
messageStr = builder.String()
|
|
||||||
builder.Reset()
|
|
||||||
|
|
||||||
if r.templatesConfig != nil {
|
|
||||||
gologger.Info().Msgf("Using Nuclei Templates %s%s", r.templatesConfig.TemplateVersion, messageStr)
|
|
||||||
}
|
|
||||||
if r.interactsh != nil {
|
|
||||||
gologger.Info().Msgf("Using Interactsh Server %s", r.options.InteractshURL)
|
|
||||||
}
|
|
||||||
if len(store.Templates()) > 0 {
|
|
||||||
gologger.Info().Msgf("Templates added in last update: %d", r.countNewTemplates())
|
|
||||||
gologger.Info().Msgf("Templates loaded for scan: %d", len(store.Templates()))
|
|
||||||
}
|
|
||||||
if len(store.Workflows()) > 0 {
|
|
||||||
gologger.Info().Msgf("Workflows loaded for scan: %d", len(store.Workflows()))
|
|
||||||
}
|
|
||||||
|
|
||||||
var unclusteredRequests int64
|
var unclusteredRequests int64
|
||||||
for _, template := range store.Templates() {
|
for _, template := range store.Templates() {
|
||||||
@ -417,6 +355,58 @@ func (r *Runner) RunEnumeration() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// displayExecutionInfo displays misc info about the nuclei engine execution
|
||||||
|
func (r *Runner) displayExecutionInfo(store *loader.Store) {
|
||||||
|
// Display stats for any loaded templates' syntax warnings or errors
|
||||||
|
stats.Display(parsers.SyntaxWarningStats)
|
||||||
|
stats.Display(parsers.SyntaxErrorStats)
|
||||||
|
|
||||||
|
builder := &strings.Builder{}
|
||||||
|
if r.templatesConfig != nil && r.templatesConfig.NucleiLatestVersion != "" {
|
||||||
|
builder.WriteString(" (")
|
||||||
|
|
||||||
|
if strings.Contains(config.Version, "-dev") {
|
||||||
|
builder.WriteString(r.colorizer.Blue("development").String())
|
||||||
|
} else if config.Version == r.templatesConfig.NucleiLatestVersion {
|
||||||
|
builder.WriteString(r.colorizer.Green("latest").String())
|
||||||
|
} else {
|
||||||
|
builder.WriteString(r.colorizer.Red("outdated").String())
|
||||||
|
}
|
||||||
|
builder.WriteString(")")
|
||||||
|
}
|
||||||
|
messageStr := builder.String()
|
||||||
|
builder.Reset()
|
||||||
|
|
||||||
|
gologger.Info().Msgf("Using Nuclei Engine %s%s", config.Version, messageStr)
|
||||||
|
|
||||||
|
if r.templatesConfig != nil && r.templatesConfig.NucleiTemplatesLatestVersion != "" { // TODO extract duplicated logic
|
||||||
|
builder.WriteString(" (")
|
||||||
|
|
||||||
|
if r.templatesConfig.TemplateVersion == r.templatesConfig.NucleiTemplatesLatestVersion {
|
||||||
|
builder.WriteString(r.colorizer.Green("latest").String())
|
||||||
|
} else {
|
||||||
|
builder.WriteString(r.colorizer.Red("outdated").String())
|
||||||
|
}
|
||||||
|
builder.WriteString(")")
|
||||||
|
}
|
||||||
|
messageStr = builder.String()
|
||||||
|
builder.Reset()
|
||||||
|
|
||||||
|
if r.templatesConfig != nil {
|
||||||
|
gologger.Info().Msgf("Using Nuclei Templates %s%s", r.templatesConfig.TemplateVersion, messageStr)
|
||||||
|
}
|
||||||
|
if r.interactsh != nil {
|
||||||
|
gologger.Info().Msgf("Using Interactsh Server %s", r.options.InteractshURL)
|
||||||
|
}
|
||||||
|
if len(store.Templates()) > 0 {
|
||||||
|
gologger.Info().Msgf("Templates added in last update: %d", r.countNewTemplates())
|
||||||
|
gologger.Info().Msgf("Templates loaded for scan: %d", len(store.Templates()))
|
||||||
|
}
|
||||||
|
if len(store.Workflows()) > 0 {
|
||||||
|
gologger.Info().Msgf("Workflows loaded for scan: %d", len(store.Workflows()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// readNewTemplatesFile reads newly added templates from directory if it exists
|
// readNewTemplatesFile reads newly added templates from directory if it exists
|
||||||
func (r *Runner) readNewTemplatesFile() ([]string, error) {
|
func (r *Runner) readNewTemplatesFile() ([]string, error) {
|
||||||
if r.templatesConfig == nil {
|
if r.templatesConfig == nil {
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/projectdiscovery/nuclei/v2/pkg/parsers"
|
"github.com/projectdiscovery/nuclei/v2/pkg/parsers"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/templates"
|
"github.com/projectdiscovery/nuclei/v2/pkg/templates"
|
||||||
|
"github.com/projectdiscovery/nuclei/v2/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config contains the configuration options for the loader
|
// Config contains the configuration options for the loader
|
||||||
@ -44,6 +45,26 @@ type Store struct {
|
|||||||
preprocessor templates.Preprocessor
|
preprocessor templates.Preprocessor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewConfig returns a new loader config
|
||||||
|
func NewConfig(options *types.Options, catalog *catalog.Catalog, executerOpts protocols.ExecuterOptions) *Config {
|
||||||
|
loaderConfig := Config{
|
||||||
|
Templates: options.Templates,
|
||||||
|
Workflows: options.Workflows,
|
||||||
|
ExcludeTemplates: options.ExcludedTemplates,
|
||||||
|
Tags: options.Tags,
|
||||||
|
ExcludeTags: options.ExcludeTags,
|
||||||
|
IncludeTemplates: options.IncludeTemplates,
|
||||||
|
Authors: options.Author,
|
||||||
|
Severities: options.Severities,
|
||||||
|
ExcludeSeverities: options.ExcludeSeverities,
|
||||||
|
IncludeTags: options.IncludeTags,
|
||||||
|
TemplatesDirectory: options.TemplatesDirectory,
|
||||||
|
Catalog: catalog,
|
||||||
|
ExecutorOptions: executerOpts,
|
||||||
|
}
|
||||||
|
return &loaderConfig
|
||||||
|
}
|
||||||
|
|
||||||
// New creates a new template store based on provided configuration
|
// New creates a new template store based on provided configuration
|
||||||
func New(config *Config) (*Store, error) {
|
func New(config *Config) (*Store, error) {
|
||||||
// Create a tag filter based on provided configuration
|
// Create a tag filter based on provided configuration
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user