Give Kumo a domain and it maps everything reachable about it in one pass: DNS and email security, certificates and subdomains from CT logs, open ports, technology fingerprints, leaked credentials and infostealer infections, cloud buckets, and 419 vulnerability checks against known exposures. Twenty-nine modules run in parallel, each one streaming its own card the moment it lands — in the terminal or in the browser.
No API key is required for any of it.
pip install flask requests dnspython urllib3
python3 kumo.py # home screen — pick modules by number
python3 kumo.py --web # web dashboard → http://127.0.0.1:8888
python3 kumo.py example.com # straight to a full scan
The dashboard mid-scan: cards stream in as each module finishes,
glowing by severity, with the vulnerability scanner leading on findings.
- Installation
- Running your first scan
- The terminal
- The dashboard
- Themes
- Vulnerability scanner
- Modules
- Optional API keys
- CLI reference
- Tests
- Credits
- Ecosystem
| OS | Linux, macOS or Windows |
| Python | 3.8+ |
| Rights | none — Kumo never needs root |
| API keys | none required |
git clone https://github.com/karim852/KUMO-Domain-Recon-Tool
cd KUMO-Domain-Recon-Tool
pip install flask requests dnspython urllib3Optional extras, each used by a single module and skipped cleanly when absent:
pip install brotli zstandard playwrightNothing to configure. There is no config file, no key file and no database. Kumo reads what it needs from public sources at run time.
python3 kumo.pyWith no target, Kumo opens its home screen: every module numbered and grouped, with the web interface on top.
| Input | Runs |
|---|---|
1 4 12 |
just those modules |
a |
all 29 |
f |
fast scan — skips the slow modules |
w |
the web dashboard |
q |
quit |
Then enter the domain when prompted. Or skip the menu entirely:
python3 kumo.py example.com -m dns sslModules run in parallel, so results do not arrive in order. A spider crawls the strand while they run, spinning silk behind it as each one lands, with the modules still in flight trailing the counter.
python3 kumo.py example.com -o report.jsonThe terminal is not a fallback — every module renders in full, with its own layout, tables and severity colouring.
| Home screen | all modules numbered, grouped, sized to the terminal |
| Selection | by number, or a / f / w |
| Themes | four palettes in 24-bit colour, --theme or KUMO_THEME |
python3 kumo.py --web # → http://127.0.0.1:8888
python3 kumo.py --web -p 9000 # custom portEach module gets a card that appears immediately, shows a rotating edge while it is still running, then fills and takes on the colour of what it found — red for critical, amber for warnings, green for clean.
| Streaming | cards arrive as modules finish, no waiting for the slowest |
| Severity glow | card colour is derived from the badges it renders |
| Module pills | click to enable or disable before scanning |
| Export | JSON, or a standalone HTML report |
| Themes | four, switchable live, remembered across reloads |
Four palettes, in both the dashboard and the terminal. Click a dot in the header, or press Ctrl+Shift+T to cycle. The choice is saved and survives a reload.
| Theme | Character |
|---|---|
| Void (default) | deepest navy, cyan bloom, flat surfaces |
| Void Glass | lit card edges, under-glow, larger radius |
| Web 蜘蛛 | violet accent, strongest glow |
| Carbon | neutral surfaces, restrained glow — best for client screenshots |
In the terminal:
python3 kumo.py --theme carbon example.com
export KUMO_THEME=webAdding a fifth theme is one palette block plus one dot — every renderer reads its colours through the same token set.
419 checks, no external tool and no template directory to sync. The engine
mirrors nuclei's matcher model — status, word, regex, size and a small
dsl, combined with matchers_condition.
29 modules, every one running in parallel. Click a module to see what it returns on a real scan.
Run them by number from the home screen, or by name: python3 kumo.py corp.demo -m dns ssl nuclei
📡 DNS — Records + email security · dns
Full DNS enumeration with a security grade on email protection. Detects missing DMARC, weak SPF policies, absent DKIM, and open zone transfers.
📍 Geolocation — IP + ASN · geo
Resolves the domain to IPv4/IPv6, geolocates each IP, and pulls ASN, ISP, and organization data.
🌐 WHOIS / RDAP — Registration data · whois
Full registrar record including creation date, expiry, registrant info, and nameservers. Detects domains expiring soon and privacy-protected registrations.
🔒 SSL/TLS — Certificate analysis · ssl
Inspects the full certificate chain — issuer, expiry, Subject Alternative Names, cipher suite, and protocol version. Flags expired, self-signed, or misconfigured certificates.
🚪 Port Scan — 70+ ports + banners · ports
Scans 70+ common ports and grabs service banners for each open one. False-positive hardened: the host is first probed on random unused ports — if it answers those too (tarpit, transparent proxy, or firewall that accepts everything), only ports with real application-layer evidence (a service banner, a TLS handshake, or a valid HTTP reply) are reported. Every open port is also re-verified before being listed. Enriched with data from Shodan and Censys when available.
🗺️ Subdomain Discovery — 4 passive sources + CT logs · subdomains
Queries crt.sh, HackerTarget, RapidDNS, and AlienVault OTX simultaneously, cross-references with Certificate Transparency logs, resolves every result, checks if it's alive, and flags anything that looks sensitive.
🔨 Subdomain Brute Force · brute
Tests thousands of common subdomain names via DNS with wildcard detection — eliminates false positives automatically. Finds subdomains that passive sources miss entirely.
🎯 Favicon Hash — tech fingerprint · favicon
Fetches the favicon (HTML-declared first, then common paths in parallel — bounded so it never hangs), computes the MMH3 hash used by Shodan/Censys, and maps known hashes to technologies. Handy for fingerprinting the stack and pivoting to other hosts running the same favicon.
🖼️ Screenshot — Website overview · screenshot
Takes a live screenshot of the target and runs it against the ransomware.live feed. Pulls the page title, meta description, favicon, CMS fingerprint, and checks whether the domain appears in any ransomware gang's leak posts.
🕵️ WhatWeb — Technology fingerprinting · whatweb
Identifies the full tech stack — CMS, frameworks, JavaScript libraries, analytics, CDN, server, and more. Runs 80+ signature checks without sending a single intrusive request.
🤖 Robots / Security — Crawl rules + disclosure · robots
Parses robots.txt for disallowed and allowed paths, highlights sensitive ones, and checks for a security.txt vulnerability disclosure contact. Also discovers sitemaps.
📚 Wayback Machine — Archive mining · wayback
Queries the Wayback Machine for archived snapshots of the target — mining old endpoints, forgotten login pages, exposed config files, and paths that no longer exist on the live site but reveal the attack surface history.
🧠 Content Intelligence — JS/HTML extraction · content_intel
Scrapes the homepage HTML, inline scripts, and every first-party JS file, then extracts the valuable signal — not just secrets. Endpoints, internal/external URLs, API routes, database connection URIs, cloud storage (S3 / GCS / Azure / Firebase), emails, internal hosts, JWTs, private keys, source maps, and risky code comments. Static assets (.css, .js, images, fonts) and documentation domains (MDN, W3C) are filtered out; external URLs are collapsed to unique third-party hosts.
🔎 HTTP Inspector — request/response headers · http_inspect
Your browser's DevTools Network tab, headless. Shows exactly what Kumo sent and exactly what came back — the full request headers, every response header verbatim, the complete redirect chain, cookie security flags, allowed HTTP methods, CORS behaviour, and any non-standard or leaky headers worth a second look.
🔌 API Endpoint Fuzzer · api_fuzzer
Smart API discovery. Probes a random baseline first to detect catch-all servers, confirms a base API path actually exists before fuzzing, then discovers live endpoints and checks for GraphQL introspection. Every hit shows its HTTP status and response byte size.
🔑 JS Secret Scanner · js_secrets
Pulls and scans first-party JavaScript for hardcoded secrets — API keys, tokens, cloud credentials, and private keys — with clear-text output and the exact source line for each hit.
🔓 Sensitive Endpoint Discovery — 80+ known paths · endpoints
Probes 80+ paths that are commonly left exposed: admin panels, backup files, config files, debug interfaces, API docs, source control, and infrastructure files. Every hit is severity-graded. A 403 Forbidden response still confirms the path exists and is automatically downgraded one severity level.
🛡️ HTTP Headers — Security grade · headers
Checks every security-relevant response header and grades the configuration. Flags missing headers that leave the site open to XSS, clickjacking, MIME sniffing, and information disclosure.
🧱 WAF Detection · wafw00f
Fingerprints the WAF or CDN sitting in front of the target using 40+ signatures — headers, cookies, server banners, and active probe responses. If nothing is detected, it says so clearly.
🔓 Vulnerability Scanner — 419 built-in checks · nuclei
Checks include: Log4Shell · Spring4Shell · Drupalgeddon2 · Confluence OGNL · Oracle WebLogic · 15 WordPress plugin CVEs · CORS misconfiguration · Host header injection · Clickjacking and many more.
Recent CVE detection (2024–2026) — a dedicated set of detection-only templates fingerprints exposure/version for the newest, actively-exploited CVEs (no exploitation, just correlation):
RECENT CVE cPanel / WHM Login Panel Exposed CVE-2026-41940
RECENT CVE Next.js Middleware Auth Bypass CVE-2025-29927
RECENT CVE SharePoint "ToolShell" RCE CVE-2025-53770
RECENT CVE SAP NetWeaver Visual Composer CVE-2025-31324
RECENT CVE Ivanti EPMM / Connect Secure CVE-2025-4427
RECENT CVE CrushFTP Auth Bypass CVE-2025-31161
... 15 more (Fortinet · Palo Alto · Oracle EBS · Craft CMS · Vite · Langflow · Wazuh)
🔭 Shodan — InternetDB + CVE enrichment · shodan
Queries Shodan InternetDB (free, no key) for open ports, CPEs, hostnames, and CVEs. Every CVE is enriched with CVSS score, severity, KEV flag, and description via Shodan's free CVEDB API.
🔬 Censys — Hosts + certificates · censys
Pulls host data and certificate intelligence from Censys. Enriched with optional API key for full results.
💀 Breach & Credential Intelligence — 5 sources · breachintel
Aggregates from 5 free sources and runs an automatic per-email stealer check against Hudson Rock's database — showing which employee machines were infected, what malware ran, what passwords were stolen, and which services were compromised.
📧 Email Harvester · email_harvest
Discovers @domain employee email addresses across multiple open sources, then merges in every confirmed email found during the breach intelligence scan.
Sources: Hunter.io · crt.sh certificate logs · web page scraping (contact / about / team) · DNS SOA record · WHOIS contact · Wayback Machine archive · common business prefixes.
☁️ Cloud Storage Buckets · cloud_buckets
Enumerates likely AWS S3 / GCP / Azure bucket names derived from the domain and checks for public exposure. Only a confirmed HTTP 200 (publicly readable) is reported — unreliable 403 responses are never flagged as findings.
🔍 Google Dorks — 61 queries · dorks
Generates 61 targeted Google dork queries pre-built for the domain — one click opens them in Google. Covers exposed files, login pages, sensitive directories, subdomains, cached pages, code repositories, and more.
🔗 OSINT Platform Links — 26 sources · osint
Pre-generates 26 investigation links for the target across the most useful OSINT platforms — one click and you're there.
🧱 CMS Deep Scan — WordPress / Joomla / Drupal · cms
Identifies the CMS first, then runs only that platform's checks, so a Drupal site is never probed for WordPress paths.
Detection uses 18 weighted signals — asset paths, generator meta, headers — never a product name in the page text. A blog that writes about WordPress is not reported as running it.
Once identified, it reads the version (tagged as inference, since a backported patch doesn't change the advertised number) and probes that CMS's own sensitive paths: 34 in total — config backups, reachable installers, debug logs, exposed database files. On WordPress it also enumerates users via the REST API, plus plugins and themes with versions from their readmes.
Fingerprinting covers 20 platforms including Magento, Shopify, Ghost, Typo3 and PrestaShop. Deep checks exist for three of them, so anything else is reported as identified with no deep checks available, rather than returning an empty card that would read as a clean result.
🎛️ Hosting Control Panels — 17 panels · panels
Finds cPanel, WHM, Plesk, DirectAdmin, Webmin, Virtualmin, CyberPanel, aaPanel, Hestia, VestaCP, CentOS Web Panel, ISPConfig, Froxlor, Cockpit, Ajenti and more, across 20 ports.
Each panel is identified by its login interface — page markup, session cookies, form actions — never by its name, so a web hosting company's own marketing site reports none of the panels it sells.
Cloudflare proxies ports 2082-2096 and 8443, so an open port there is the edge and not your server. Those are excluded behind a CDN and the output says why; non-proxied panel ports are still checked. A panel port that answers without a panel interface is reported as an unexplained open port instead.
Everything above works with no key at all. These only unlock richer data:
| Variable | Unlocks |
|---|---|
SHODAN_API_KEY |
full Shodan host data — banners, services, history |
CENSYS_API_ID + CENSYS_API_SECRET |
full Censys host & certificate search |
HIBP_API_KEY |
per-email HaveIBeenPwned lookup |
CHIASMODON_API_KEY |
Chiasmodon pro tier — more results |
RANSOMWARE_LIVE_API_KEY |
Ransomware.live pro feed |
export SHODAN_API_KEY="your_key_here"
# read at run time — never written to diskpython3 kumo.py home screen — pick modules by number
python3 kumo.py example.com full scan
python3 kumo.py example.com --fast skip the slow modules
python3 kumo.py example.com -m dns ssl ports specific modules only
python3 kumo.py example.com -o report.json export to JSON
python3 kumo.py --web web dashboard (port 8888)
python3 kumo.py --web -p 9000 custom port
python3 kumo.py --list-modules every module, grouped
python3 kumo.py --theme carbon example.com void · glass · web · carbon
python3 kumo.py example.com --no-spider disable the crawl animation
python3 kumo.py example.com --no-color pipe-friendly output
| Flag | Default |
|---|---|
--theme |
void, or $KUMO_THEME |
-p / --port |
8888 |
--host |
0.0.0.0 |
Fast mode skips: wayback · brute · subdomains · screenshot ·
email_harvest · nuclei · cloud_buckets
Every detection in Kumo is checked against negative controls as well as positive ones, because the hard part of a recon tool is not finding things, it is not inventing them.
| Control | Must report |
|---|---|
| A blog that writes about WordPress, Joomla and Drupal | nothing |
| A hosting company whose homepage sells cPanel, WHM and Plesk | no panels |
| A hardened site whose soft-404 answers every probe with HTTP 200 | nothing |
| A correctly installed WordPress (real 6.7.10) | nothing above low |
| A storefront on a platform with no deep checks | the platform, not a blank card |
Each of the 419 rules is run against a vulnerable fixture and against
eleven of those decoys, and fails if it either misses its target or fires on
something harmless. Version rules are additionally checked against the
patched release, which is the case that actually matters. Dashboard cards are
executed in Node against real data, an error and an empty object, because
node --check parses syntax but cannot catch an undefined variable.
Most of these controls exist because a real false positive got through once. The suite and its lab fixtures are maintained privately rather than shipped here.
Kumo collects and correlates — the data belongs to the sources below, and they deserve the star far more than this repo does:
| Source | Used for |
|---|---|
| crt.sh | certificate transparency logs, subdomain discovery |
| Shodan InternetDB | open ports, CVEs, host tags — free, keyless |
| Hudson Rock | infostealer infection intelligence |
| ProjectDiscovery | the templates behind most vulnerability rules |
| Wayback Machine | archived URLs and historical surface |
Respect each source's own terms of use and rate limits.
| Tool | Domain | |
|---|---|---|
| ☁️ | Kumo 蜘蛛 | domain OSINT & reconnaissance |
| 🕸 | Kumo Recon — browser extension | recon any site you are on, one click, no install |
| 🌑 | Kage 影 | is your machine actually clean? Windows host triage |
⚠️ For authorized security testing only. Only scan domains you own or have explicit written permission to test. Free to use, modify and share for educational and personal purposes — please credit the work. Commercial use requires explicit permission from the author.
Built for those who move fast. 蜘蛛






























