yellow.git


yellow

~ opinionated web scanning pipeline for pentesters in a hurry
git clone https://github.com/djnnvx/yellow.git
log | files | refs | archive | README | LICENSE

leaker.go (1884B)

      1 package osint
      2 
      3 import (
      4 	"context"
      5 	"fmt"
      6 	"io"
      7 	"os"
      8 	"time"
      9 
     10 	"evil.djnn.sh/djnn/yellow/core"
     11 	"github.com/vflame6/leaker/runner"
     12 )
     13 
     14 type Leaker struct{}
     15 
     16 func (*Leaker) Name() string { return "leaker" }
     17 
     18 func (*Leaker) Run(ctx *core.Context) error {
     19 	fmt.Printf("[+] Running leaker for credential leak checking (target: %s)\n", ctx.Domain)
     20 
     21 	emailsFile := ctx.EmailsFile
     22 	if emailsFile != "" {
     23 		fmt.Printf("    Emails file: %s\n", emailsFile)
     24 	}
     25 
     26 	providerConfig := os.Getenv("LEAKER_PROVIDER_CONFIG")
     27 	if providerConfig != "" {
     28 		fmt.Printf("    Provider config: %s\n", providerConfig)
     29 	}
     30 
     31 	if ctx.DryRun {
     32 		return nil
     33 	}
     34 
     35 	if emailsFile == "" {
     36 		fmt.Println("[!] Leaker: no emails file provided, skipping")
     37 		return nil
     38 	}
     39 	if _, err := os.Stat(emailsFile); os.IsNotExist(err) {
     40 		fmt.Printf("[!] Leaker: emails file %s does not exist, skipping\n", emailsFile)
     41 		return nil
     42 	}
     43 
     44 	outfile := fmt.Sprintf("%s/leaks.txt", ctx.ScanPath)
     45 
     46 	emailsReader, err := os.Open(emailsFile)
     47 	if err != nil {
     48 		fmt.Printf("[!] Leaker: failed to open emails file: %v\n", err)
     49 		return nil
     50 	}
     51 	defer emailsReader.Close()
     52 
     53 	outFile, err := os.Create(outfile)
     54 	if err != nil {
     55 		fmt.Printf("[!] Leaker: failed to create output file: %v\n", err)
     56 		return nil
     57 	}
     58 	defer outFile.Close()
     59 
     60 	opts := &runner.Options{
     61 		Timeout:        60 * time.Second,
     62 		OutputFile:     outfile,
     63 		ProviderConfig: providerConfig,
     64 		Quiet:          true,
     65 	}
     66 	if ctx.Proxy != "" {
     67 		opts.Proxy = ctx.Proxy
     68 	}
     69 
     70 	r, err := runner.NewRunner(opts)
     71 	if err != nil {
     72 		fmt.Printf("[!] Leaker: failed to create runner: %v\n", err)
     73 		return nil
     74 	}
     75 
     76 	if err := r.EnumerateMultipleTargets(context.Background(), emailsReader, []io.Writer{outFile}); err != nil {
     77 		fmt.Printf("[!] Leaker: enumeration failed: %v\n", err)
     78 		return nil
     79 	}
     80 
     81 	fmt.Printf("[OSINT %s] Leaker results are stored in %s\n", ctx.Domain, outfile)
     82 	return nil
     83 }