TL;DR: Run nuclei, ffuf, dirsearch, and custom scripts continuously across your asset graph and alert only on diff. Volume + diffing is how you catch the n-day window before duplicates flood in.
What it is
Automated discovery is the bottom layer of a bug-bounty pipeline — high-volume, low-precision scans that surface “something changed” or “something matches a known signature.” It doesn’t replace manual hunting; it produces leads that manual hunting then triages. Paired with continuous-recon-automation, it’s how solo hunters cover programs at corporate-pentest scale.
Preconditions / where it applies
- You have an asset graph maintained by continuous recon (live hosts, ports, tech stack, last-seen)
- Programs that allow automated scanning (most do; some explicitly forbid scanner traffic — read the rules)
- Templates / wordlists tuned to the target stack (Ruby on Rails program ≠ generic PHP wordlist)
Technique
- Layer the pipeline. Each layer narrows what the next sees.
1
2
3
| subdomains -> httpx (live) -> tech fingerprint -> nuclei (signatures)
\-> ffuf (content)
\-> custom scripts (param mining)
|
- Nuclei for known signatures and misconfigs. Group templates by tag and severity; don’t blast every template at every host:
1
2
| nuclei -l live.txt -tags exposure,cve,misconfig -severity high,critical \
-rate-limit 50 -o nuclei.out -json
|
- Content discovery against routes that actually exist — feed
httpx output into ffuf with a wordlist sized to the tech stack (wordlist-fuzzing-tactics):
1
| ffuf -w wordlist.txt -u https://FUZZ.target.tld/ -mc 200,301,401,403 -ac
|
- Custom probes for things off-the-shelf scanners miss — leaked
.git/HEAD, swagger.json, .env.bak, GraphQL introspection on /graphql. Wrap them in a single shell function and run nightly. - Diff, don’t alert on raw output. Persist last-run results per host; alert only when the response hash, status, or content-length changes. This kills 99% of noise.
1
2
| # pseudo: hash response, compare to yesterday's
sha256(body) != yesterday(host) -> push to triage queue
|
- Triage queue is the human surface. Each lead gets ~30 seconds — reject duplicates, false-positives, out-of-scope; promote real candidates to manual hunting.
Detection and defence
- WAFs will rate-limit you; rotate source IPs (cloud egress, residential proxies) within rules of engagement
- Defenders see scanner UAs (
Nuclei/..., ffuf/...) and template fingerprints in WAF logs — change UA if you want to stay quiet, but quiet ≠ allowed - Blue team should run the same nuclei templates internally on a schedule and fix matches before bounty hunters report them
- Audit log volume spikes per minute correlated with subdomain enumeration patterns are a reliable scanner signal
References