yellow~ opinionated web scanning pipeline for pentesters in a hurry |
| git clone https://github.com/djnnvx/yellow.git |
| log | files | refs | archive | README | LICENSE |
dnsx.go (2105B)
1 package osint 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "net" 8 "os" 9 10 "evil.djnn.sh/djnn/yellow/core" 11 "github.com/projectdiscovery/dnsx/libs/dnsx" 12 ) 13 14 type Dnsx struct{} 15 16 func (*Dnsx) Name() string { return "dnsx" } 17 18 func (*Dnsx) Run(ctx *core.Context) error { 19 fmt.Println("[+] Running dnsx on ", ctx.Domain) 20 if ctx.DryRun { 21 return nil 22 } 23 24 outfile := fmt.Sprintf("%s/dnsx.json", ctx.ScanPath) 25 domain := ctx.Domain 26 27 dnsClient, err := dnsx.New(dnsx.DefaultOptions) 28 if err != nil { 29 fmt.Printf("err: %v\n", err) 30 return nil 31 } 32 33 result, err := dnsClient.Lookup(domain) 34 if err != nil { 35 fmt.Printf("err: %v\n", err) 36 return nil 37 } 38 for idx, msg := range result { 39 fmt.Printf("%d: %s\n", idx+1, msg) 40 } 41 42 rawResp, err := dnsClient.QueryOne(domain) 43 if err != nil { 44 fmt.Printf("err: %v\n", err) 45 return nil 46 } 47 48 jsonStr, err := rawResp.JSON() 49 if err != nil { 50 fmt.Printf("err: %v\n", err) 51 return nil 52 } 53 54 // Try to unmarshal the DNSX JSON response into a map so we can add TXT records. 55 var obj map[string]any 56 if err := json.Unmarshal([]byte(jsonStr), &obj); err != nil { 57 // If unmarshalling fails, preserve the original JSON under "raw". 58 fmt.Printf("warning: failed to unmarshal DNSX JSON: %v\n", err) 59 obj = map[string]any{"raw": jsonStr} 60 } 61 62 txts, txtErr := net.LookupTXT(domain) 63 if txtErr != nil { 64 fmt.Printf("warning: failed to lookup TXT records for %s: %v\n", domain, txtErr) 65 txts = []string{} 66 } 67 obj["TXTs"] = txts 68 69 modifiedJSON, err := json.Marshal(obj) 70 if err != nil { 71 fmt.Printf("err: %v\n", err) 72 return nil 73 } 74 75 var prettyJSON bytes.Buffer 76 if indentErr := json.Indent(&prettyJSON, modifiedJSON, "", "\t"); indentErr != nil { 77 fmt.Printf("err: %v\n", indentErr) 78 return nil 79 } 80 81 fo, err := os.Create(outfile) 82 if err != nil { 83 fmt.Printf("[!] Dnsx: failed to create %s: %v\n", outfile, err) 84 return nil 85 } 86 defer fo.Close() 87 88 if _, err := fo.Write(prettyJSON.Bytes()); err != nil { 89 fmt.Printf("[!] Dnsx: failed to write %s: %v\n", outfile, err) 90 return nil 91 } 92 93 fmt.Printf("[OSINT %s] Dnsx results are stored in %s\n", domain, outfile) 94 return nil 95 }