Merge remote-tracking branch 'upstream/dev'

This commit is contained in:
forgedhallpass 2021-08-05 14:36:28 +03:00
commit 75b21282ab
7 changed files with 41 additions and 28 deletions

15
.gitignore vendored
View File

@ -1,13 +1,12 @@
.idea .idea
v2/cmd/nuclei/nuclei
v2/cmd/nuclei/main
v2/cmd/integration-test/integration-test
integration_tests/integration-test
integration_tests/nuclei integration_tests/nuclei
bin integration_tests/integration-test
v2/pkg/protocols/common/helpers/deserialization/testdata/Deserialize.class v2/cmd/nuclei/main
v2/pkg/protocols/common/helpers/deserialization/testdata/ValueObject.class v2/cmd/nuclei/nuclei
v2/pkg/protocols/common/helpers/deserialization/testdata/ValueObject2.ser v2/cmd/integration-test/nuclei
v2/cmd/functional-test/nuclei_dev v2/cmd/functional-test/nuclei_dev
v2/cmd/functional-test/nuclei_main v2/cmd/functional-test/nuclei_main
v2/cmd/functional-test/functional-test v2/cmd/functional-test/functional-test
v2/pkg/protocols/common/helpers/deserialization/testdata/Deserialize.class
v2/pkg/protocols/common/helpers/deserialization/testdata/ValueObject.class
v2/pkg/protocols/common/helpers/deserialization/testdata/ValueObject2.ser

View File

@ -82,7 +82,7 @@ Usage:
Flags: Flags:
TARGET: TARGET:
-u, -target string target URL/host to scan -u, -target string[] target URLs/hosts to scan
-l, -list string path to file containing a list of target URLs/hosts to scan (one per line) -l, -list string path to file containing a list of target URLs/hosts to scan (one per line)
TEMPLATES: TEMPLATES:

View File

@ -97,7 +97,7 @@ nuclei -h
|burp-collaborator-biid|使用burp-collaborator插件|nuclei -burp-collaborator-biid XXXX| |burp-collaborator-biid|使用burp-collaborator插件|nuclei -burp-collaborator-biid XXXX|
|c|并行的最大模板数量(默认10)|nuclei -c 10| |c|并行的最大模板数量(默认10)|nuclei -c 10|
|l|对URL列表进行测试|nuclei -l urls.txt| |l|对URL列表进行测试|nuclei -l urls.txt|
|target|对目标进行测试|nuclei -target hxxps://example.com| |target|对目标进行测试|nuclei -target hxxps://example.com -target hxxps://example2.com|
|t|要检测的模板种类|nuclei -t git-core.yaml -t cves/| |t|要检测的模板种类|nuclei -t git-core.yaml -t cves/|
|no-color|输出不显示颜色|nuclei -no-color| |no-color|输出不显示颜色|nuclei -no-color|
|no-meta|不显示匹配的元数据|nuclei -no-meta| |no-meta|不显示匹配的元数据|nuclei -no-meta|

View File

@ -48,8 +48,8 @@ on extensive configurability, massive extensibility and ease of use.`)
*/ */
createGroup(flagSet, "input", "Target", createGroup(flagSet, "input", "Target",
flagSet.StringVarP(&options.Target, "target", "u", "", "target URL/host to scan"), flagSet.StringSliceVarP(&options.Targets, "target", "u", []string{}, "target URLs/hosts to scan"),
flagSet.StringVarP(&options.Targets, "list", "l", "", "path to file containing a list of target URLs/hosts to scan (one per line)"), flagSet.StringVarP(&options.TargetsFilePath, "list", "l", "", "path to file containing a list of target URLs/hosts to scan (one per line)"),
) )
createGroup(flagSet, "templates", "Templates", createGroup(flagSet, "templates", "Templates",

View File

@ -129,7 +129,7 @@ func New(options *types.Options) (*Runner, error) {
os.Exit(0) os.Exit(0)
} }
if (len(options.Templates) == 0 || !options.NewTemplates || (options.Targets == "" && !options.Stdin && options.Target == "")) && options.UpdateTemplates { if (len(options.Templates) == 0 || !options.NewTemplates || (options.TargetsFilePath == "" && !options.Stdin && len(options.Targets) == 0)) && options.UpdateTemplates {
os.Exit(0) os.Exit(0)
} }
hm, err := hybrid.New(hybrid.DefaultDiskOptions) hm, err := hybrid.New(hybrid.DefaultDiskOptions)
@ -141,11 +141,23 @@ func New(options *types.Options) (*Runner, error) {
runner.inputCount = 0 runner.inputCount = 0
dupeCount := 0 dupeCount := 0
// Handle single target // Handle multiple targets
if options.Target != "" { if len(options.Targets) != 0 {
for _, target := range options.Targets {
url := strings.TrimSpace(target)
if url == "" {
continue
}
if _, ok := runner.hostMap.Get(url); ok {
dupeCount++
continue
}
runner.inputCount++ runner.inputCount++
// nolint:errcheck // ignoring error // nolint:errcheck // ignoring error
runner.hostMap.Set(options.Target, nil) runner.hostMap.Set(url, nil)
}
} }
// Handle stdin // Handle stdin
@ -156,10 +168,12 @@ func New(options *types.Options) (*Runner, error) {
if url == "" { if url == "" {
continue continue
} }
if _, ok := runner.hostMap.Get(url); ok { if _, ok := runner.hostMap.Get(url); ok {
dupeCount++ dupeCount++
continue continue
} }
runner.inputCount++ runner.inputCount++
// nolint:errcheck // ignoring error // nolint:errcheck // ignoring error
runner.hostMap.Set(url, nil) runner.hostMap.Set(url, nil)
@ -167,8 +181,8 @@ func New(options *types.Options) (*Runner, error) {
} }
// Handle target file // Handle target file
if options.Targets != "" { if options.TargetsFilePath != "" {
input, inputErr := os.Open(options.Targets) input, inputErr := os.Open(options.TargetsFilePath)
if inputErr != nil { if inputErr != nil {
return nil, errors.Wrap(inputErr, "could not open targets file") return nil, errors.Wrap(inputErr, "could not open targets file")
} }

View File

@ -47,8 +47,8 @@ var DefaultOptions = &types.Options{
RateLimit: 150, RateLimit: 150,
ProjectPath: "", ProjectPath: "",
Severities: severity.Severities{}, Severities: severity.Severities{},
Target: "", Targets: []string{},
Targets: "", TargetsFilePath: "",
Output: "", Output: "",
ProxyURL: "", ProxyURL: "",
ProxySocksURL: "", ProxySocksURL: "",

View File

@ -35,10 +35,10 @@ type Options struct {
ProjectPath string ProjectPath string
// InteractshURL is the URL for the interactsh server. // InteractshURL is the URL for the interactsh server.
InteractshURL string InteractshURL string
// Target is a single URL/Domain to scan using a template // Target URLs/Domains to scan using a template
Target string Targets goflags.StringSlice
// Targets specifies the targets to scan using templates. // TargetsFilePath specifies the targets from a file to scan using templates.
Targets string TargetsFilePath string
// Output is the file to write found results to. // Output is the file to write found results to.
Output string Output string
// ProxyURL is the URL for the proxy server // ProxyURL is the URL for the proxy server