Open-source CLI toolkit for pentesters, bug bounty hunters, and developers who think offensively. Five tools — one ecosystem — covering the full recon-to-exploit surface.
Ecosystem Map
Installation
# Standard
pip install ReconNinja
# With AI providers (Groq, Gemini, OpenAI)
pip install "ReconNinja[ai]"
# With DNS zone transfer support
pip install "ReconNinja[dns]"
# v7 extras — LDAP, SNMP, ASN mapping
pip install "ReconNinja[v7]"
# Full — AI + Shodan + dnspython + v7 extras
pip install "ReconNinja[full]"
# From source (always latest)
pip install git+https://github.com/ExploitCraft/ReconNinja.git
# From source with install script
git clone https://github.com/ExploitCraft/ReconNinja.git
cd ReconNinja && chmod +x install.sh && ./install.sh| Extra | Includes |
|---|---|
| ai | groq, google-generativeai, openai |
| shodan | shodan |
| dns | dnspython — required for zone transfer |
| v7 | ipwhois, ldap3, pysnmp — required for v7 protocol modules |
| full | All of the above |
Quick Start
# Interactive guided setup
ReconNinja
# Standard scan
ReconNinja -t example.com
# Full 51-phase pipeline
ReconNinja -t example.com --profile full_suite -y
# v8 web attack modules
ReconNinja -t example.com \
--api-fuzz --oauth-scan \
--web-vulns --open-redirect -y
# v8 OSINT + mobile + blockchain
ReconNinja -t example.com \
--linkedin --paste-monitor \
--se-osint --anon-detect \
--web3-scan --ens-lookup -y
# APK static analysis
ReconNinja --apk-scan /path/to/app.apk
# v8 AI upgrades — consensus + attack paths
ReconNinja -t example.com \
--ai --ai-consensus --attack-paths \
--ai-remediate --ai-key YOUR_KEY -y
# Push findings to Jira
ReconNinja -t example.com \
--jira https://jira.example.com:user@example.com:TOKEN:SEC -y
# Launch desktop GUI
ReconNinja --gui
# Resume interrupted scan
ReconNinja --resume reports/example.com_20260501/state.json51-Phase Pipeline
Each phase feeds results into the next. 7 new phases in v6. 17 new phases in v7. 13 new phases in v8. All phases checkpoint to state.json for resume.
v7 New Modules 17 modules
All v7 modules are enabled by --profile full_suite or individually with their flags. Install ReconNinja[v7] for LDAP, SNMP, and ASN extras.
v8 New Modules 13 modules + 3 AI upgrades
v8 adds deep web-attack probing, mobile/blockchain recon, social-engineering intel, and a full AI upgrade pass. All modules available individually or via --profile full_suite.
API & Web Attack
Social Engineering & OSINT
Mobile & Blockchain
Network Intel
AI Upgrades 3 new
All Flags
AI Analysis
Phase 11 feeds all results into an LLM for threat prioritisation. Rule-based fallback runs automatically when no key is provided. v8 adds three AI-upgrade modes for deeper analysis.
| Provider | Default Model | Key |
|---|---|---|
| groq | llama3-70b-8192 | Required |
| ollama | llama3 | None — local |
| gemini | gemini-1.5-flash | Required |
| openai | gpt-4o-mini | Required |
| rule-based | Built-in | None — auto-fallback |
# Standard AI analysis
ReconNinja -t example.com --ai --ai-key YOUR_GROQ_KEY
ReconNinja -t example.com --ai --ai-provider ollama # local, free
ReconNinja -t example.com --ai # rule-based fallback (no key needed)
# v8 — AI consensus across providers
ReconNinja -t example.com --ai --ai-consensus --ai-key KEY
# v8 — MITRE ATT&CK attack paths
ReconNinja -t example.com --ai --attack-paths --ai-key KEY
# v8 — Per-finding remediation + CVSSv3
ReconNinja -t example.com --ai --ai-remediate --ai-key KEY
# Full AI stack
ReconNinja -t example.com \
--ai --ai-consensus --attack-paths --ai-remediate \
--ai-provider groq --ai-key KEY -yGUI v8 new
v8.0.0 ships a local Flask-based desktop GUI accessible via browser. Run scans point-and-click with real-time SSE progress streaming and an in-app findings dashboard. Requires pip install flask (auto-installed by install.sh).
# Launch GUI (opens browser automatically)
ReconNinja --gui
# Custom port
ReconNinja --gui --gui-port 8080
# GUI URL
# → http://127.0.0.1:7117
# Install Flask if not installed
pip install flaskChangelog
pyproject.toml. No functional changes.
VERSION = "7.0.0" hardcoded in reconninja.py despite being v8 code; affected startup banner, argparse description, and --update version comparison. Fixed to 8.1.0.Bug #2 (Low) — Module docstring header in
reconninja.py still read v7.0.0. Updated.Bug #3 (Medium) —
gui/app.py: autocomplete="of" typo on target input — browsers showed autocomplete suggestions for security tool targets. Fixed to autocomplete="off".Bug #4 (Medium) — SSE keepalive in
gui/app.py used type: "log" with text: "…", appending a noise dot to the progress log every 30 s during idle. Changed to type: "keepalive" which the JS client silently ignores.Bug #5 (Medium) —
_scan_queues and _scan_results dicts in gui/app.py never cleaned up after scan completion, causing unbounded memory growth in long-running GUI sessions. Both dicts now pruned in the run_scan finally block.
3 AI upgrades: multi-provider consensus, MITRE ATT&CK kill-chain attack paths, per-finding AI remediation with CVSSv3 scoring.
Local desktop GUI via Flask + SSE —
--gui flag.Output integrations:
--pdf-report, --jira, --gh-issues, --siem.17 pre-release bugs fixed across 13 files — including 19 missing imports in
orchestrator.py, 12 broken f-strings, broken dnstwist output path in typosquat.py, dead slab assignment in db_exposure.py, and SARIF shadow import loop.
NameError at runtime because their imports were missing from core/orchestrator.py. All 17 missing from core.* statements added. smtp_user_enum aliased to match call sites. flake8 --select=F821 now exits clean.
--exclude now applied, VirusTotal correctly routes domain vs IP, pyflakes clean across all source files.
Full history: CHANGELOG.md on GitHub
Usage
# Install
pip install vaulthound
# Scan a live URL (HTML + JS + 15 sensitive path probes)
vaulthound -u https://example.com
# Scan a local directory
vaulthound -d /path/to/repo
# Directory + full git history
vaulthound -d /path/to/repo --git
# Deep JS scanning
vaulthound -u https://example.com --js
# Only critical and high severity
vaulthound -d . --severity high
# Custom output directory + skip prompt
vaulthound -d . --output /tmp/results -y43 Detection Patterns
Output
Reports saved to vaulthound_reports/<target>_<timestamp>/
| File | Description |
|---|---|
| report.html | Dark-mode HTML dashboard — open in browser |
| report.json | Machine-readable findings for pipeline integration |
| report.txt | Plain text summary |
| vaulthound.log | Full debug log |
| scan_config.json | Exact configuration used |
Usage
# Install
pip install envleaks
# Scan current directory
envleaks scan .
# Critical and high only
envleaks scan . --severity critical,high
# Also scan all past git commits
envleaks scan . --git-history
# Export JSON report
envleaks scan . --format json --output report.json
# CI mode — exits 1 if findings
envleaks scan . --ci --severity critical,high
# SARIF for GitHub Advanced Security
envleaks scan . --format sarif --output envleaks.sarif
# List all detection rules
envleaks list-rules
envleaks list-rules --severity criticalDetection Rules
| Category | Rules | Examples |
|---|---|---|
| AWS | 3 | Access Key, Secret Key, Session Token |
| GitHub | 5 | Classic PAT, OAuth, Fine-Grained PAT, App tokens |
| Google / GCP | 3 | API Key, Service Account JSON |
| OpenAI | 2 | API Key, Organization ID |
| Anthropic | 1 | API Key |
| Stripe | 4 | Live/Test Secret, Webhook, Publishable |
| Slack | 4 | Bot Token, User Token, App Token, Webhook URL |
| Database URLs | 2 | PostgreSQL, MongoDB Atlas URI |
| Private Keys | 5 | RSA, EC, OpenSSH, PGP, PKCS#8 |
| JWT | 1 | JSON Web Token |
| Discord / Telegram | 3 | Bot tokens, Webhook URLs |
| Firebase | 2 | Database URL, FCM Server Key |
| Generic | 3 | Secret assignments, Bearer tokens, Basic Auth in URLs |
| NPM | 2 | Registry auth token, Access token |
| + more | 20+ | Twilio, SendGrid, Heroku, Azure, Cloudflare, DigitalOcean... |
CI/CD Integration
- name: Scan for secrets
run: |
pip install envleaks
envleaks scan . --ci --severity critical,high
# Full SARIF → GitHub Security tab
- name: Scan (SARIF)
run: |
pip install envleaks
envleaks scan . --format sarif --output envleaks.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: envleaks.sarifUsage
# Install
pip install gitdork
# Generate dorks for a domain
gitdork generate example.com
# Generate for a GitHub org/repo
gitdork generate ExploitCraft/ReconNinja
# Google dorks only
gitdork generate example.com --engine google
# Secrets and misconfigs only
gitdork generate example.com --category secrets,misconfigs
# Enrich with GitHub API for tech-stack dorks
gitdork generate ExploitCraft/ReconNinja --enrich
# Export to JSON
gitdork generate example.com --format json --output dorks.json
# Export to Markdown (for reports)
gitdork generate example.com --format markdown --output dorks.md
# Group output by category
gitdork generate example.com --group-by category
# List all categories / engines
gitdork list-categories
gitdork list-enginesDork Categories
| ID | Description | Examples |
|---|---|---|
| secrets | API keys, tokens, passwords, private keys | filetype:env "api_key", BEGIN RSA PRIVATE KEY |
| sensitive_files | .env, .sql, .log, .bak, config files | filetype:sql, inurl:".git/config" |
| exposed_dirs | Open directory listings | intitle:"index of /" |
| misconfigs | phpMyAdmin, Jenkins, Grafana, debug mode | inurl:phpMyAdmin, port:2375 |
| login_panels | Admin panels, login pages | inurl:admin, intitle:"login" |
| error_pages | Stack traces, PHP errors, SQL errors | "stack trace", "SQL syntax" |
| subdomains | Subdomain enumeration, infra discovery | site:*.example.com |
| code_leaks | TODO credentials, internal-only code | "do not commit" |
Engines
| Engine | Operators | Best For |
|---|---|---|
| site: filetype: intitle: inurl: | Exposed files, admin panels, error pages | |
| shodan | hostname: port: ssl: product: | Open ports, exposed services, infra recon |
| github | org: filename: extension: | Hardcoded secrets, leaked credentials in repos |
Usage
# Install
pip install wifi-passview
# Dump all saved WiFi profiles
wifi-passview dump
# Redact passwords (safe for screenshots)
wifi-passview dump --redact
# Hide passwords entirely
wifi-passview dump --no-password
# Export to JSON
wifi-passview dump --format json --output wifi.json
# Export to CSV
wifi-passview dump --format csv --output wifi.csv
# Search for a specific network
wifi-passview search "HomeNetwork"
# Linux — run with sudo for full passwords from NetworkManager
sudo wifi-passview dumpPlatform Notes
| Platform | Method | Requires |
|---|---|---|
| Linux | NetworkManager /etc/NetworkManager/system-connections/ | sudo for passwords |
| Linux | wpa_supplicant /etc/wpa_supplicant/wpa_supplicant.conf | sudo |
| Linux | iwd /var/lib/iwd/*.psk | sudo |
| Linux | nmcli fallback — SSID list only | No root |
| Windows | netsh wlan show profiles + key=clear | No admin |
| macOS | security find-generic-password (Keychain) | Keychain permission |