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 6f1b786bccb1572d2b2d187e820ba6aae58f6270
parent 7b7e797163741d94f6dbf0f7b361ff39d381ab6c
Author: djnn <[email protected]>
Date: Tue, 3 Dec 2024 17:46:45 +0900

wip(osint): dorks OK

Diffstat:
Mcli/parser.go | 74+++++++++++++++++++++++++++++++++-----------------------------------------
Mgo.mod | 21++++++++++++++++++++-
Mgo.sum | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mhelpers/directories.go | 21+++++++++++++++++++++
Ahelpers/file.go | 32++++++++++++++++++++++++++++++++
Mhelpers/net.go | 14++++++++++++++
Aosint/dorks.go | 36++++++++++++++++++++++++++++++++++++
Mosint/run.go | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

8 files changed, 296 insertions(+), 42 deletions(-)

diff --git a/cli/parser.go b/cli/parser.go
@@ -3,10 +3,12 @@ package cli
 import (
 	"fmt"
 	"os"
+	"strings"
 
 	"github.com/spf13/cobra"
 
-	helpers "evil.djnn.sh/djnn/yellow/helpers"
+	"evil.djnn.sh/djnn/yellow/helpers"
+	"evil.djnn.sh/djnn/yellow/osint"
 )
 
 func GetParser(opts *StandardOptions) *cobra.Command {
@@ -14,7 +16,7 @@ func GetParser(opts *StandardOptions) *cobra.Command {
 	var osintCmd = &cobra.Command{
 		Use:   "osint",
 		Short: "Run OSINT tools to retrieve IP addresses and interesting assets",
-		Long:  "Runs subfinder & dnsx on all domains to find subdomains which are passed to httpx. Also runs google dorks.",
+		Long:  "Runs dorks, subfinder, assetfinder & dnsx on all domains to find subdomains & assets, which are passed on to httpx and finally gowitness",
 		Args:  cobra.MinimumNArgs(0),
 		Run: func(cmd *cobra.Command, args []string) {
 
@@ -24,32 +26,32 @@ func GetParser(opts *StandardOptions) *cobra.Command {
 				os.Exit(1)
 			}
 
-			helpers.CheckProxy(opts.Proxy)
-			helpers.DisplayNetInfo()
+			helper.CheckProxy(opts.Proxy)
+			helper.DisplayNetInfo()
 
-			if opts.OutDirName == "" || !helpers.Exists(opts.OutDirName) {
+			if opts.OutDirName == "" || !helper.Exists(opts.OutDirName) {
 				println("[!] collected assets will be sent to current working directory")
 			}
 
-			/*
-				createOutDirectory()
-				checkProxy()
-				displayNetInfo()
+			osintOpts := osint.OsintOpts{}
+			osintOpts.SetDomain(opts.OutDirName)
+			osintOpts.SetScanPath(opts.OutDirName)
+			osintOpts.SetProxy(opts.Proxy)
+			osintOpts.SetDryRun(opts.RunDry)
 
-				if targetPath == "" {
-					scanDomain(domain)
-					return
-				}
-
-				scanner := loadTargetFile()
-				defer scanner.Close()
+			if opts.TargetFilePath == "" {
+				osintOpts.Run()
+				return
+			}
 
-				for scanner.Scan() {
-					targetDomain := scanner.Text()
-					scanDomain(targetDomain)
-				}
-			*/
+			scanner := helper.LoadTargetFile(opts.TargetFilePath)
+			defer scanner.Close()
 
+			for scanner.Scan() {
+				targetDomain := scanner.Text()
+				osintOpts.SetDomain(targetDomain)
+				osintOpts.Run()
+			}
 		},
 	}
 
@@ -66,24 +68,14 @@ func GetParser(opts *StandardOptions) *cobra.Command {
 				os.Exit(1)
 			}
 
-			dirname := helpers.ReplaceWithHyphen(opts.OutDirName)
-			fmt.Println("[+] setting up directory architecture for", dirname)
-
-			_ = os.MkdirAll(dirname, 0775)
-			helpers.CreateDirectory(dirname, []helpers.Folder{
-				{
-					Name:     "scans",
-					Children: helpers.FolderNameFactory("nmap", "infra", "web", "ssl", "screenshots", "nessus"),
-				},
-				{
-					Name:     "extracted",
-					Children: helpers.FolderNameFactory("assets", "creds", "code"),
-				},
-				{
-					Name:     "www",
-					Children: helpers.FolderNameFactory("exploits", "tools"),
-				},
-			})
+			if strings.Contains(opts.OutDirName, ",") {
+				directories := strings.Split(opts.OutDirName, ",")
+				for _, d := range directories {
+					helper.SetUpDirectoryArchitecture(d)
+				}
+			} else {
+				helper.SetUpDirectoryArchitecture(opts.OutDirName)
+			}
 
 			fmt.Println("[+] Done. Happy hunting :)~")
 		},
@@ -91,10 +83,10 @@ func GetParser(opts *StandardOptions) *cobra.Command {
 
 	defaults := GetDefaultOptions()
 	var rootCmd = createDirectories
-	rootCmd.Flags().StringVarP(&opts.OutDirName, "dir-name", "d", defaults.OutDirName, "Pentest target, will be the name of the directories created, for instance")
+	rootCmd.Flags().StringVarP(&opts.OutDirName, "dir-name", "d", defaults.OutDirName, "Directory name to create (you can also put multiple names and separate them with a ,)")
 
 	rootCmd.AddCommand(osintCmd)
-	osintCmd.Flags().StringVarP(&opts.OutDirName, "dir-name", "d", defaults.OutDirName, "Pentest target, will be the name of the directories created, for instance")
+	osintCmd.Flags().StringVarP(&opts.OutDirName, "dir-name", "d", defaults.OutDirName, "Outfile directory name (if no target-file is specified, will also be target domain)")
 	osintCmd.Flags().StringVarP(&opts.Proxy, "proxy", "p", defaults.Proxy, "Proxy URL (used for the tools supporting it. Other will prompt a warning msg)")
 	osintCmd.Flags().BoolVarP(&opts.RunDry, "dry", "", defaults.RunDry, "Run a dry-run (test mode)")
 	osintCmd.Flags().BoolVarP(&opts.UseHttpInsecure, "insecure", "k", defaults.UseHttpInsecure, "Ignore SSL warnings and force http")
diff --git a/go.mod b/go.mod
@@ -2,9 +2,28 @@ module evil.djnn.sh/djnn/yellow
 
 go 1.23
 
-require github.com/spf13/cobra v1.8.1
+require (
+	github.com/bogdzn/gork v0.0.5
+	github.com/spf13/cobra v1.8.1
+)
 
 require (
+	github.com/PuerkitoBio/goquery v1.5.0 // indirect
+	github.com/andybalholm/cascadia v1.0.0 // indirect
+	github.com/antchfx/htmlquery v1.0.0 // indirect
+	github.com/antchfx/xmlquery v1.0.0 // indirect
+	github.com/antchfx/xpath v1.0.0 // indirect
+	github.com/gobwas/glob v0.2.3 // indirect
+	github.com/gocolly/colly/v2 v2.0.1 // indirect
+	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/kennygrant/sanitize v1.2.4 // indirect
+	github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/temoto/robotstxt v1.1.1 // indirect
+	golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect
+	golang.org/x/text v0.3.7 // indirect
+	golang.org/x/time v0.2.0 // indirect
+	google.golang.org/appengine v1.6.7 // indirect
+	google.golang.org/protobuf v1.27.1 // indirect
 )
diff --git a/go.sum b/go.sum
@@ -1,10 +1,79 @@
+github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
+github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
+github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o=
+github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
+github.com/antchfx/htmlquery v1.0.0 h1:O5IXz8fZF3B3MW+B33MZWbTHBlYmcfw0BAxgErHuaMA=
+github.com/antchfx/htmlquery v1.0.0/go.mod h1:MS9yksVSQXls00iXkiMqXr0J+umL/AmxXKuP28SUJM8=
+github.com/antchfx/xmlquery v1.0.0 h1:YuEPqexGG2opZKNc9JU3Zw6zFXwC47wNcy6/F8oKsrM=
+github.com/antchfx/xmlquery v1.0.0/go.mod h1:/+CnyD/DzHRnv2eRxrVbieRU/FIF6N0C+7oTtyUtCKk=
+github.com/antchfx/xpath v1.0.0 h1:Q5gFgh2O40VTSwMOVbFE7nFNRBu3tS21Tn0KAWeEjtk=
+github.com/antchfx/xpath v1.0.0/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
+github.com/bogdzn/gork v0.0.5 h1:TZSgOZusNLjBln63egugGtxZnZtVXvXZ5HHFEKTVnZ4=
+github.com/bogdzn/gork v0.0.5/go.mod h1:SzLFtdsDZ0iVyF6ALfEvuo5niTvdRKuavvmAcpMivao=
 github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
+github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
+github.com/gocolly/colly/v2 v2.0.1 h1:GGPzBEdrEsavhzVK00FQXMMHBHRpwrbbCCcEKM/0Evw=
+github.com/gocolly/colly/v2 v2.0.1/go.mod h1:ePrRZlJcLTU2C/f8pJzXfkdBtBDHL5hOaKLcBoiJcq8=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/jawher/mow.cli v1.1.0/go.mod h1:aNaQlc7ozF3vw6IJ2dHjp2ZFiA4ozMIYY6PyuRJwlUg=
+github.com/kennygrant/sanitize v1.2.4 h1:gN25/otpP5vAsO2djbMhF/LQX6R7+O1TB4yv8NzpJ3o=
+github.com/kennygrant/sanitize v1.2.4/go.mod h1:LGsjYYtgxbetdg5owWB2mpgUL6e2nfw2eObZ0u0qvak=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI=
+github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
 github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
 github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/temoto/robotstxt v1.1.1 h1:Gh8RCs8ouX3hRSxxK7B1mO5RFByQ4CmJZDwgom++JaA=
+github.com/temoto/robotstxt v1.1.1/go.mod h1:+1AmkuG3IYkh1kv0d2qEB9Le88ehNO0zwOr3ujewlOo=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c=
+golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE=
+golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/helpers/directories.go b/helpers/directories.go
@@ -10,6 +10,27 @@ type Folder struct {
 	Children []Folder
 }
 
+func SetUpDirectoryArchitecture(target string) {
+	dirname := ReplaceWithHyphen(target)
+	fmt.Println("[+] setting up directory architecture for", dirname)
+
+	_ = os.MkdirAll(dirname, 0775)
+	CreateDirectory(dirname, []Folder{
+		{
+			Name:     "scans",
+			Children: FolderNameFactory("nmap", "infra", "web", "ssl", "screenshots", "nessus"),
+		},
+		{
+			Name:     "extracted",
+			Children: FolderNameFactory("assets", "creds", "code"),
+		},
+		{
+			Name:     "www",
+			Children: FolderNameFactory("exploits", "tools"),
+		},
+	})
+}
+
 func Exists(path string) bool {
 	_, err := os.Stat(path)
 	if err == nil {
diff --git a/helpers/file.go b/helpers/file.go
@@ -0,0 +1,32 @@
+package helper
+
+import (
+	"bufio"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+	"strings"
+)
+
+type FileScanner struct {
+	io.Closer
+	*bufio.Scanner
+}
+
+func LoadTargetFile(targetPath string) *FileScanner {
+	file, err := os.Open(targetPath)
+	if err != nil {
+		fmt.Printf("%v, %+v", err, targetPath)
+	}
+
+	scanner := bufio.NewScanner(file)
+	body, err := ioutil.ReadFile(targetPath)
+	if err != nil {
+		fmt.Printf("%v, %+v", err, targetPath)
+	}
+
+	fmt.Println("Loaded target: \n%v", strings.Replace(string(body), "\n", ", ", -1))
+
+	return &FileScanner{file, scanner}
+}
diff --git a/helpers/net.go b/helpers/net.go
@@ -6,8 +6,22 @@ import (
 	"net/http"
 	"net/url"
 	"os"
+	"strings"
 )
 
+func ParseDomain(website string) string {
+	if strings.HasPrefix(website, "http") {
+		parsedUrl, err := url.Parse(website)
+		if err != nil {
+			fmt.Printf("%s", err)
+		}
+
+		website = parsedUrl.Host
+	}
+
+	return website
+}
+
 func GetHttpTransport() *http.Transport {
 	var proxy = os.Getenv("HTTP_PROXY")
 	url, err := url.Parse(proxy)
diff --git a/osint/dorks.go b/osint/dorks.go
@@ -0,0 +1,36 @@
+package osint
+
+import (
+	"fmt"
+
+	dorks "github.com/bogdzn/gork/cmd"
+)
+
+type Dorks struct {
+	outfile string
+	proxy   string
+}
+
+func (d *Dorks) Info(url string) {
+	fmt.Println("[+] Running dorks on %s", url)
+}
+
+func (d *Dorks) Configure(c interface{}) {
+	d.outfile = c.(map[string]interface{})["outfile"].(string)
+	d.proxy = c.(map[string]interface{})["proxy"].(string)
+}
+
+func (d *Dorks) Run(domain string) {
+	opts := &dorks.Options{
+		Proxy:         d.proxy,
+		Outfile:       d.outfile,
+		AppendResults: false,
+		Extensions:    dorks.DefaultFileExtensions(),
+		Exclusions:    dorks.DefaultExclusions(),
+		UserAgent:     dorks.DefaultUserAgent(),
+		Target:        domain,
+	}
+
+	dorks.Run(opts)
+	fmt.Printf("[OSINT %s] Dorks are stored in %s", domain, d.outfile)
+}
diff --git a/osint/run.go b/osint/run.go
@@ -1 +1,72 @@
 package osint
+
+import (
+	"fmt"
+)
+
+type OsintOpts struct {
+	domain   string
+	scanPath string
+	proxy    string
+	dryRun   bool
+}
+
+func (opts *OsintOpts) SetDomain(domain string) {
+	opts.domain = domain
+}
+
+func (opts *OsintOpts) SetScanPath(data string) {
+	opts.scanPath = data
+}
+
+func (opts *OsintOpts) SetProxy(data string) {
+	opts.proxy = data
+}
+
+func (opts *OsintOpts) SetDryRun(data bool) {
+	opts.dryRun = data
+}
+
+func (opts OsintOpts) runGoogleDorks() {
+
+	dorks := Dorks{}
+	dorksCfg := make(map[string]interface{})
+
+	dorksOutfile := fmt.Sprintf("%s/dorks_%s.txt", opts.scanPath, opts.domain)
+	dorksCfg["outfile"] = dorksOutfile
+	dorksCfg["proxy"] = opts.proxy
+
+	dorks.Configure(dorksCfg)
+	dorks.Info(opts.domain)
+	if !opts.dryRun {
+		dorks.Run(opts.domain)
+	}
+}
+
+func (opts OsintOpts) runAssetfinder() {
+
+}
+
+func (opts OsintOpts) runDnsx() {
+
+}
+
+func (opts OsintOpts) runHttpx() {
+
+}
+
+func (opts OsintOpts) runGowitness() {
+
+}
+
+func (opts OsintOpts) Run() {
+	fmt.Printf("\n[OSINT] domain: %s\n\n", opts.domain)
+
+	opts.runGoogleDorks()
+	opts.runAssetfinder()
+	opts.runDnsx()
+	opts.runHttpx()
+	opts.runGowitness()
+
+	fmt.Printf("[OSINT %s] done.\n", opts.domain)
+}