From 09be857df1dbceecb140a909903b207858d34cc2 Mon Sep 17 00:00:00 2001 From: mzack Date: Thu, 31 Mar 2022 07:24:03 +0200 Subject: [PATCH] Adding support to skip unused payloads --- v2/pkg/protocols/http/http.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/v2/pkg/protocols/http/http.go b/v2/pkg/protocols/http/http.go index fcf0ed185..5b6171648 100644 --- a/v2/pkg/protocols/http/http.go +++ b/v2/pkg/protocols/http/http.go @@ -1,9 +1,11 @@ package http import ( + "bytes" "fmt" "strings" + json "github.com/json-iterator/go" "github.com/pkg/errors" "github.com/projectdiscovery/fileutil" @@ -293,6 +295,25 @@ func (request *Request) Compile(options *protocols.ExecuterOptions) error { } } + // tries to drop unused payloads - by marshaling sections that might contain the payload + unusedPayloads := make(map[string]struct{}) + requestSectionsToCheck := []interface{}{ + request.customHeaders, request.Headers, request.Matchers, + request.Extractors, request.Body, request.Path, request.Raw, + } + if requestSectionsToCheckData, err := json.Marshal(requestSectionsToCheck); err == nil { + for payload := range request.Payloads { + if bytes.Contains(requestSectionsToCheckData, []byte(payload)) { + continue + } + unusedPayloads[payload] = struct{}{} + } + } + + for payload := range unusedPayloads { + delete(request.Payloads, payload) + } + if len(request.Payloads) > 0 { request.generator, err = generators.New(request.Payloads, request.AttackType.Value, request.options.TemplatePath, request.options.Catalog) if err != nil {