Passive, ethical OSINT toolkit for one practical question:
How exposed is this person, account, or organization on the public internet right now?
It collects public signals (credential leaks, public code, DNS/email posture, social exposure, indexed content, and Shodan metadata), scores them, and exports a report pack that is immediately usable by security teams or clients.
Currently, I do not have premium access to HIBP/LeakCheck, which is why I tested using the "--demo-mode." However, I am confident that they will work perfectly.
-
exposure_graph.html: https://sagarbiswas-multihat.github.io/osint-exposure-toolkit/output/target_2026-03-25_05-52/exposure_graph.html
-
report.html: https://sagarbiswas-multihat.github.io/osint-exposure-toolkit/output/target_2026-03-25_05-52/report.html
- Who this is for
- What this toolkit does
- What it does not do
- How scoring works
- Modules (end-to-end)
- Credential leak modes (important)
- Outputs
- Project structure
- Setup
- Configuration guide
- CLI usage
- Examples by scenario
- Troubleshooting
- Testing and quality
- Ethics and legal use
- License
This project is useful if you are:
- a security consultant preparing a pre-assessment exposure baseline,
- a startup security engineer building a lightweight external exposure check,
- a blue team member who needs repeatable, passive recon snapshots,
- a portfolio builder demonstrating practical AppSec + OSINT automation.
Given any combination of --email, --domain, and --username, the toolkit:
- Runs a passive scan pipeline across enabled modules.
- Normalizes findings into typed models.
- Aggregates a score (0–100) with severity label.
- Produces HTML, JSON, Markdown, and graph outputs.
The result is a single timestamped folder under output/ you can share or archive.
This toolkit does not perform:
- exploitation,
- brute force,
- payload delivery,
- vulnerability proof-of-exploit,
- unauthorized access of any kind.
It is intentionally passive and report-oriented.
Each module contributes a bounded score_impact, and total score is capped at 100.
- Low score = lower observed public exposure.
- High score = broader or more critical public exposure.
The scoring layer also creates normalized finding IDs (for example, module-prefixed finding references) so remediation tracking is easier across repeated runs.
-
Credential Leak
- Engine: LeakCheck (default) or HIBP (opt-in)
- Output: breach count, severity, and mode-specific notes
-
GitHub Footprint
- Discovers public repositories and flags secret-like patterns
-
Email Intelligence
- Email syntax, MX provider hints, SPF hints, SMTP verification signal
-
Social Footprint
- Username variant probing across configured platforms
-
Paste Monitor
- Uses credential leak context to summarize paste exposure
-
JS Secret Scanner
- Scans public JavaScript artifacts for secret-like patterns
-
DNS Email Authentication
- SPF, DMARC, DKIM, MTA-STS posture and spoofability score
-
Google Dorks
- Generates passive dork recipes and optional limited DDG checks
-
Metadata Extractor
- Pulls leaked metadata from public docs
-
Shodan Recon
- Host/service/port/CVE exposure metadata for target domain assets
-
Exposure Scorer + Reporting
- Unifies all module outputs into score + HTML/JSON/MD + graph
Credential leak scanning supports two engines.
- Selected automatically unless HIBP flags are used.
- With API key: authenticated mode (richer source detail).
- Without API key or rejected key: public mode fallback.
Use one of:
--use-hibp(interactive mode choice)--free-hibp--demo-mode
HIBP modes:
- Free: global breach landscape view (not per-email premium lookup)
- Live/Premium path: per-email endpoint usage when key is configured
- Demo: fixture-backed deterministic output from
tests/fixtures/hibp_mock.json
--demo-modeis ideal for demos, CI smoke runs, and report-template validation.
Each run creates a folder like:
output/target_YYYY-MM-DD_HH-MM/
Generated artifacts:
report.html— interactive client-facing reportreport.json— machine-readable payload for automationreport.md— concise text report for quick sharingexposure_graph.html— graph visualization (unless--no-graph)
main.py
core/
config_loader.py
constants.py
logger.py
models.py
rate_limiter.py
modules/
credential_leak.py
github_footprint.py
email_intel.py
social_footprint.py
paste_monitor.py
js_secret_scanner.py
dns_email_auth.py
google_dorks.py
metadata_extractor.py
shodan_recon.py
exposure_scorer.py
reporting/
html_report.py
json_report.py
markdown_report.py
templates/report.html.jinja
graph/
exposure_graph.py
tests/
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtdocker build -t osint-exposure-toolkit .
docker run --rm -v $(pwd)/output:/app/output osint-exposure-toolkit --domain example.com --demo-modedocker compose up --buildMain config file: config.yaml
Key sections:
general- output directory, log level, timeout, concurrency, default output formats
api_keyshibp,leakcheck,github,shodan
modules- enable/disable each module independently
rate_limits- request pacing per provider
scan_limits- safety caps for repository, file, and host volume
Do not commit real API keys into version control.
Use one of these approaches:
- local untracked config,
- environment-variable templating,
- secret manager injection in CI/CD.
python main.py [OPTIONS]--email TEXT--domain TEXT--username TEXT
At least one is required.
--use-hibp--free-hibp--demo-mode
Note: --use-hibp cannot be combined with --free-hibp or --demo-mode.
--skip-pastes--modules TEXT(comma-separated aliases)--output TEXT(comma-separated:html,json,md)--no-graph--config TEXT(default:config.yaml)
credgithubemailsocialpastesjsdnsmetadatadorksshodan
python main.py --email demo@example.com --domain example.com --username demo --demo-modepython main.py --email security@example.com --domain example.com --username secopspython main.py --email security@example.com --domain example.com --use-hibppython main.py --domain example.compython main.py --domain example.com --modules github,js,dns,shodanpython main.py --email user@example.com --domain example.com --output html,json --no-graphpython main.py \
--email security@shopify.com \
--domain shopify.com \
--username tobi \
--demo-mode- Ensure you are opening the newly generated
report.htmlin the latest output folder. - Hard-refresh browser cache.
- Confirm
--demo-modewas used andtests/fixtures/hibp_mock.jsonexists.
Provide one or more target identifiers.
If API keys are empty, modules still run in reduced capability mode where possible.
Tune rate_limits and scan_limits in config.yaml for your environment.
ruff check .
python -m pytest tests/ -vSuggested release gate:
- Lint clean.
- Tests green.
- One CLI smoke run (
--demo-mode) and confirm output artifacts.
Use this toolkit only on assets you own or are explicitly authorized to assess.
The toolkit is intentionally passive, but passive reconnaissance can still create legal or contractual risk in some environments without prior approval.
MIT



