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

commit d4d3a2e16860f1df0cb826122cba91264a89115c
parent 2a3bddc15db2038cd7915a09cbd1a1871cbfdeb4
Author: djnn <[email protected]>
Date: Tue, 3 Dec 2024 19:07:53 +0900

feat(osint): dnsx

Diffstat:
Mgo.mod | 2+-
Aosint/dnsx.go | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mosint/run.go | 11+++++++++++

3 files changed, 80 insertions(+), 1 deletion(-)

diff --git a/go.mod b/go.mod
@@ -4,6 +4,7 @@ go 1.23
 
 require (
 	github.com/bogdzn/gork v0.0.5
+	github.com/projectdiscovery/dnsx v1.2.1
 	github.com/projectdiscovery/subfinder/v2 v2.6.7
 	github.com/spf13/cobra v1.8.1
 	github.com/spiral-sec/assetfinder v0.2.0
@@ -78,7 +79,6 @@ require (
 	github.com/projectdiscovery/blackrock v0.0.1 // indirect
 	github.com/projectdiscovery/cdncheck v1.1.0 // indirect
 	github.com/projectdiscovery/chaos-client v0.5.2 // indirect
-	github.com/projectdiscovery/dnsx v1.2.1 // indirect
 	github.com/projectdiscovery/fastdialer v0.2.9 // indirect
 	github.com/projectdiscovery/goflags v0.1.64 // indirect
 	github.com/projectdiscovery/gologger v1.1.27 // indirect
diff --git a/osint/dnsx.go b/osint/dnsx.go
@@ -0,0 +1,68 @@
+package osint
+
+import (
+	"fmt"
+	"os"
+
+	"github.com/projectdiscovery/dnsx/libs/dnsx"
+)
+
+type Dnsx struct {
+	outfile string
+	proxy   string
+}
+
+func (d *Dnsx) Info(url string) {
+	fmt.Println("[+] Running dnsx on %s", url)
+}
+
+func (d *Dnsx) Configure(c interface{}) {
+	d.outfile = c.(map[string]interface{})["outfile"].(string)
+	d.proxy = c.(map[string]interface{})["proxy"].(string)
+}
+
+func (d *Dnsx) Run(domain string) {
+	dnsClient, err := dnsx.New(dnsx.DefaultOptions)
+	if err != nil {
+		fmt.Printf("err: %v\n", err)
+		return
+	}
+
+	result, err := dnsClient.Lookup(domain)
+	if err != nil {
+		fmt.Printf("err: %v\n", err)
+		return
+	}
+	for idx, msg := range result {
+		fmt.Printf("%d: %s\n", idx+1, msg)
+	}
+
+	rawResp, err := dnsClient.QueryOne(domain)
+	if err != nil {
+		fmt.Printf("err: %v\n", err)
+		return
+	}
+
+	jsonStr, err := rawResp.JSON()
+	if err != nil {
+		fmt.Printf("err: %v\n", err)
+		return
+	}
+	fmt.Println(jsonStr)
+
+	fo, err := os.Create(d.outfile)
+	if err != nil {
+		panic(err)
+	}
+	defer func() {
+		if err := fo.Close(); err != nil {
+			panic(err)
+		}
+	}()
+
+	if _, err := fo.Write([]byte(jsonStr)); err != nil {
+		panic(err)
+	}
+
+	fmt.Printf("[OSINT %s] Dnsx results are stored in %s", domain, d.outfile)
+}
diff --git a/osint/run.go b/osint/run.go
@@ -77,7 +77,18 @@ func (opts OsintOpts) runAssetfinder() {
 }
 
 func (opts OsintOpts) runDnsx() {
+	dnsx := Dnsx{}
+	dnsxCfg := make(map[string]interface{})
 
+	dnsxOutfile := fmt.Sprintf("%s/dnsx_%s.json", opts.scanPath, opts.domain)
+	dnsxCfg["outfile"] = dnsxOutfile
+
+	dnsx.Configure(dnsxCfg)
+	dnsx.Info(opts.domain)
+
+	if !opts.dryRun {
+		dnsx.Run(opts.domain)
+	}
 }
 
 func (opts OsintOpts) runHttpx() {