Skip to content

Commit

Permalink
Optional unresolved subdomain permutation
Browse files Browse the repository at this point in the history
  • Loading branch information
0xGwyn committed May 17, 2023
1 parent 860307e commit c49065a
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 30 deletions.
24 changes: 13 additions & 11 deletions pkg/runner/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@ import (
)

type Options struct {
domain string
wordlist string
resolver string
fast bool
cleanup bool
verbose bool
all bool
silent bool
enrich bool
output string
permutationTool string
domain string
wordlist string
resolver string
fast bool
cleanup bool
verbose bool
all bool
silent bool
enrich bool
output string
permutationTool string
includeUnresolvedSubs bool
}

func ParseOptions() *Options {
Expand All @@ -44,6 +45,7 @@ func ParseOptions() *Options {
flags.BoolVarP(&options.silent, "silent", "s", false, "Only show resolved subdomains"),
flags.BoolVarP(&options.enrich, "enrich", "en", false, "Enrich flag for alterx"),
flags.StringVarP(&options.permutationTool, "permutation-tool", "pt", "alterx", "Permutation tool (dnsgen or alterx)"),
flags.BoolVarP(&options.includeUnresolvedSubs, "include-unresolved-subs", "ius", false, "Include unresolved subdomains for permutation also"),
)

flags.CreateGroup("output", "Output",
Expand Down
63 changes: 44 additions & 19 deletions pkg/runner/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,33 @@ func (runner *Runner) Start() error {
return err
}

//merge the resolved subdomains and the subfinder output for permulation tools
err = mergeFiles(
path.Join(runner.options.domain, "shuffledns_phase1.out"),
path.Join(runner.options.domain, "subfinder.subs"),
path.Join(runner.options.domain, "permutation.in"),
)
if err != nil {
return err
// check if unresolved subdomains found in phase1 should be added for permutation
if runner.options.includeUnresolvedSubs {
//merge the resolved subdomains and the subfinder output for permulation tools
err = mergeFiles(
path.Join(runner.options.domain, "shuffledns_phase1.out"),
path.Join(runner.options.domain, "subfinder.subs"),
path.Join(runner.options.domain, "permutation.in"),
)
if err != nil {
return err
}

//merge the resolved subdomains and the abuseipdb output for permulation tools
err = mergeFiles(
path.Join(runner.options.domain, "abuseipdb.subs"),
path.Join(runner.options.domain, "permutation.in"),
path.Join(runner.options.domain, "permutation.in"),
)
if err != nil {
return err
}
} else {
// rename shuffledns_phase1.out to permutation.in
err = renameFile(
path.Join(runner.options.domain, "shuffledns_phase1.out"),
path.Join(runner.options.domain, "permutation.in"),
)
}

// either run dnsgen or alterx
Expand All @@ -117,19 +136,16 @@ func (runner *Runner) Start() error {
path.Join(runner.options.domain, "shuffledns_phase2.in"),
runner.options.enrich,
)
if err != nil {
return err
}
} else if runner.options.permutationTool == "dnsgen" {
//run dnsgen on the resolved subdomains and the subfinder output merged file
err = runDnsgen(
path.Join(runner.options.domain, "permutation.in"),
path.Join(runner.options.domain, "shuffledns_phase2.in"),
runner.options.fast,
)
if err != nil {
return err
}
}
if err != nil {
return err
}

//merge permutation.in with shuffledns_phase2.in since dnsgen output does not contain all inputs
Expand All @@ -154,11 +170,20 @@ func (runner *Runner) Start() error {
}

//merge shuffledns_phase1.out with shuffledns_phase2.out
err = mergeFiles(
path.Join(runner.options.domain, "shuffledns_phase1.out"),
path.Join(runner.options.domain, "shuffledns_phase2.out"),
path.Join(runner.options.domain, runner.options.output),
)
//(if include_unresolved_subs is false then use permutation.in instead of shuffledns_phase1.out)
if runner.options.includeUnresolvedSubs {
err = mergeFiles(
path.Join(runner.options.domain, "shuffledns_phase1.out"),
path.Join(runner.options.domain, "shuffledns_phase2.out"),
path.Join(runner.options.domain, runner.options.output),
)
} else {
err = mergeFiles(
path.Join(runner.options.domain, "permutation.in"),
path.Join(runner.options.domain, "shuffledns_phase2.out"),
path.Join(runner.options.domain, runner.options.output),
)
}
if err != nil {
return err
}
Expand Down
9 changes: 9 additions & 0 deletions pkg/runner/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,12 @@ func printResults(file string) error {

return nil
}

func renameFile(old, new string) error {
err := os.Rename(old, new)
if err != nil {
return err
}

return nil
}

0 comments on commit c49065a

Please sign in to comment.