Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
3cac134
fix: prevent response file overwrite when -sd flag is used
jjhwan-h Jul 31, 2025
63130de
Merge branch 'dev' into pr/2226
Mzack9999 Oct 20, 2025
bd4dc82
fix var declaration
Mzack9999 Oct 20, 2025
a3212c6
fix lint errors
Mzack9999 Oct 20, 2025
ca007ea
fix: correct index file name generation
jjhwan-h Oct 23, 2025
37ae76b
Fix GitHub Actions condition (#2338)
arunstar Dec 13, 2025
df52dee
chore(deps): bump golang.org/x/net from 0.47.0 to 0.48.0
dependabot[bot] Dec 15, 2025
77679db
chore(deps): bump the modules group with 7 updates
dependabot[bot] Dec 15, 2025
ec2b715
changed resp.Raw contstruction to cap the body, avoiding oom issue
smallseacreature Dec 22, 2025
2773b08
changed max response to save and read to 10MB, the common/httpx default
smallseacreature Dec 22, 2025
a28b9fa
fix: updated README max response size to match edit
smallseacreature Dec 22, 2025
8569576
fix: removed temp logger
smallseacreature Dec 22, 2025
78bf9c3
restoring original logic + limiting read to 512Mb + lint
Mzack9999 Dec 24, 2025
78bb95e
removing test file
Mzack9999 Dec 24, 2025
7e6003c
fixing comment
Mzack9999 Dec 24, 2025
5a793ca
Merge pull request #2343 from smallseacreature/fix-endless-stream-oom
Mzack9999 Dec 24, 2025
7f9403e
chore(deps): bump the modules group with 7 updates
dependabot[bot] Dec 22, 2025
7cfcff3
fix: probe-all-ips now works correctly when URL contains port
majiayu000 Jan 2, 2026
c63cbf1
Merge pull request #2348 from majiayu000/fix-2346-inconsistent-result…
dogancanbakir Jan 2, 2026
0cbc12b
chore(deps): bump the modules group with 9 updates
dependabot[bot] Dec 29, 2025
74cdf47
chore(deps): bump github.com/weppos/publicsuffix-go
dependabot[bot] Jan 5, 2026
bc2c7a2
chore(deps): bump the modules group with 7 updates (#2355)
dependabot[bot] Jan 5, 2026
81461d3
feat: add passive CPE and WordPress detection
dogancanbakir Jan 6, 2026
834bbd7
Merge pull request #2366 from projectdiscovery/feature/cpe-wordpress-…
dogancanbakir Jan 8, 2026
07b45fa
fixing index generation
Mzack9999 Jan 9, 2026
048c43f
Merge branch 'dev' into pr/2226
Mzack9999 Jan 9, 2026
59adfd6
Merge pull request #2226 from jjhwan-h/fix/no-dedupe-store-sd
Mzack9999 Jan 9, 2026
f144424
fix: update Host header for favicon requests after redirects
wlayzz Jan 11, 2026
b60bfa2
feat: add secret file authentication support (-sf flag)
dogancanbakir Jan 12, 2026
0f5141b
feat: add burp xml input mode support (-im flag)
dogancanbakir Jan 12, 2026
7c79e35
Merge pull request #2369 from wlayzz/fix/favicon-redirect-host
Mzack9999 Jan 12, 2026
fa1d6ae
mod tidy
Mzack9999 Jan 12, 2026
430e33f
fix: address coderabbit review comments
dogancanbakir Jan 12, 2026
62eed15
fix: address CodeRabbitAI review comments
dogancanbakir Jan 12, 2026
a780d05
test: add comprehensive tests for auth provider
dogancanbakir Jan 12, 2026
f445b0a
docs update + flags validation + debug logging
Mzack9999 Jan 12, 2026
f6aa159
Merge pull request #2372 from projectdiscovery/feature/input-mode-burp
dogancanbakir Jan 12, 2026
a4ae407
lint
Mzack9999 Jan 12, 2026
fb1ea1c
Merge branch 'dev' into feature/secret-file-auth
Mzack9999 Jan 12, 2026
c125352
mod tidy
Mzack9999 Jan 12, 2026
d66ff35
chore(deps): bump golang.org/x/text from 0.32.0 to 0.33.0
dependabot[bot] Jan 12, 2026
93633d2
docs: add secret file authentication documentation
dogancanbakir Jan 12, 2026
885c603
Merge pull request #2371 from projectdiscovery/feature/secret-file-auth
dogancanbakir Jan 12, 2026
2bbc413
chore(deps): bump the modules group with 5 updates
dependabot[bot] Jan 12, 2026
438c351
chore(deps): bump the modules group with 4 updates
dependabot[bot] Jan 19, 2026
b422876
chore(deps): bump golang.org/x/net from 0.48.0 to 0.49.0
dependabot[bot] Jan 19, 2026
8946dee
chore(deps): bump github.com/go-viper/mapstructure/v2
dependabot[bot] Jan 19, 2026
09efd29
Merge branch 'main' into dev
dogancanbakir Jan 19, 2026
e3c6ba3
Merge pull request #2376 from projectdiscovery/dependabot/go_modules/…
dogancanbakir Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
jobs:
lint:
name: Lint Test
if: "${{ !endsWith(github.actor, '[bot]') }}"
if: ${{ !endsWith(github.actor, '[bot]') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
35 changes: 29 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,10 @@ Usage:

Flags:
INPUT:
-l, -list string input file containing list of hosts to process
-rr, -request string file containing raw request
-u, -target string[] input target host(s) to probe
-l, -list string input file containing list of hosts to process
-rr, -request string file containing raw request
-u, -target string[] input target host(s) to probe
-im, -input-mode string mode of input file (burp)

PROBES:
-sc, -status-code display response status-code
Expand All @@ -110,9 +111,11 @@ PROBES:
-title display page title
-bp, -body-preview display first N characters of response body (default 100)
-server, -web-server display server name
-td, -tech-detect display technology in use based on wappalyzer dataset
-td, -tech-detect display technology in use based on wappalyzer dataset
-cff, -custom-fingerprint-file string path to a custom fingerprint file for technology detection
-method display http request method
-cpe display CPE (Common Platform Enumeration) based on awesome-search-queries
-wp, -wordpress display WordPress plugins and themes
-method display http request method
-ws, -websocket display server using websocket
-ip display host ip
-cname display host cname
Expand Down Expand Up @@ -231,6 +234,7 @@ CONFIGURATIONS:
-tlsi, -tls-impersonate enable experimental client hello (ja3) tls randomization
-no-stdin Disable Stdin processing
-hae, -http-api-endpoint string experimental http api endpoint
-sf, -secret-file string path to secret file for authentication

DEBUG:
-health-check, -hc run diagnostic check up
Expand Down Expand Up @@ -277,9 +281,28 @@ For details about running httpx, see https://docs.projectdiscovery.io/tools/http
# Notes

- As default, `httpx` probe with **HTTPS** scheme and fall-back to **HTTP** only if **HTTPS** is not reachable.
- Burp Suite XML exports can be used as input with `-l burp-export.xml -im burp`
- The `-no-fallback` flag can be used to probe and display both **HTTP** and **HTTPS** result.
- Custom scheme for ports can be defined, for example `-ports http:443,http:80,https:8443`
- Custom resolver supports multiple protocol (**doh|tcp|udp**) in form of `protocol:resolver:port` (e.g. `udp:127.0.0.1:53`)
- Secret files can be used for domain-based authentication via `-sf secrets.yaml`. Supported auth types: `BasicAuth`, `BearerToken`, `Header`, `Cookie`, `Query`. Example:
```yaml
id: example-auth
info:
name: Example Auth Config
static:
- type: Header
domains:
- api.example.com
headers:
- key: X-API-Key
value: secret-key-here
- type: BasicAuth
domains-regex:
- ".*\\.internal\\.com$"
username: admin
password: secret
```
- The following flags should be used for specific use cases instead of running them as default with other probes:
- `-ports`
- `-path`
Expand Down Expand Up @@ -307,4 +330,4 @@ Probing feature is inspired by [@tomnomnom/httprobe](https://github.com/tomnomno

<a href="https://discord.gg/projectdiscovery"><img src="https://raw.githubusercontent.com/projectdiscovery/nuclei-burp-plugin/main/static/join-discord.png" width="300" alt="Join Discord"></a>

</div>
</div>
31 changes: 31 additions & 0 deletions common/authprovider/authx/basic_auth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package authx

import (
"net/http"

"github.com/projectdiscovery/retryablehttp-go"
)

var (
_ AuthStrategy = &BasicAuthStrategy{}
)

// BasicAuthStrategy is a strategy for basic auth
type BasicAuthStrategy struct {
Data *Secret
}

// NewBasicAuthStrategy creates a new basic auth strategy
func NewBasicAuthStrategy(data *Secret) *BasicAuthStrategy {
return &BasicAuthStrategy{Data: data}
}

// Apply applies the basic auth strategy to the request
func (s *BasicAuthStrategy) Apply(req *http.Request) {
req.SetBasicAuth(s.Data.Username, s.Data.Password)
}

// ApplyOnRR applies the basic auth strategy to the retryable request
func (s *BasicAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
req.SetBasicAuth(s.Data.Username, s.Data.Password)
}
31 changes: 31 additions & 0 deletions common/authprovider/authx/bearer_auth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package authx

import (
"net/http"

"github.com/projectdiscovery/retryablehttp-go"
)

var (
_ AuthStrategy = &BearerTokenAuthStrategy{}
)

// BearerTokenAuthStrategy is a strategy for bearer token auth
type BearerTokenAuthStrategy struct {
Data *Secret
}

// NewBearerTokenAuthStrategy creates a new bearer token auth strategy
func NewBearerTokenAuthStrategy(data *Secret) *BearerTokenAuthStrategy {
return &BearerTokenAuthStrategy{Data: data}
}

// Apply applies the bearer token auth strategy to the request
func (s *BearerTokenAuthStrategy) Apply(req *http.Request) {
req.Header.Set("Authorization", "Bearer "+s.Data.Token)
}

// ApplyOnRR applies the bearer token auth strategy to the retryable request
func (s *BearerTokenAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
req.Header.Set("Authorization", "Bearer "+s.Data.Token)
}
62 changes: 62 additions & 0 deletions common/authprovider/authx/cookies_auth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package authx

import (
"net/http"

"github.com/projectdiscovery/retryablehttp-go"
)

var (
_ AuthStrategy = &CookiesAuthStrategy{}
)

// CookiesAuthStrategy is a strategy for cookies auth
type CookiesAuthStrategy struct {
Data *Secret
}

// NewCookiesAuthStrategy creates a new cookies auth strategy
func NewCookiesAuthStrategy(data *Secret) *CookiesAuthStrategy {
return &CookiesAuthStrategy{Data: data}
}

// Apply applies the cookies auth strategy to the request
func (s *CookiesAuthStrategy) Apply(req *http.Request) {
for _, cookie := range s.Data.Cookies {
req.AddCookie(&http.Cookie{
Name: cookie.Key,
Value: cookie.Value,
})
}
}

// ApplyOnRR applies the cookies auth strategy to the retryable request
func (s *CookiesAuthStrategy) ApplyOnRR(req *retryablehttp.Request) {
// Build a set of cookie names to replace
newCookieNames := make(map[string]struct{}, len(s.Data.Cookies))
for _, cookie := range s.Data.Cookies {
newCookieNames[cookie.Key] = struct{}{}
}

// Filter existing cookies, keeping only those not being replaced
existingCookies := req.Cookies()
filteredCookies := make([]*http.Cookie, 0, len(existingCookies))
for _, cookie := range existingCookies {
if _, shouldReplace := newCookieNames[cookie.Name]; !shouldReplace {
filteredCookies = append(filteredCookies, cookie)
}
}

// Clear and reset cookies
req.Header.Del("Cookie")
for _, cookie := range filteredCookies {
req.AddCookie(cookie)
}
// Add new cookies
for _, cookie := range s.Data.Cookies {
req.AddCookie(&http.Cookie{
Name: cookie.Key,
Value: cookie.Value,
})
}
}
Loading
Loading