38-phase automated reconnaissance framework for security researchers
Project description
██████╗ ███████╗ ██████╗ ██████╗ ███╗ ██╗███╗ ██╗██╗███╗ ██╗ ██╗ █████╗
██╔══██╗██╔════╝██╔════╝██╔═══██╗████╗ ██║████╗ ██║██║████╗ ██║ ██║██╔══██╗
██████╔╝█████╗ ██║ ██║ ██║██╔██╗ ██║██╔██╗ ██║██║██╔██╗ ██║ ██║███████║
██╔══██╗██╔══╝ ██║ ██║ ██║██║╚██╗██║██║╚██╗██║██║██║╚██╗██║██ ██║██╔══██║
██║ ██║███████╗╚██████╗╚██████╔╝██║ ╚████║██║ ╚████║██║██║ ╚████║╚█████╔╝██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═══╝╚═╝╚═╝ ╚═══╝ ╚════╝ ╚═╝ ╚═╝
38-phase automated reconnaissance framework for authorized security testing.
⚠️ Use only against targets you own or have explicit written permission to test.
What it does
ReconNinja turns a single command into a full recon engagement. Point it at a domain or IP and it drives the complete pipeline — passive OSINT, port scanning, web discovery, vulnerability scanning, cloud intelligence, credential hunting, and AI-powered threat analysis — then generates HTML, JSON, Markdown, and SARIF reports.
v8.0.0 added a local desktop GUI: launch reconninja --gui, open your browser, and run scans point-and-click with real-time progress streaming and an in-app findings dashboard.
Install
# Recommended — full install with all system tools
git clone https://github.com/ExploitCraft/ReconNinja.git
cd ReconNinja && chmod +x install.sh && ./install.sh
# Python + alias only (skip Go/Rust tools)
./install.sh --python-only
# Skip Go tools
./install.sh --skip-go
# Skip RustScan
./install.sh --skip-rust
# From PyPI — installs reconninja command automatically
pip install ReconNinja
# From GitHub (latest commit)
pip install git+https://github.com/ExploitCraft/ReconNinja.git
# With optional extras
pip install "ReconNinja[full]" # AI providers + Shodan + pysnmp
pip install "ReconNinja[ai]" # AI providers only (groq, openai, gemini)
pip install "ReconNinja[dns]" # dnspython for zone transfer
Arch Linux: if
paruis found it's used exclusively (official + AUR, no sudo needed). Optionally add the BlackArch repo when prompted — unlocks 2800+ security tools viapacman.
Quick start
# Interactive mode — guided setup, no flags needed
reconninja
# Standard scan
reconninja -t example.com
# Full 38-phase pipeline, no prompts
reconninja -t example.com --profile full_suite -y
# Desktop GUI (opens browser on http://127.0.0.1:7117)
reconninja --gui
# Passive intel only — no keys required
reconninja -t example.com --whois --wayback --ssl -y
# v6 modules — no keys required
reconninja -t example.com --github-osint --js-extract \
--cloud-buckets --dns-zone --waf --cors -y
# Full scan with keys + Slack alerts
reconninja -t example.com --profile full_suite \
--shodan --shodan-key KEY \
--vt --vt-key KEY \
--ai --ai-provider groq --ai-key KEY \
--github-osint --github-token TOKEN \
--notify slack://hooks.slack.com/services/xxx \
-y
# Diff two scan reports
reconninja --diff reports/example.com/20260101/report.json \
reports/example.com/20260301/report.json
GUI — v8.0.0
reconninja --gui
# Opens http://127.0.0.1:7117
The GUI is a local Flask web app — nothing leaves your machine.
| Feature | Detail |
|---|---|
| Scan configuration | Target, profile, custom module picker, output formats, timeout |
| Live progress | Real-time log stream via SSE — no page refresh |
| Findings dashboard | Severity breakdown, findings table with Critical / High / Medium / Low / Info |
| Scan history | Browse previous runs, re-open output directories |
Scan profiles
| Profile | What runs |
|---|---|
fast |
Top 100 ports, no scripts |
standard |
Top 1000 ports, scripts + versions (default) |
thorough |
All ports, OS detection, aggressive scripts |
stealth |
SYN scan, low timing, no banners |
web_only |
httpx + dir scan + nuclei |
port_only |
RustScan + Masscan + Nmap |
full_suite |
All 38 phases |
custom |
Interactive module builder |
Pipeline — 38 phases
Phase 1 Passive Recon subdomain enum — amass, subfinder, crt.sh
Phase 2 RustScan ultra-fast port discovery (all 65535 ports)
Phase 2b Async TCP pure-Python fallback, no root required
Phase 3 Masscan optional SYN sweep (root required)
Phase 4 Nmap deep service / version / script analysis
Phase 4b CVE Lookup NVD API CVE matching on detected services
Phase 5 httpx live web detection + tech fingerprint
Phase 5b WAF Detection passive headers + wafw00f
Phase 5c CORS Scanner misconfiguration probe
Phase 6 Dir Scan feroxbuster → ffuf → dirsearch fallback chain
Phase 6b JS Extraction endpoint + secret extraction from JS files
Phase 7 WhatWeb technology fingerprinting
Phase 8 Nikto classic web vulnerability scanner
Phase 9 Nuclei template-based vulnerability detection
Phase 10 Screenshots aquatone → gowitness fallback
Phase 11 AI Analysis Groq / Ollama / Gemini / OpenAI
Phase 12 Intelligence WHOIS · Wayback · SSL · VirusTotal · Shodan
Phase 13a GitHub OSINT secret / config file exposure search
Phase 13b Cloud Buckets AWS S3 / Azure Blob / GCS enumeration
Phase 13c DNS Zone Transfer AXFR vulnerability check
Phase 14a Email Security SPF / DKIM / DMARC + spoofability score 0–100
Phase 14b Breach Check HaveIBeenPwned domain breach lookup
Phase 14c Cloud Metadata AWS / Azure / GCP IMDS SSRF probe
Phase 14d GraphQL Scanner endpoint discovery + introspection dump
Phase 14e JWT Scanner none-algorithm bypass + weak HMAC secret cracker
Phase 14f ASN / BGP Map owned IP CIDRs via RIPE Stat
Phase 14g Supply Chain vulnerable JS libs + npm squatting check
Phase 14h K8s / Docker Probe unauthenticated Kubernetes / Docker API detection
Phase 14i DB Exposure Redis / Elasticsearch / MongoDB / Memcached unauth
Phase 14j SMTP Enum user enumeration via VRFY / EXPN / RCPT TO
Phase 14k SNMP Scan community string brute-force + MIB walk
Phase 14l LDAP Enum anonymous bind + user / group / attribute dump
Phase 14m DevOps Scan Terraform state file exposure + Jenkins anon access
Phase 14n GreyNoise IP noise / RIOT / unknown tagging
Phase 14o Typosquat 200+ lookalike domain variants, live DNS-resolved
Phase 14p Censys host intelligence (free API credentials)
Phase 14q DNS History historical resolutions via VirusTotal PDNS
Phase 15 Plugins drop a .py into plugins/ to extend the pipeline
Phase 16 Reports HTML · JSON · Markdown · SARIF 2.1.0
All flags
Target
-t, --target Domain, IP, CIDR, or path to list file
-p, --profile Scan profile (see above)
-y, --yes Skip confirmation prompt (CI / automation)
Port scanning
--all-ports Scan all 65535 ports
--top-ports N Top N ports (default: 1000)
--timing T1-T5 Nmap timing template (default: T4)
--threads N Concurrent threads (default: 20)
--rustscan Enable RustScan pre-scan (requires rustscan)
--masscan Enable Masscan sweep (requires root)
--masscan-rate N Masscan packets per second (default: 5000)
--async-concurrency N Async TCP concurrency (default: 1000)
--async-timeout N Async TCP timeout in seconds (default: 1.5)
Web & discovery
--httpx Live service detection and fingerprinting
--whatweb WhatWeb technology fingerprinting
--ferox Feroxbuster directory brute-force
--nikto Nikto web server vulnerability scanner
--nuclei Nuclei template-based vulnerability scanner
--aquatone Visual recon and screenshot capture
--subdomains Subdomain enumeration (subfinder, amass, assetfinder)
--wordlist-size small (~1K) | medium (~10K, default) | large (~100K)
Vulnerability intelligence
--cve NVD CVE lookup for detected services
--nvd-key KEY NVD API key (50 req/30s vs 5 without key)
v5 integrations
--shodan Shodan host intelligence
--shodan-key KEY Shodan API key
--vt VirusTotal reputation check
--vt-key KEY VirusTotal API key
--whois WHOIS lookup (no key needed)
--wayback Wayback Machine URL discovery (no key needed)
--ssl SSL/TLS certificate analysis (no key needed)
v6 modules
--github-osint GitHub secret / config file exposure search
--github-token KEY GitHub token (raises rate limit 60 → 5000 req/hr)
--js-extract JS endpoint and secret extraction
--cloud-buckets Cloud bucket enumeration (AWS / Azure / GCS)
--dns-zone DNS zone transfer (AXFR) check
--waf WAF detection
--cors CORS misconfiguration scanner
v7 modules
--email-security SPF / DKIM / DMARC validation + spoofability score
--breach-check HaveIBeenPwned domain breach check
--hibp-key KEY HIBP API key for email-level lookup
--cloud-meta AWS / Azure / GCP metadata SSRF probe
--graphql GraphQL endpoint discovery + introspection
--jwt-scan JWT none-alg bypass + weak HMAC secret cracker
--asn-map BGP / ASN → all owned IP CIDRs
--supply-chain Vulnerable JS libs + npm squat check
--k8s-probe Kubernetes / Docker unauthenticated API detection
--db-exposure Unauthenticated Redis / Elasticsearch / MongoDB / Memcached
--smtp-enum SMTP user enumeration (VRFY / RCPT TO)
--snmp-scan SNMP community string brute-force + MIB walk
--ldap-enum LDAP anonymous bind + user / group dump
--devops-scan Terraform state file + Jenkins exposure
--greynoise GreyNoise IP noise / RIOT / unknown tagging
--greynoise-key KEY GreyNoise API key (optional — community tier is free)
--typosquat Lookalike domain variant detection
--censys Censys host intelligence
--censys-id ID Censys API ID
--censys-secret KEY Censys API secret
--dns-history DNS history via VirusTotal PDNS (requires --vt-key)
--sarif Export findings as SARIF 2.1.0
v8 features
--api-fuzz REST API fuzzer: endpoint discovery, IDOR, auth bypass
--oauth-scan OAuth 2.0 / OIDC misconfiguration scanner
--web-vulns XSS, SQLi, LFI, SSRF vulnerability probes
--open-redirect Open redirect vulnerability scanner
--linkedin LinkedIn employee OSINT + tech stack inference
--paste-monitor Paste site credential and secret leak scanner
--se-osint Social engineering OSINT: emails, phones, contacts
--apk-scan PATH APK static analysis (provide path to .apk file)
--app-store Google Play + Apple App Store metadata scraper
--anon-detect Tor / VPN / proxy / hosting IP detection
--dns-leak DNS rebinding, open resolver, internal exposure check
--web3-scan Smart contract recon, ABI exposure, on-chain data
--ens-lookup ENS domain lookup + on-chain social profile resolution
--gui Launch local desktop GUI on http://127.0.0.1:7117
--gui-port N GUI port (default: 7117)
AI analysis
--ai Enable AI threat analysis
--ai-provider groq | ollama | gemini | openai (default: groq)
--ai-key KEY API key for the selected AI provider
--ai-model MODEL Override the default model
--ai-consensus Run multiple AI providers and synthesize consensus
--attack-paths AI-generated MITRE ATT&CK kill-chain attack paths
--ai-remediate Per-finding AI remediation + CVSSv3 scoring
Output & integrations
--output DIR Output directory (default: reports/)
--output-format FMT all | html | json | md | txt | pdf | sarif
--pdf-report Export pentest-ready PDF report
--jira URL:EMAIL:TOKEN:PROJECT Push findings to Jira
--gh-issues TOKEN:OWNER/REPO Push findings to GitHub Issues
--siem URL:TOKEN[:TYPE] Push to Splunk / Elastic HEC
--notify URL Webhook: slack://... discord://... https://...
--exclude PHASES Comma-separated phases to skip
--timeout N Per-operation timeout in seconds (default: 30)
--rate-limit N Seconds between requests (default: 0)
Scan management
--resume FILE Resume from a state.json checkpoint
--diff A.json B.json Compare two scan reports
--update Check GitHub for a newer version
--force-update Force update even if already on latest
--check-tools Show availability of all external tools
Output
Each scan creates a timestamped folder:
reports/
└── example.com_20260320_120000/
├── report.html ← dark-mode dashboard
├── report.json ← full machine-readable results
├── report.md ← markdown summary
├── report.sarif ← SARIF 2.1.0 for GitHub / VSCode / Azure DevOps
├── scan_config.json ← exact config used for this run
├── scan.log ← full execution log
├── state.json ← resume checkpoint
├── subdomains/
├── nmap/
├── nuclei/
├── js_extract/
├── cloud_buckets/
├── dns_zone/
├── waf/
└── cors/
Scan diff
# Baseline scan
reconninja -t example.com -y
# Scan again after changes
reconninja -t example.com -y
# See exactly what changed
reconninja --diff reports/example.com/20260101_120000/report.json \
reports/example.com/20260320_120000/report.json
Diff output covers: new / closed ports, new subdomains, new vulnerabilities, new technologies, changed service versions.
Notifications
# Slack
reconninja -t example.com --notify slack://hooks.slack.com/services/T.../B.../xxx -y
# Discord
reconninja -t example.com --notify discord://discord.com/api/webhooks/xxx/yyy -y
# Generic JSON webhook
reconninja -t example.com --notify https://your-server.com/webhook -y
Resume interrupted scans
reconninja --resume reports/example.com_20260320_120000/state.json
All results are checkpointed after every phase and fully restored on resume.
Plugin system
Drop a .py file into plugins/ and it runs automatically after all phases complete.
# plugins/my_check.py
PLUGIN_NAME = "my_check"
PLUGIN_VERSION = "1.0"
def run(target, out_folder, result, cfg):
print(f"Custom: {len(result.github_findings)} GitHub findings")
print(f"Custom: {len(result.bucket_findings)} bucket findings")
Tool dependencies
reconninja --check-tools
| Type | Tools |
|---|---|
| Port scanning | nmap · rustscan · masscan |
| Subdomain enum | amass · subfinder · assetfinder |
| Web | httpx · feroxbuster · ffuf · dirsearch · whatweb · nikto · nuclei · wafw00f |
| Screenshots | aquatone · gowitness |
| DNS | dig |
| GUI | flask |
Development
git clone https://github.com/ExploitCraft/ReconNinja.git
cd ReconNinja
chmod +x install.sh && ./install.sh
# Run all tests
python3 -m pytest tests/ -v
# Run specific test suites
python3 -m pytest tests/test_orchestrator.py -v
python3 -m pytest tests/test_v8_2_release.py -v
Changelog highlights
v8.3.0
- Centralized version into
info/version— single source of truth; bump one file, everything syncs
v8.2.1
- Fixed
pip install ReconNinja—reconninjacommand now works after install
v8.2.0
- Fixed
requirements.txt— 9 missing core dependencies added - Fixed
--help— 17 arguments had no description
v8.0.0
- Desktop GUI —
reconninja --guilaunches a local Flask web app on port 7117 - 13 new scan modules across API security, social engineering, mobile, privacy, and Web3
v7.0.0
- 17 new modules across Phases 14a–14q
v6.0.0
- GitHub OSINT, JS extraction, cloud bucket enumeration, WAF detection, CORS scanner, DNS zone transfer, scan diff
Full history in CHANGELOG.md
Part of the ExploitCraft Ecosystem
| Tool | Description |
|---|---|
| envleaks | Codebase & git history secret scanner |
| gitdork | Google / Shodan dork generator |
| wifi-passview | Cross-platform WiFi credential dumper |
| VaultHound | Secret & credential scanner |
| ReconNinja | 38-phase recon framework ← you are here |
License
MIT — see LICENSE
ExploitCraft · Bangladesh · Building tools that matter
📄 Full documentation → doc.emonpersonal.xyz
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reconninja-8.3.0.tar.gz.
File metadata
- Download URL: reconninja-8.3.0.tar.gz
- Upload date:
- Size: 195.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08a1ae189c5d8ada05ab62783bf49772d5cc56ec610170b64ee4f316bfb250b5
|
|
| MD5 |
5e8a4881a4d5a5a3b6de9b4794655f22
|
|
| BLAKE2b-256 |
3b0d0f3ef8c9eb903d86a115c668c1d74415f366bc763598541a5f4c12e371df
|
Provenance
The following attestation bundles were made for reconninja-8.3.0.tar.gz:
Publisher:
release.yml on ExploitCraft/ReconNinja
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reconninja-8.3.0.tar.gz -
Subject digest:
08a1ae189c5d8ada05ab62783bf49772d5cc56ec610170b64ee4f316bfb250b5 - Sigstore transparency entry: 1427886028
- Sigstore integration time:
-
Permalink:
ExploitCraft/ReconNinja@219bbc4903c1a17bc3fee58164dfe158c28ac5c6 -
Branch / Tag:
refs/tags/v8.3.0 - Owner: https://github.com/ExploitCraft
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@219bbc4903c1a17bc3fee58164dfe158c28ac5c6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file reconninja-8.3.0-py3-none-any.whl.
File metadata
- Download URL: reconninja-8.3.0-py3-none-any.whl
- Upload date:
- Size: 202.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afffa25579993526b49311d293282bc4b44736cf8992f0c693b19a93df0a81ea
|
|
| MD5 |
5e7e9c073581cb4fc30d5efb5557f1dd
|
|
| BLAKE2b-256 |
df426f2e1ac7ebee95f16998adce96023e2fdcdf6596fed8a6a80097b5e274c9
|
Provenance
The following attestation bundles were made for reconninja-8.3.0-py3-none-any.whl:
Publisher:
release.yml on ExploitCraft/ReconNinja
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reconninja-8.3.0-py3-none-any.whl -
Subject digest:
afffa25579993526b49311d293282bc4b44736cf8992f0c693b19a93df0a81ea - Sigstore transparency entry: 1427886106
- Sigstore integration time:
-
Permalink:
ExploitCraft/ReconNinja@219bbc4903c1a17bc3fee58164dfe158c28ac5c6 -
Branch / Tag:
refs/tags/v8.3.0 - Owner: https://github.com/ExploitCraft
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@219bbc4903c1a17bc3fee58164dfe158c28ac5c6 -
Trigger Event:
push
-
Statement type: