diff --git a/README.md b/README.md index f350ab2..3875298 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Blink is a DNS bruteforcer made in Go ## Features + UDP query ++ Verifying query + IPv4/IPv6 support + Wildcard detection diff --git a/v1/cmd/blink/main.go b/v1/cmd/blink/main.go index e1c0122..bbc727c 100644 --- a/v1/cmd/blink/main.go +++ b/v1/cmd/blink/main.go @@ -210,6 +210,7 @@ func init() { rootCmd.Flags().BoolVarP(&opts.IPv6, "ipv6", "i", false, "Query for IPv6") rootCmd.Flags().BoolVarP(&wildcard, "wildcard", "d", false, "Query for wildcard") rootCmd.Flags().IntVarP(&opts.Timeout, "timeout", "t", 5, "Query timeout") + rootCmd.Flags().BoolVarP(&opts.Verify, "verify", "y", false, "Verify query") rootCmd.Flags().IntVarP(&opts.Threads, "threads", "c", 1, "Concurrent threads") rootCmd.Flags().BoolVarP(&verbose, "verbose", "v", false, "Verbose logging") diff --git a/v1/pkg/dns/dns.go b/v1/pkg/dns/dns.go index 316af38..39b4509 100644 --- a/v1/pkg/dns/dns.go +++ b/v1/pkg/dns/dns.go @@ -11,6 +11,7 @@ import ( type Query struct { Client *dns.Client // DNS client IPv6 bool // IPv6 mode + Verify bool // Verify mode Resolvers []string // Target resolvers Domain string // Target domain Subdomain string // Target subdomain diff --git a/v1/pkg/dns/query.go b/v1/pkg/dns/lookup.go similarity index 89% rename from v1/pkg/dns/query.go rename to v1/pkg/dns/lookup.go index f0b9f0f..fce462c 100644 --- a/v1/pkg/dns/query.go +++ b/v1/pkg/dns/lookup.go @@ -45,6 +45,15 @@ func (q *Query) Lookup() { return } + // Verify check + if q.Verify { + if Verify(q.Subdomain) { + result.Error = errors.New(fmt.Sprintf("Could not verify %s", q.Subdomain)) + q.Results <- result + return + } + } + // Store IPs var ips []string diff --git a/v1/pkg/dns/verify.go b/v1/pkg/dns/verify.go new file mode 100644 index 0000000..fe97d4d --- /dev/null +++ b/v1/pkg/dns/verify.go @@ -0,0 +1,15 @@ +package dns + +import ( + "net/http" +) + +// Verify subdomain +func Verify(subdomain string) bool { + _, err := http.Get(subdomain) + if err != nil { + return false + } + + return true +} diff --git a/v1/pkg/runner/options.go b/v1/pkg/runner/options.go index 457f7dc..bab1f6c 100644 --- a/v1/pkg/runner/options.go +++ b/v1/pkg/runner/options.go @@ -12,12 +12,12 @@ type Options struct { UDP bool // Query using UDP IPv6 bool // Query for IPv6 Timeout int // Query timeout + Verify bool // Verify query Threads int // Concurrent threads OnResult OnResultFunc // Result handler // Todo // ENT bool // Query for ENT - // Verify bool // Verify query } // Result handler function diff --git a/v1/pkg/runner/runner.go b/v1/pkg/runner/runner.go index a77c26d..d9d6624 100644 --- a/v1/pkg/runner/runner.go +++ b/v1/pkg/runner/runner.go @@ -64,6 +64,7 @@ func (r *Runner) Submit() { query := &dns.Query{ Client: r.client, IPv6: r.options.IPv6, + Verify: r.options.Verify, Resolvers: r.options.Resolvers, Domain: domain, Subdomain: word + "." + domain,