The All-in-One Terminal Toolkit for Bug Bounty Recon, Discovery, Fingerprinting & Vulnerability Scanning
Türkçe Dokümantasyon · Install · Quickstart · Modules · Comparison · Roadmap
FindBounty is a single, terminal-native CLI for the recon-to-report bug bounty
workflow: subdomain enumeration, takeover detection, passive URL harvesting,
technology/WAF fingerprinting, content fuzzing, JS secret extraction,
CORS/open-redirect checks, a Nuclei-style template engine, and OWASP ZAP
active scanning — all in one pip install, with zero required external
binaries. When industry-standard tools like subfinder, httpx, and
nuclei are on your PATH, pass --boost and FindBounty folds their
output in on top of its own.
This is v0.1.0 — an early, working release. It's a fresh rebuild (not a fork) with a from-scratch native scanning engine; the Roadmap below is honest about what's still ahead.
Most recon setups are a pile of separately-installed Go binaries glued together with shell scripts. FindBounty takes the opposite approach:
- Works out of the box.
pip installand you have real subdomain enumeration, fingerprinting, secret scanning, and a vulnerability template engine — no Go toolchain, nogo installchain of five tools before your first scan. - Terminal-first, on purpose. No web dashboard, no desktop GUI to keep in sync — one CLI, one source of truth, scriptable in CI and over SSH.
- Safe by default. Rate limiting, scope enforcement, robots.txt respect, and destructive/auth/brute-force testing are all off unless you explicitly turn them on (see Scope & Safety).
- Extends what you already have.
--boostshells out tosubfinder/httpx/nuclei/etc. if they're installed, merging their results with FindBounty's own — you're not locked out of the ProjectDiscovery ecosystem, just not dependent on it.
findbounty doctor |
findbounty quick -t example.com |
findbounty scope-lint --scope scope.yaml |
|
(These are real captured output — generated with Rich's SVG export, not mockups.)
Requires Python 3.11+.
git clone https://github.com/tugrakaymakcioglu/FindBounty.git
cd FindBounty
# Linux / macOS / WSL
./scripts/install.sh
# Windows (PowerShell)
.\scripts\install.ps1Or install directly with pip/pipx:
pipx install . # recommended: isolated environment, findbounty on PATH
# or
pip install -e .Verify everything's wired up:
findbounty doctorWant FindBounty to also use subfinder/httpx/nuclei/etc. when present?
Install with --boost (installer) or just install those tools yourself —
findbounty doctor reports which ones it can see, findbounty scan --boost
uses whichever are installed.
# One-time workspace + scope file for a target
findbounty init -t example.com
# Fast pass against a single host: tech, SSL, CORS, open-redirect
findbounty quick -t example.com
# Full recon + scan pipeline
findbounty scan -t example.com
# Restrict to an authorized scope, and fold in external tools if installed
findbounty scan -t example.com --scope ~/.findbounty/workspaces/example.com/scope.yaml --boost
# Continuous attack-surface monitoring - only reports what changed
findbounty monitor -d example.com --interval-minutes 60
# Interrupted? Resume the same run-id - already-completed modules are skipped
findbounty scan -t example.com -m all --resume 20260813_020618
# Throttle every rate-limited module (fuzzing, subdomain enum, templates) to 2 req/s
findbounty scan -t example.com --rate-limit 2Every scan run writes results.json, report.json, report.md, and an
interactive report.html (searchable, filterable by severity) to
./reports/<run-id>/, and persists findings to a local SQLite database at
~/.findbounty/findbounty.db. Progress is checkpointed after every module,
so a scan killed partway through can pick up where it left off with
--resume <run-id> instead of starting over.
| Module | What it does |
|---|---|
subdomain |
Subdomain enumeration via CT logs (crt.sh), HackerTarget, urlscan.io, DNS brute-force, and (with an API key) VirusTotal/SecurityTrails/Censys |
takeover |
Subdomain takeover detection — dangling CNAME + response fingerprinting against 19 providers |
ports |
Async TCP port scan with banner-based service detection |
urls |
Passive URL harvesting from the Wayback Machine and Common Crawl (no external binary) |
fuzz |
Content/directory discovery, bundled + custom wordlists |
tech |
Wappalyzer-style technology fingerprinting |
waf |
WAF detection and identification |
js |
JavaScript analysis — endpoint and secret extraction from loaded scripts |
templates |
Nuclei-style YAML vulnerability template engine (built-in checks) |
secrets |
Regex-based credential/secret detection |
cors |
CORS misconfiguration detection (reflected origin, null origin, wildcard+credentials) |
redirect |
Open redirect detection across common redirect parameter names |
ssl |
SSL/TLS configuration and certificate analysis |
screenshot |
Page screenshots via Playwright (optional visual extra) |
Run findbounty modules to see this from the CLI, or pick a subset with
-m subdomain,takeover,tech.
--profile controls request budgets, concurrency, and how aggressive checks
are allowed to be. All three keep destructive tests, auth testing, and
brute-force off:
| Profile | Concurrency | Req/hour | Use case |
|---|---|---|---|
stealth |
2 | 100 | Low-and-slow, minimal footprint |
balanced (default) |
10 | 1,000 | Sensible default for most targets |
aggressive |
50 | 5,000 | Fast, comprehensive — only on targets that can take it |
FindBounty ships two independent safety layers:
ScopeValidator— enforced during every scan: same-origin restriction,robots.txtrespect, and hard rate/URL-count limits.ScopeGuard(--scope scope.yaml) — the program scope: an explicit allow/deny list of domains, paths, and testing rules (no destructive tests, no brute force, no auth testing, no cloud testing — all opt-in per scope file).findbounty initstamps out a starter file;findbounty scope-lintvalidates one before you scan with it.
This is a tool for authorized security testing only. Every scan prints a safety notice. Get explicit permission before targeting anything you don't own or have written authorization to test.
FindBounty's Python modules never require external tools. --boost adds a
second, optional layer on top:
findbounty scan -t example.com --boostIf subfinder, httpx, or nuclei are on PATH, their results are merged
into FindBounty's own subdomain list and findings. Nothing is installed
automatically — findbounty doctor only ever reports what's missing and
prints the install command, it never runs one for you.
Telegram, Discord, and Slack are supported via webhooks, off by default:
findbounty scan -t example.com --notify telegram,discord
findbounty notify-test --channel slackConfigure via ~/.findbounty/config.yaml or environment variables
(FINDBOUNTY_TELEGRAM_TOKEN, FINDBOUNTY_DISCORD_WEBHOOK, ...) so
credentials never need to live in a committed file.
| Command | Purpose |
|---|---|
findbounty scan -t <target> |
Full comprehensive scan (add --resume <run-id> to continue an interrupted one, --rate-limit <n> to override the profile's req/s) |
findbounty quick -t <target> |
Fast single-host pass |
findbounty monitor -d <domain> |
Continuous delta monitoring |
findbounty init -t <target> |
Create a workspace + scope.yaml |
findbounty scope-lint --scope <file> |
Validate a scope file |
findbounty workspaces |
List existing workspaces |
findbounty doctor |
Check core deps + optional external tools |
findbounty modules |
List available scan modules |
findbounty notify-test |
Test configured notification channels |
findbounty version |
Print version |
findbounty/
├── recon/ subdomain, ports, passive URL harvesting, takeover
├── discovery/ fuzzing, JS analysis, robots/sitemap parsing
├── fingerprint/ technology + WAF detection
├── scanner/ passive checks, CORS, open redirect, ZAP pipeline
├── secrets/ credential/secret regex scanner
├── templates/ Nuclei-style YAML template loader + executor
├── audit/ dependency + SSL/TLS auditing
├── safety/ same-origin scope validator + program ScopeGuard
├── reporting/ JSON/Markdown/HTML report generation
├── storage/ SQLite persistence, evidence masking
├── visual/ optional screenshot capture + gallery
├── data/ bundled profiles, wordlists, default config
├── doctor.py core + external tool health checks
├── boost.py optional subfinder/httpx/nuclei integration
├── notify.py Telegram/Discord/Slack dispatch
├── monitor.py continuous delta scanning
├── workspace.py per-target workspace management
└── cli.py the findbounty CLI (Typer + Rich)
An optional docker-compose.yml runs OWASP ZAP for active-scan checks -
FindBounty works fully without it; ZAP only adds a deeper active-scan pass.
v0.1.0 is a working foundation, not a finished product. Next up:
- Expand the built-in vulnerability template library beyond the initial set
- Parallel multi-host scanning (currently
scantargets one host + its subdomains) - PDF report export
- Plugin system for community-contributed checks
- Publish to PyPI (
pip install findbountywithout cloning)
Found a bug or want a feature? Open an issue.
Issues and PRs are welcome. Before submitting:
pip install -e ".[dev]"
ruff check findbounty
pytestMIT — see LICENSE.