From 83fe68fdcaae595ba898013df5216b62c591af94 Mon Sep 17 00:00:00 2001 From: edoardottt Date: Tue, 15 Jun 2021 21:57:55 +0200 Subject: [PATCH] Better secrets output --- crawler/colly.go | 25 ++++++++++++++----------- main.go | 2 +- scanner/secrets.go | 1 + 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/crawler/colly.go b/crawler/colly.go index 72af3d1..d1198fa 100644 --- a/crawler/colly.go +++ b/crawler/colly.go @@ -156,11 +156,7 @@ func Crawler(target string, txt string, html string, delayTime int, concurrency // HERE SCAN FOR SECRETS if secrets { secretsSlice := huntSecrets(secretsFile, r.Request.URL.String(), string(r.Body)) - for _, elem := range secretsSlice { - - secretFound := scanner.SecretMatched{Secret: elem, Url: r.Request.URL.String()} - Finalsecrets = append(Finalsecrets, secretFound) - } + Finalsecrets = append(Finalsecrets, secretsSlice...) } // HERE SCAN FOR ENDPOINTS if endpoints { @@ -192,24 +188,31 @@ func Crawler(target string, txt string, html string, delayTime int, concurrency } //huntSecrets hunts for secrets -func huntSecrets(secretsFile []string, target string, body string) []scanner.Secret { - secrets := SecretsMatch(body, secretsFile) +func huntSecrets(secretsFile []string, target string, body string) []scanner.SecretMatched { + secrets := SecretsMatch(target, body, secretsFile) return secrets } //SecretsMatch checks if a body matches some secrets -func SecretsMatch(body string, secretsFile []string) []scanner.Secret { - var secrets []scanner.Secret +func SecretsMatch(url string, body string, secretsFile []string) []scanner.SecretMatched { + var secrets []scanner.SecretMatched if len(secretsFile) == 0 { for _, secret := range scanner.GetRegexes() { if matched, err := regexp.Match(secret.Regex, []byte(body)); err == nil && matched { - secrets = append(secrets, secret) + re := regexp.MustCompile(secret.Regex) + match := re.FindStringSubmatch(body) + secretFound := scanner.SecretMatched{Secret: secret, Url: url, Match: match[0]} + secrets = append(secrets, secretFound) } } } else { for _, secret := range secretsFile { if matched, err := regexp.Match(secret, []byte(body)); err == nil && matched { - secrets = append(secrets, scanner.Secret{Name: "CustomFromFile", Description: "", Regex: secret, Poc: ""}) + re := regexp.MustCompile(secret) + match := re.FindStringSubmatch(body) + secretScanned := scanner.Secret{Name: "CustomFromFile", Description: "", Regex: secret, Poc: ""} + secretFound := scanner.SecretMatched{Secret: secretScanned, Url: url, Match: match[0]} + secrets = append(secrets, secretFound) } } } diff --git a/main.go b/main.go index caabd53..9a4afe0 100644 --- a/main.go +++ b/main.go @@ -113,7 +113,7 @@ func main() { // if needed print secrets if !flags.Plain && len(finalSecret) != 0 { for _, elem := range finalSecret { - output.EncapsulateCustomGreen(elem.Secret.Name, "Found in "+elem.Url+" "+elem.Secret.Regex+" matched!") + output.EncapsulateCustomGreen(elem.Secret.Name, elem.Match+" in "+elem.Url) } } diff --git a/scanner/secrets.go b/scanner/secrets.go index bacb426..15792dd 100644 --- a/scanner/secrets.go +++ b/scanner/secrets.go @@ -34,6 +34,7 @@ type Secret struct { type SecretMatched struct { Secret Secret Url string + Match string } //GetRegexes returns all the regexes