├── getallurls └── README.md ├── form2json ├── README.md └── form2json.go ├── awscheck └── main.go ├── composer-find └── composer.go ├── uwords └── uwords.go └── wadl2cli └── main.go /getallurls/README.md: -------------------------------------------------------------------------------- 1 | # moved 2 | moved to it's own repo: https://github.com/lc/gau 3 | -------------------------------------------------------------------------------- /form2json/README.md: -------------------------------------------------------------------------------- 1 | ## form2json 2 | form2json takes form values from stdin and turns it into json 3 | -------------------------------------------------------------------------------- /awscheck/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "io/ioutil" 7 | "log" 8 | "os" 9 | ) 10 | 11 | type AWSKeys struct { 12 | AccessKeyID string `json:"AccessKeyId"` 13 | SecretAccessKey string `json:"SecretAccessKey"` 14 | Token string `json:"Token"` 15 | } 16 | 17 | func main() { 18 | dat, err := ioutil.ReadAll(os.Stdin) 19 | if err != nil { 20 | log.Fatal(err) 21 | } 22 | keys := new(AWSKeys) 23 | err = json.Unmarshal(dat, keys) 24 | if err != nil { 25 | log.Fatalf("error unmarshalling input, bad json provided on input: %v\n", err) 26 | } 27 | fmt.Printf("export AWS_ACCESS_KEY_ID=%s\n", keys.AccessKeyID) 28 | fmt.Printf("export AWS_SECRET_ACCESS_KEY=%s\n", keys.SecretAccessKey) 29 | fmt.Printf("export AWS_SESSION_TOKEN=%s\n", keys.Token) 30 | } 31 | -------------------------------------------------------------------------------- /form2json/form2json.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bufio" 5 | "encoding/json" 6 | "fmt" 7 | "log" 8 | "os" 9 | "strings" 10 | ) 11 | 12 | func main() { 13 | sc := bufio.NewScanner(os.Stdin) 14 | for sc.Scan() { 15 | var jsonmap = make(map[string]string) 16 | input := sc.Text() 17 | amp := strings.Split(input, "&") 18 | if len(amp) > 0 { 19 | for _, pair := range amp { 20 | key, val := splitter(pair) 21 | if key != "" { 22 | jsonmap[key] = val 23 | } 24 | } 25 | } else { 26 | key, val := splitter(input) 27 | if key != "" { 28 | jsonmap[key] = val 29 | } 30 | } 31 | out, err := json.Marshal(jsonmap) 32 | if err != nil { 33 | log.Fatalf("could not marshal map: %v", err) 34 | } 35 | fmt.Println(string(out)) 36 | } 37 | } 38 | func splitter(keyval string) (string, string) { 39 | tmp := strings.Split(keyval, "=") 40 | if len(tmp) == 2 { 41 | return tmp[0], tmp[1] 42 | } 43 | return "", "" 44 | } 45 | -------------------------------------------------------------------------------- /composer-find/composer.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "crypto/tls" 5 | "encoding/json" 6 | "fmt" 7 | "log" 8 | "net/http" 9 | "os" 10 | "strings" 11 | "time" 12 | ) 13 | 14 | type Lock struct { 15 | Packages []struct { 16 | Name string `json:"name"` 17 | Version string `json:"version"` 18 | Source struct { 19 | URL string `json:"url"` 20 | Ref string `json:"reference"` 21 | } `json:"source"` 22 | } `json:"packages"` 23 | } 24 | 25 | func main() { 26 | c := &http.Client{ 27 | Transport: &http.Transport{ 28 | TLSClientConfig: &tls.Config{ 29 | InsecureSkipVerify: true, 30 | }, 31 | }, 32 | Timeout: time.Duration(10) * time.Second, 33 | } 34 | if (len(os.Args)) < 2 { 35 | fmt.Printf("[*] Usage: %s http://url/composer.lock\n", os.Args[0]) 36 | os.Exit(1) 37 | } 38 | resp, err := c.Get(os.Args[1]) 39 | if err != nil { 40 | log.Fatalf("Error: %v\n", err) 41 | } 42 | defer resp.Body.Close() 43 | l := Lock{} 44 | if err = json.NewDecoder(resp.Body).Decode(&l); err != nil { 45 | log.Fatalf("error decoding json: %v", err) 46 | } 47 | var url string 48 | for _, pkg := range l.Packages { 49 | url = pkg.Source.URL 50 | if strings.Contains(pkg.Source.URL, "https://github.com/") { 51 | x := strings.Split(pkg.Source.URL, ".git") 52 | url = fmt.Sprintf("%s/tree/%s", x[0], pkg.Source.Ref) 53 | } 54 | fmt.Printf("%s (%s) -> %s\n", pkg.Name, pkg.Version, url) 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /uwords/uwords.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // uwords.go by corben leo (@hacker_) 4 | // gets all unique words given a host 5 | // and a list of paths 6 | 7 | import ( 8 | "bytes" 9 | "crypto/tls" 10 | "fmt" 11 | "io/ioutil" 12 | "log" 13 | "net/http" 14 | "os" 15 | "regexp" 16 | "sort" 17 | "strings" 18 | "time" 19 | ) 20 | 21 | func main() { 22 | data := &bytes.Buffer{} 23 | if len(os.Args) < 2 { 24 | fmt.Printf("Usage: %s url\n", os.Args[0]) 25 | os.Exit(1) 26 | } 27 | client := &http.Client{ 28 | Transport: &http.Transport{ 29 | TLSClientConfig: &tls.Config{ 30 | InsecureSkipVerify: true, 31 | }, 32 | }, 33 | Timeout: time.Duration(10) * time.Second, 34 | } 35 | tg := os.Args[1] 36 | resp, err := client.Get(tg) 37 | if err != nil { 38 | log.Fatalf("Error: %v", err) 39 | } 40 | defer resp.Body.Close() 41 | body, err := ioutil.ReadAll(resp.Body) 42 | if err != nil { 43 | log.Fatalf("Error reading body: %v", err) 44 | } 45 | data.Write(body) 46 | 47 | words := regexp.MustCompile(`[^a-zA-Z0-9_-]`).Split(data.String(), -1) 48 | if words != nil { 49 | sort.Strings(words) 50 | res := dupe(words) 51 | for _, word := range res { 52 | word = strings.Replace(word, " ", "", -1) 53 | word = strings.Replace(word, "\n", "", -1) 54 | word = strings.Replace(word, "--", "", -1) 55 | word = strings.TrimPrefix(word, "-") 56 | word = strings.TrimSpace(strings.Replace(word, " ", " ", -1)) 57 | if word != "" { 58 | fmt.Println(word) 59 | } 60 | } 61 | } 62 | } 63 | 64 | // taken from subfinder 65 | // libsubfinder/helper/misc.go#L51 66 | func dupe(elements []string) []string { 67 | // Use map to record duplicates as we find them. 68 | encountered := make(map[string]struct{}) 69 | 70 | result := []string{} 71 | for _, v := range elements { 72 | if _, ok := encountered[v]; !ok { 73 | // Record this element as an encountered element. 74 | encountered[v] = struct{}{} 75 | // Append to result slice. 76 | result = append(result, v) 77 | } 78 | } 79 | // Return the new slice. 80 | return result 81 | } 82 | -------------------------------------------------------------------------------- /wadl2cli/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "crypto/tls" 5 | "encoding/xml" 6 | "flag" 7 | "fmt" 8 | "io/ioutil" 9 | "log" 10 | "net" 11 | "net/http" 12 | "os" 13 | "strings" 14 | "time" 15 | ) 16 | 17 | type WadlApp struct { 18 | Resources struct { 19 | Text string `xml:",chardata"` 20 | Base string `xml:"base,attr"` 21 | Resource []struct { 22 | Text string `xml:",chardata"` 23 | Path string `xml:"path,attr"` 24 | Resource []struct { 25 | Text string `xml:",chardata"` 26 | Path string `xml:"path,attr"` 27 | Param []struct { 28 | Text string `xml:",chardata"` 29 | Xs string `xml:"xs,attr"` 30 | Name string `xml:"name,attr"` 31 | Style string `xml:"style,attr"` 32 | Type string `xml:"type,attr"` 33 | } `xml:"param"` 34 | Method struct { 35 | Text string `xml:",chardata"` 36 | ID string `xml:"id,attr"` 37 | Name string `xml:"name,attr"` 38 | } `xml:"method"` 39 | } `xml:"resource"` 40 | } `xml:"resource"` 41 | } `xml:"resources"` 42 | } 43 | 44 | func main() { 45 | url := flag.String("u", "", "url of application.wadl file") 46 | paramsOnly := flag.Bool("p", false, "dump all params only") 47 | flag.Parse() 48 | 49 | if *url == "" { 50 | flag.PrintDefaults() 51 | os.Exit(1) 52 | } 53 | cl := &http.Client{ 54 | Transport: &http.Transport{ 55 | TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 56 | DialContext: (&net.Dialer{ 57 | Timeout: 10 * time.Second, 58 | }).DialContext, 59 | }, 60 | CheckRedirect: func(req *http.Request, via []*http.Request) error { 61 | return http.ErrUseLastResponse 62 | }, 63 | } 64 | 65 | resp, err := cl.Get(*url) 66 | if err != nil { 67 | log.Fatal(err) 68 | } 69 | body, err := ioutil.ReadAll(resp.Body) 70 | if err != nil { 71 | log.Fatal(err) 72 | } 73 | var wadl WadlApp 74 | err = xml.Unmarshal(body, &wadl) 75 | if err != nil { 76 | log.Fatal(err) 77 | } 78 | resources := wadl.Resources 79 | apiBase := resources.Base 80 | if *paramsOnly { 81 | for _, re := range resources.Resource { 82 | for _, me := range re.Resource { 83 | for _, fs := range me.Param { 84 | fmt.Printf("%s\n", fs.Name) 85 | } 86 | } 87 | } 88 | } else { 89 | for _, re := range resources.Resource { 90 | base := fmt.Sprintf("%s%s", apiBase, strings.TrimPrefix(re.Path, "/")) 91 | for _, me := range re.Resource { 92 | fmt.Printf("%s %s%s\n", me.Method.Name, base, me.Path) 93 | } 94 | } 95 | } 96 | } 97 | --------------------------------------------------------------------------------