From 1148888c6a35acf92ccc5aa0d33df8c1b48b023c Mon Sep 17 00:00:00 2001 From: Mzack9999 Date: Thu, 4 Jun 2020 11:29:47 +0200 Subject: [PATCH 1/9] adding docker --- .github/workflows/dockerhub-push.yml | 17 +++++++++++++++++ Dockerfile | 10 ++++++++++ 2 files changed, 27 insertions(+) create mode 100644 .github/workflows/dockerhub-push.yml create mode 100644 Dockerfile diff --git a/.github/workflows/dockerhub-push.yml b/.github/workflows/dockerhub-push.yml new file mode 100644 index 0000000..0a11974 --- /dev/null +++ b/.github/workflows/dockerhub-push.yml @@ -0,0 +1,17 @@ +# dockerhub-push pushes docker build to dockerhub automatically +# on the creation of a new release +name: Publish to Dockerhub on creation of a new release +on: + release: + types: [published] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Publish to Dockerhub Registry + uses: elgohr/Publish-Docker-Github-Action@master + with: + name: projectdiscovery/httpx + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..34798eb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM golang:1.14-alpine AS build-env + +RUN apk add --no-cache --upgrade git openssh-client ca-certificates +RUN go get -u github.com/golang/dep/cmd/dep +WORKDIR /go/src/app + +# Install +RUN go get -u github.com/projectdiscovery/httpx/cmd/httpx + +ENTRYPOINT ["httpx"] \ No newline at end of file From 5ce079d83707f63fef6d9396d36d29bc64166191 Mon Sep 17 00:00:00 2001 From: Mzack9999 Date: Thu, 4 Jun 2020 13:25:52 +0200 Subject: [PATCH 2/9] adding support for cidr --- cmd/httpx/httpx.go | 66 ++++++++++++++++++++++++++++------------- common/iputil/iputil.go | 42 ++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 4 +-- 4 files changed, 90 insertions(+), 24 deletions(-) create mode 100644 common/iputil/iputil.go diff --git a/cmd/httpx/httpx.go b/cmd/httpx/httpx.go index d442b9e..3415b90 100644 --- a/cmd/httpx/httpx.go +++ b/cmd/httpx/httpx.go @@ -14,6 +14,7 @@ import ( customport "github.com/projectdiscovery/httpx/common/customports" "github.com/projectdiscovery/httpx/common/fileutil" "github.com/projectdiscovery/httpx/common/httpx" + "github.com/projectdiscovery/httpx/common/iputil" "github.com/projectdiscovery/httpx/common/stringz" "github.com/remeh/sizedwaitgroup" ) @@ -111,29 +112,29 @@ func main() { } for sc.Scan() { - target := stringz.TrimProtocol(sc.Text()) + for target := range targets(stringz.TrimProtocol(sc.Text())) { + // if no custom ports specified then test the default ones + if len(customport.Ports) == 0 { + wg.Add() + go func(target string) { + defer wg.Done() + analyze(hp, protocol, target, 0, &scanopts, output) + }(target) + } - // if no custom ports specified then test the default ones - if len(customport.Ports) == 0 { - wg.Add() - go func(target string) { - defer wg.Done() - analyze(hp, protocol, target, 0, &scanopts, output) - }(target) - } + // the host name shouldn't have any semicolon - in case remove the port + semicolonPosition := strings.LastIndex(target, ":") + if semicolonPosition > 0 { + target = target[:semicolonPosition] + } - // the host name shouldn't have any semicolon - in case remove the port - semicolonPosition := strings.LastIndex(target, ":") - if semicolonPosition > 0 { - target = target[:semicolonPosition] - } - - for port := range customport.Ports { - wg.Add() - go func(port int) { - defer wg.Done() - analyze(hp, protocol, target, port, &scanopts, output) - }(port) + for port := range customport.Ports { + wg.Add() + go func(port int) { + defer wg.Done() + analyze(hp, protocol, target, port, &scanopts, output) + }(port) + } } } @@ -144,6 +145,29 @@ func main() { wgoutput.Wait() } +// returns all the targets within a cidr range or the single target +func targets(target string) chan string { + results := make(chan string) + go func() { + defer close(results) + + // test if the target is a cidr + if iputil.IsCidr(target) { + cidrIps, err := iputil.Ips(target) + if err != nil { + return + } + for _, ip := range cidrIps { + results <- ip + } + } else { + results <- target + } + + }() + return results +} + type scanOptions struct { Method string VHost bool diff --git a/common/iputil/iputil.go b/common/iputil/iputil.go new file mode 100644 index 0000000..f717c56 --- /dev/null +++ b/common/iputil/iputil.go @@ -0,0 +1,42 @@ +package iputil + +import "net" + +// IsCidr determines if the given ip is a cidr range +func IsCidr(ip string) bool { + _, _, err := net.ParseCIDR(ip) + if err != nil { + return false + } + + return true +} + +// IsIP determines if the given string is a valid ip +func IsIP(ip string) bool { + return net.ParseIP(ip) != nil +} + +// Ips of a cidr +func Ips(cidr string) ([]string, error) { + ip, ipnet, err := net.ParseCIDR(cidr) + if err != nil { + return nil, err + } + + var ips []string + for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) { + ips = append(ips, ip.String()) + } + // remove network address and broadcast address + return ips[1 : len(ips)-1], nil +} + +func inc(ip net.IP) { + for j := len(ip) - 1; j >= 0; j-- { + ip[j]++ + if ip[j] > 0 { + break + } + } +} diff --git a/go.mod b/go.mod index d829f9b..83ec27c 100644 --- a/go.mod +++ b/go.mod @@ -12,5 +12,5 @@ require ( github.com/projectdiscovery/retryablehttp-go v1.0.1 github.com/remeh/sizedwaitgroup v1.0.0 github.com/rs/xid v1.2.1 - golang.org/x/net v0.0.0-20200528225125-3c3fba18258b + golang.org/x/net v0.0.0-20200602114024-627f9648deb9 ) diff --git a/go.sum b/go.sum index a02a06d..947cc64 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b h1:IYiJPiJfzktmDAO1HQiwjMjwjlYKHAL7KzeD544RJPs= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= From dffaaf3eb8233e5f7020dca5bcbe8efbf1adb31b Mon Sep 17 00:00:00 2001 From: Timo Mueller Date: Fri, 5 Jun 2020 13:21:59 +0000 Subject: [PATCH 3/9] Fixed #16 --- cmd/httpx/httpx.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/httpx/httpx.go b/cmd/httpx/httpx.go index d442b9e..4a2d584 100644 --- a/cmd/httpx/httpx.go +++ b/cmd/httpx/httpx.go @@ -224,7 +224,10 @@ retry: // store responses in directory if scanopts.StoreResponse { responsePath := path.Join(scanopts.StoreResponseDirectory, domain+".txt") - ioutil.WriteFile(responsePath, []byte(resp.Raw), 0644) + err := ioutil.WriteFile(responsePath, []byte(resp.Raw), 0644) + if err != nil { + gologger.Fatalf("Could not write response, at path '%s', to disc.", responsePath) + } } output <- Result{URL: fullURL, ContentLength: resp.ContentLength, StatusCode: resp.StatusCode, Title: title, str: builder.String(), VHost: isvhost} From 27bce111745fbb50d333d2f5a8ea75a0f39863cc Mon Sep 17 00:00:00 2001 From: Timo Mueller Date: Fri, 5 Jun 2020 13:25:33 +0000 Subject: [PATCH 4/9] Fixed #16 --- cmd/httpx/httpx.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/httpx/httpx.go b/cmd/httpx/httpx.go index 4a2d584..2613e8a 100644 --- a/cmd/httpx/httpx.go +++ b/cmd/httpx/httpx.go @@ -223,7 +223,8 @@ retry: // store responses in directory if scanopts.StoreResponse { - responsePath := path.Join(scanopts.StoreResponseDirectory, domain+".txt") + var domainFile = strings.Replace(domain, "/", "_", -1) + ".txt" + responsePath := path.Join(scanopts.StoreResponseDirectory, domainFile) err := ioutil.WriteFile(responsePath, []byte(resp.Raw), 0644) if err != nil { gologger.Fatalf("Could not write response, at path '%s', to disc.", responsePath) From 4ab7aa2c79fc7d736898b40c491b6548aebf597b Mon Sep 17 00:00:00 2001 From: Mzack9999 Date: Fri, 5 Jun 2020 20:45:48 +0200 Subject: [PATCH 5/9] adding server basic fingerprint based on server header --- cmd/httpx/httpx.go | 20 +++++++++++----- cmd/httpx/options.go | 50 +++++++++++++++++++++------------------- common/httpx/httpx.go | 2 ++ common/httpx/response.go | 14 +++++++++++ go.mod | 2 +- go.sum | 4 ++-- 6 files changed, 59 insertions(+), 33 deletions(-) diff --git a/cmd/httpx/httpx.go b/cmd/httpx/httpx.go index d442b9e..5e2b9f1 100644 --- a/cmd/httpx/httpx.go +++ b/cmd/httpx/httpx.go @@ -53,6 +53,7 @@ func main() { scanopts.StoreResponse = options.StoreResponse scanopts.StoreResponseDirectory = options.StoreResponseDir scanopts.Method = options.Method + scanopts.OutputServerHeader = options.OutputServerHeader // Try to create output folder if it doesnt exist if options.StoreResponse && options.StoreResponseDir != "" && options.StoreResponseDir != "." { @@ -78,7 +79,7 @@ func main() { defer f.Close() } for r := range output { - if r.Error != nil { + if r.err != nil { continue } row := r.str @@ -152,6 +153,7 @@ type scanOptions struct { OutputContentLength bool StoreResponse bool StoreResponseDirectory string + OutputServerHeader bool } func analyze(hp *httpx.HTTPX, protocol string, domain string, port int, scanopts *scanOptions, output chan Result) { @@ -164,7 +166,7 @@ retry: req, err := hp.NewRequest(scanopts.Method, URL) if err != nil { - output <- Result{URL: URL, Error: err} + output <- Result{URL: URL, err: err} return } @@ -172,7 +174,7 @@ retry: resp, err := hp.Do(req) if err != nil { - output <- Result{URL: URL, Error: err} + output <- Result{URL: URL, err: err} if !retried { if protocol == "https" { protocol = "http" @@ -212,6 +214,11 @@ retry: builder.WriteString(fmt.Sprintf(" [%s]", title)) } + serverHeader := resp.GetHeader("Server") + if scanopts.OutputServerHeader { + builder.WriteString(fmt.Sprintf(" [%s]", serverHeader)) + } + // check for virtual host isvhost := false if scanopts.VHost { @@ -227,7 +234,7 @@ retry: ioutil.WriteFile(responsePath, []byte(resp.Raw), 0644) } - output <- Result{URL: fullURL, ContentLength: resp.ContentLength, StatusCode: resp.StatusCode, Title: title, str: builder.String(), VHost: isvhost} + output <- Result{URL: fullURL, ContentLength: resp.ContentLength, StatusCode: resp.StatusCode, Title: title, str: builder.String(), VHost: isvhost, WebServer: serverHeader} } // Result of a scan @@ -237,8 +244,9 @@ type Result struct { StatusCode int `json:"status-code"` Title string `json:"title"` str string - Error error `json:"error"` - VHost bool `json:"vhost"` + err error + VHost bool `json:"vhost"` + WebServer string `json:"webserver"` } // JSON the result diff --git a/cmd/httpx/options.go b/cmd/httpx/options.go index f14a67d..481bf58 100644 --- a/cmd/httpx/options.go +++ b/cmd/httpx/options.go @@ -12,30 +12,31 @@ import ( // Options contains configuration options for chaos client. type Options struct { - RawRequestFile string - VHost bool - Smuggling bool - ExtractTitle bool - StatusCode bool - ContentLength bool - Retries int - Threads int - Timeout int - CustomHeaders customheader.CustomHeaders - CustomPorts customport.CustomPorts - Output string - FollowRedirects bool - StoreResponse bool - StoreResponseDir string - HttpProxy string - SocksProxy string - JSONOutput bool - InputFile string - Method string - Silent bool - Version bool - Verbose bool - NoColor bool + RawRequestFile string + VHost bool + Smuggling bool + ExtractTitle bool + StatusCode bool + ContentLength bool + Retries int + Threads int + Timeout int + CustomHeaders customheader.CustomHeaders + CustomPorts customport.CustomPorts + Output string + FollowRedirects bool + StoreResponse bool + StoreResponseDir string + HttpProxy string + SocksProxy string + JSONOutput bool + InputFile string + Method string + Silent bool + Version bool + Verbose bool + NoColor bool + OutputServerHeader bool } // ParseOptions parses the command line options for application @@ -63,6 +64,7 @@ func ParseOptions() *Options { flag.BoolVar(&options.Version, "version", false, "Show version of httpx") flag.BoolVar(&options.Verbose, "verbose", false, "Verbose Mode") flag.BoolVar(&options.NoColor, "no-color", false, "No Color") + flag.BoolVar(&options.OutputServerHeader, "web-server", false, "Prints out the Server header content") flag.Parse() // Read the inputs and configure the logging diff --git a/common/httpx/httpx.go b/common/httpx/httpx.go index c059bee..8767189 100644 --- a/common/httpx/httpx.go +++ b/common/httpx/httpx.go @@ -85,6 +85,8 @@ func (h *HTTPX) Do(req *retryablehttp.Request) (*Response, error) { return nil, err } + resp.Headers = httpresp.Header.Clone() + rawresp, err := httputil.DumpResponse(httpresp, true) if err != nil { return nil, err diff --git a/common/httpx/response.go b/common/httpx/response.go index 183aadb..819542b 100644 --- a/common/httpx/response.go +++ b/common/httpx/response.go @@ -1,5 +1,9 @@ package httpx +import ( + "strings" +) + // Response contains the response to a server type Response struct { StatusCode int @@ -10,3 +14,13 @@ type Response struct { Words int Lines int } + +// GetHeader value +func (r *Response) GetHeader(name string) string { + v, ok := r.Headers[name] + if ok { + return strings.Join(v, " ") + } + + return "" +} diff --git a/go.mod b/go.mod index d829f9b..83ec27c 100644 --- a/go.mod +++ b/go.mod @@ -12,5 +12,5 @@ require ( github.com/projectdiscovery/retryablehttp-go v1.0.1 github.com/remeh/sizedwaitgroup v1.0.0 github.com/rs/xid v1.2.1 - golang.org/x/net v0.0.0-20200528225125-3c3fba18258b + golang.org/x/net v0.0.0-20200602114024-627f9648deb9 ) diff --git a/go.sum b/go.sum index a02a06d..947cc64 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b h1:IYiJPiJfzktmDAO1HQiwjMjwjlYKHAL7KzeD544RJPs= -golang.org/x/net v0.0.0-20200528225125-3c3fba18258b/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= From bb5acc9072e5d0ff60780853a1b61722576ad3a8 Mon Sep 17 00:00:00 2001 From: bauthard <8293321+bauthard@users.noreply.github.com> Date: Sat, 6 Jun 2020 15:34:14 +0530 Subject: [PATCH 6/9] added CIRD support example in readme --- README.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0912da9..1aa5e87 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,8 @@ This will display help for the tool. Here are all the switches it supports. | -H | Custom Header input | httpx -H 'x-bug-bounty: hacker' | | -follow-redirects | Follow URL redirects (default false) | httpx -follow-redirects | | -http-proxy | URL of the proxy server | httpx -http-proxy hxxp://proxy-host:80 | -| -l | File containing host/urls to process | httpx -l hosts.txt | +| -l | File containing host/urls to process | httpx -l hosts.txt | +| -l | File containing CIDR to process | httpx -l cidr.txt | | -no-color | Disable colors in the output. | httpx -no-color | | -o | File to save output result (optional) | httpx -o output.txt | | -json | Prints all the probes in JSON format (default false) | httpx -json | @@ -173,6 +174,42 @@ https://api.hackerone.com https://support.hackerone.com ``` +### Running httpx with CIDR input + +```bash +root@b0x:~/# echo 173.0.84.0/24 | httpx + + __ __ __ _ __ + / /_ / /_/ /_____ | |/ / + / __ \/ __/ __/ __ \| / + / / / / /_/ /_/ /_/ / | +/_/ /_/\__/\__/ .___/_/|_| + /_/ + + projectdiscovery.io + +[WRN] Use with caution. You are responsible for your actions +[WRN] Developers assume no liability and are not responsible for any misuse or damage. +https://173.0.84.29 +https://173.0.84.43 +https://173.0.84.31 +https://173.0.84.44 +https://173.0.84.12 +https://173.0.84.4 +https://173.0.84.36 +https://173.0.84.45 +https://173.0.84.14 +https://173.0.84.25 +https://173.0.84.46 +https://173.0.84.24 +https://173.0.84.32 +https://173.0.84.9 +https://173.0.84.13 +https://173.0.84.6 +https://173.0.84.16 +https://173.0.84.34 +``` + ### Using httpX with subfinder/chaos and any other similar tool. From 1a8cf2ba1a43a9349138a020614099d7b9aba623 Mon Sep 17 00:00:00 2001 From: bauthard <8293321+bauthard@users.noreply.github.com> Date: Sat, 6 Jun 2020 15:35:23 +0530 Subject: [PATCH 7/9] readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1aa5e87..4e60b31 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ httpx is a fast and multi-purpose HTTP toolkit allow to run multiple probers usi - Fast And fully configurable flags to probe mutiple elements. - Supports vhost, urls, ports, title, content-length, status-code, response-body probbing. - Smart auto fallback from https to http as default. - - Supports hosts and URLs as input. + - Supports hosts, URLs and CIDR as input. - Handles edge cases doing retries, backoffs etc for handling WAFs. # Usage From 5e8db24a9d604c07f02cbc1f0ee51a2797650f6f Mon Sep 17 00:00:00 2001 From: bauthard <8293321+bauthard@users.noreply.github.com> Date: Sat, 6 Jun 2020 16:34:25 +0530 Subject: [PATCH 8/9] added web-server details --- README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4e60b31..2a23474 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,8 @@ This will display help for the tool. Here are all the switches it supports. | -ports | Ports ranges to probe (nmap syntax: eg 1,2-10,11) | httpx -ports 80,443,100-200 | | -title | Prints title of page if available | httpx -title | | -content-length | Prints content length in the output | httpx -content-length | -| -status-code | Prints status code in the output | httpx -status-code | +| -status-code | Prints status code in the output | httpx -status-code | +| -web-server | Prints running web sever if available | httpx -status-code | | -store-response | Store response as domain.txt | httpx -store-response | | -store-response-dir| Directory to store response (default current path) | httpx -store-response-dir output | | -retries | Number of retries | httpx -retries | @@ -177,7 +178,7 @@ https://support.hackerone.com ### Running httpx with CIDR input ```bash -root@b0x:~/# echo 173.0.84.0/24 | httpx +> echo 173.0.84.0/24 | httpx __ __ __ _ __ / /_ / /_/ /_____ | |/ / @@ -257,14 +258,14 @@ https://resources.hackerone.com [301] [0] [] [WRN] Use with caution. You are responsible for your actions [WRN] Developers assume no liability and are not responsible for any misuse or damage. -{"url":"https://mta-sts.forwarding.hackerone.com","content-length":9339,"status-code":404,"title":"","error":null,"vhost":false} -{"url":"https://mta-sts.hackerone.com","content-length":9339,"status-code":404,"title":"","error":null,"vhost":false} -{"url":"https://docs.hackerone.com","content-length":65444,"status-code":200,"title":"","error":null,"vhost":false} -{"url":"https://mta-sts.managed.hackerone.com","content-length":9339,"status-code":404,"title":"","error":null,"vhost":false} -{"url":"https://support.hackerone.com","content-length":489,"status-code":301,"title":"","error":null,"vhost":false} -{"url":"https://resources.hackerone.com","content-length":0,"status-code":301,"title":"","error":null,"vhost":false} -{"url":"https://api.hackerone.com","content-length":7791,"status-code":200,"title":"","error":null,"vhost":false} -{"url":"https://www.hackerone.com","content-length":54166,"status-code":200,"title":"","error":null,"vhost":false} +{"url":"https://mta-sts.managed.hackerone.com","content-length":9339,"status-code":404,"title":"Page not found · GitHub Pages","vhost":false,"webserver":"GitHub.com"} +{"url":"https://mta-sts.forwarding.hackerone.com","content-length":9339,"status-code":404,"title":"Page not found · GitHub Pages","vhost":false,"webserver":"GitHub.com"} +{"url":"https://mta-sts.hackerone.com","content-length":9339,"status-code":404,"title":"Page not found · GitHub Pages","vhost":false,"webserver":"GitHub.com"} +{"url":"https://docs.hackerone.com","content-length":65781,"status-code":200,"title":"HackerOne Platform Documentation","vhost":false,"webserver":"GitHub.com"} +{"url":"https://api.hackerone.com","content-length":7791,"status-code":200,"title":"HackerOne API","vhost":false,"webserver":"cloudflare"} +{"url":"https://support.hackerone.com","content-length":98,"status-code":301,"title":"","vhost":false,"webserver":"cloudflare"} +{"url":"https://resources.hackerone.com","content-length":0,"status-code":301,"title":"","vhost":false,"webserver":""} +{"url":"https://www.hackerone.com","content-length":54136,"status-code":200,"title":"Bug Bounty - Hacker Powered Security Testing | HackerOne","vhost":false,"webserver":"cloudflare"} ``` From 6c68fc5d89194e782ffe3caec1d304049d19009f Mon Sep 17 00:00:00 2001 From: bauthard <8293321+bauthard@users.noreply.github.com> Date: Sat, 6 Jun 2020 16:35:23 +0530 Subject: [PATCH 9/9] web-server example --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a23474..dd556b5 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ This will display help for the tool. Here are all the switches it supports. | -title | Prints title of page if available | httpx -title | | -content-length | Prints content length in the output | httpx -content-length | | -status-code | Prints status code in the output | httpx -status-code | -| -web-server | Prints running web sever if available | httpx -status-code | +| -web-server | Prints running web sever if available | httpx -web-server | | -store-response | Store response as domain.txt | httpx -store-response | | -store-response-dir| Directory to store response (default current path) | httpx -store-response-dir output | | -retries | Number of retries | httpx -retries |