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

subfinder.go (1485B)

      1 package osint
      2 
      3 import (
      4 	"bytes"
      5 	"context"
      6 	"fmt"
      7 	"io"
      8 	"log"
      9 	"os"
     10 
     11 	"evil.djnn.sh/djnn/yellow/core"
     12 	"github.com/projectdiscovery/subfinder/v2/pkg/runner"
     13 )
     14 
     15 type Subfinder struct{}
     16 
     17 func (*Subfinder) Name() string { return "subfinder" }
     18 
     19 func (*Subfinder) Run(ctx *core.Context) error {
     20 	fmt.Println("[+] Running subfinder on", ctx.Domain)
     21 	if ctx.DryRun {
     22 		return nil
     23 	}
     24 
     25 	outfile := fmt.Sprintf("%s/subfinder.txt", ctx.ScanPath)
     26 
     27 	subfinderOpts := &runner.Options{
     28 		Threads:            10, // number of threads to use for active enumerations
     29 		Timeout:            15, // seconds to wait for sources to respond
     30 		MaxEnumerationTime: 3,  // max minutes to wait for enumeration
     31 	}
     32 
     33 	log.SetFlags(0)
     34 
     35 	subfinder, err := runner.NewRunner(subfinderOpts)
     36 	if err != nil {
     37 		fmt.Printf("[!] Subfinder: failed to create runner: %v\n", err)
     38 		return nil
     39 	}
     40 
     41 	output := &bytes.Buffer{}
     42 	_, err = subfinder.EnumerateSingleDomainWithCtx(context.Background(), ctx.Domain, []io.Writer{output})
     43 	if err != nil {
     44 		fmt.Printf("[!] Subfinder: failed to enumerate %s: %v\n", ctx.Domain, err)
     45 		return nil
     46 	}
     47 
     48 	fo, err := os.Create(outfile)
     49 	if err != nil {
     50 		fmt.Printf("[!] Subfinder: failed to create %s: %v\n", outfile, err)
     51 		return nil
     52 	}
     53 	defer fo.Close()
     54 
     55 	if _, err := fo.Write(output.Bytes()); err != nil {
     56 		fmt.Printf("[!] Subfinder: failed to write %s: %v\n", outfile, err)
     57 		return nil
     58 	}
     59 
     60 	fmt.Printf("[OSINT %s] Subfinder are stored in %s\n\n", ctx.Domain, outfile)
     61 	return nil
     62 }