mirror of https://github.com/daffainfo/nuclei.git
Fixed nuclei ignore to read from .config
parent
bfa2dacb7b
commit
9521daf3aa
|
@ -16,13 +16,15 @@ type nucleiConfig struct {
|
||||||
TemplatesDirectory string `json:"templates-directory,omitempty"`
|
TemplatesDirectory string `json:"templates-directory,omitempty"`
|
||||||
CurrentVersion string `json:"current-version,omitempty"`
|
CurrentVersion string `json:"current-version,omitempty"`
|
||||||
LastChecked time.Time `json:"last-checked,omitempty"`
|
LastChecked time.Time `json:"last-checked,omitempty"`
|
||||||
|
IgnoreURL string `json:"ignore-url,omitempty"`
|
||||||
|
NucleiVersion string `json:"nuclei-version,omitempty"`
|
||||||
|
LastCheckedIgnore time.Time `json:"last-checked-ignore,omitempty"`
|
||||||
// IgnorePaths ignores all the paths listed unless specified manually
|
// IgnorePaths ignores all the paths listed unless specified manually
|
||||||
IgnorePaths []string `json:"ignore-paths,omitempty"`
|
IgnorePaths []string `json:"ignore-paths,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// nucleiConfigFilename is the filename of nuclei configuration file.
|
// nucleiConfigFilename is the filename of nuclei configuration file.
|
||||||
const nucleiConfigFilename = ".nuclei-config.json"
|
const nucleiConfigFilename = ".templates-config.json"
|
||||||
|
|
||||||
var reVersion = regexp.MustCompile(`\d+\.\d+\.\d+`)
|
var reVersion = regexp.MustCompile(`\d+\.\d+\.\d+`)
|
||||||
|
|
||||||
|
@ -32,8 +34,10 @@ func readConfiguration() (*nucleiConfig, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
configDir := path.Join(home, "/.config", "/nuclei")
|
||||||
|
_ = os.MkdirAll(configDir, os.ModePerm)
|
||||||
|
|
||||||
templatesConfigFile := path.Join(home, nucleiConfigFilename)
|
templatesConfigFile := path.Join(configDir, nucleiConfigFilename)
|
||||||
file, err := os.Open(templatesConfigFile)
|
file, err := os.Open(templatesConfigFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -54,9 +58,16 @@ func (r *Runner) writeConfiguration(config *nucleiConfig) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
configDir := path.Join(home, "/.config", "/nuclei")
|
||||||
|
_ = os.MkdirAll(configDir, os.ModePerm)
|
||||||
|
|
||||||
|
if config.IgnoreURL == "" {
|
||||||
|
config.IgnoreURL = "https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/master/.nuclei-ignore"
|
||||||
|
}
|
||||||
config.LastChecked = time.Now()
|
config.LastChecked = time.Now()
|
||||||
templatesConfigFile := path.Join(home, nucleiConfigFilename)
|
config.LastCheckedIgnore = time.Now()
|
||||||
|
config.NucleiVersion = Version
|
||||||
|
templatesConfigFile := path.Join(configDir, nucleiConfigFilename)
|
||||||
file, err := os.OpenFile(templatesConfigFile, os.O_WRONLY|os.O_CREATE, 0777)
|
file, err := os.OpenFile(templatesConfigFile, os.O_WRONLY|os.O_CREATE, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -95,7 +106,15 @@ func (r *Runner) readNucleiIgnoreFile() {
|
||||||
|
|
||||||
// getIgnoreFilePath returns the ignore file path for the runner
|
// getIgnoreFilePath returns the ignore file path for the runner
|
||||||
func (r *Runner) getIgnoreFilePath() string {
|
func (r *Runner) getIgnoreFilePath() string {
|
||||||
defIgnoreFilePath := path.Join(r.templatesConfig.TemplatesDirectory, nucleiIgnoreFile)
|
var defIgnoreFilePath string
|
||||||
|
|
||||||
|
home, err := os.UserHomeDir()
|
||||||
|
if err == nil {
|
||||||
|
configDir := path.Join(home, "/.config", "/nuclei")
|
||||||
|
_ = os.MkdirAll(configDir, os.ModePerm)
|
||||||
|
|
||||||
|
defIgnoreFilePath = path.Join(configDir, nucleiIgnoreFile)
|
||||||
|
}
|
||||||
|
|
||||||
cwd, err := os.Getwd()
|
cwd, err := os.Getwd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -41,6 +41,8 @@ func (r *Runner) updateTemplates() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
configDir := path.Join(home, "/.config", "/nuclei")
|
||||||
|
_ = os.MkdirAll(configDir, os.ModePerm)
|
||||||
|
|
||||||
templatesConfigFile := path.Join(home, nucleiConfigFilename)
|
templatesConfigFile := path.Join(home, nucleiConfigFilename)
|
||||||
if _, statErr := os.Stat(templatesConfigFile); !os.IsNotExist(statErr) {
|
if _, statErr := os.Stat(templatesConfigFile); !os.IsNotExist(statErr) {
|
||||||
|
@ -51,6 +53,34 @@ func (r *Runner) updateTemplates() error {
|
||||||
r.templatesConfig = config
|
r.templatesConfig = config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if last checked for nuclei-ignore is more than 1 hours.
|
||||||
|
// and if true, run the check.
|
||||||
|
if r.templatesConfig == nil || time.Since(r.templatesConfig.LastCheckedIgnore) > 1*time.Hour {
|
||||||
|
ignoreURL := "https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/master/.nuclei-ignore"
|
||||||
|
if r.templatesConfig != nil && r.templatesConfig.IgnoreURL == "" {
|
||||||
|
ignoreURL = r.templatesConfig.IgnoreURL
|
||||||
|
}
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
|
req, reqErr := http.NewRequestWithContext(ctx, http.MethodGet, ignoreURL, nil)
|
||||||
|
if reqErr == nil {
|
||||||
|
resp, httpGet := http.DefaultClient.Do(req)
|
||||||
|
if httpGet == nil {
|
||||||
|
data, _ := ioutil.ReadAll(resp.Body)
|
||||||
|
resp.Body.Close()
|
||||||
|
|
||||||
|
if len(data) > 0 {
|
||||||
|
_ = ioutil.WriteFile(path.Join(configDir, nucleiIgnoreFile), data, 0644)
|
||||||
|
}
|
||||||
|
if r.templatesConfig != nil {
|
||||||
|
r.templatesConfig.LastCheckedIgnore = time.Now()
|
||||||
|
}
|
||||||
|
} else if resp.Body != nil {
|
||||||
|
resp.Body.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
if r.templatesConfig == nil || (r.options.TemplatesDirectory != "" && r.templatesConfig.TemplatesDirectory != r.options.TemplatesDirectory) {
|
if r.templatesConfig == nil || (r.options.TemplatesDirectory != "" && r.templatesConfig.TemplatesDirectory != r.options.TemplatesDirectory) {
|
||||||
if !r.options.UpdateTemplates {
|
if !r.options.UpdateTemplates {
|
||||||
|
@ -59,7 +89,9 @@ func (r *Runner) updateTemplates() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use custom location if user has given a template directory
|
// Use custom location if user has given a template directory
|
||||||
r.templatesConfig = &nucleiConfig{TemplatesDirectory: path.Join(home, "nuclei-templates")}
|
r.templatesConfig = &nucleiConfig{
|
||||||
|
TemplatesDirectory: path.Join(home, "nuclei-templates"),
|
||||||
|
}
|
||||||
if r.options.TemplatesDirectory != "" && r.options.TemplatesDirectory != path.Join(home, "nuclei-templates") {
|
if r.options.TemplatesDirectory != "" && r.options.TemplatesDirectory != path.Join(home, "nuclei-templates") {
|
||||||
r.templatesConfig.TemplatesDirectory = r.options.TemplatesDirectory
|
r.templatesConfig.TemplatesDirectory = r.options.TemplatesDirectory
|
||||||
}
|
}
|
||||||
|
@ -132,7 +164,6 @@ func (r *Runner) updateTemplates() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = r.writeConfiguration(r.templatesConfig)
|
err = r.writeConfiguration(r.templatesConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue