Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Passive and active reconnaissance, subdomain enumeration, DNS analysis, technology fingerprinting, and OSINT data correlation for authorized security assessments
.claude/skills/masriyan-reconnaissance-osint-automation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 148% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 299% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 135% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 269% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 265% | 0% |
Enable Claude to conduct comprehensive reconnaissance and open-source intelligence gathering during authorized security assessments. Claude performs passive and active recon using its native analysis capabilities and orchestrates the included scripts for automation at scale.
> Authorization Required: Always confirm written authorization for the target scope before proceeding. Unauthorized reconnaissance is illegal in most jurisdictions.
This skill activates when the user asks about:
bashpip install requests dnspython python-whois beautifulsoup4 shodan
Optional enhanced capabilities:
nmap — Active port scanningamass — Advanced subdomain enumerationtheHarvester — Email and domain harvestingWhen the user asks for passive recon or OSINT:
site:target.com filetype:pdf — Exposed documentssite:target.com inurl:admin — Admin panelssite:target.com ext:env OR ext:config — Config files"@target.com" site:linkedin.com — Employee enumeration"target.com" site:pastebin.com — Credential leaksorg:targetorg api_keyfilename:.env target.com"target.com" passwordWhen the user asks to enumerate subdomains:
resources/Output format for subdomain findings:
Target: example.com
Discovery Method: CT Logs + DNS Brute-Force
Discovered: 47 subdomains
LIVE SUBDOMAINS:
admin.example.com → 203.0.113.10 [HTTP 200] [nginx/1.18]
dev.example.com → 203.0.113.11 [HTTP 302 → /login]
api.example.com → 203.0.113.12 [HTTP 200] [cloudflare]
internal.example.com → 10.0.0.5 [No public response — internal?]
INFRASTRUCTURE CLUSTERS:
203.0.113.10-15 → AS12345 (Company Hosting)
Cloudflare CDN → 7 subdomains proxiedWhen the user asks to scan ports or detect services:
-sV) on all open ports-O) if authorizedProvide Nmap commands ready to run:
bash# Quick discovery nmap -sn 203.0.113.0/24 # Top 1000 TCP ports with service detection nmap -sV -sC --top-ports 1000 -oA scan_results 203.0.113.10 # Full port scan with script engine nmap -sV -sC -p- -T4 -oA full_scan 203.0.113.10
When the user asks for DNS analysis:
bash dig AXFR @ns1.example.com example.com
~all (softfail) or ?all (neutral) — both are weakp=none = monitoring onlyFlag these misconfigurations:
+all → Any server can send as this domainWhen the user asks to fingerprint technology:
Server: → Web server and versionX-Powered-By: → Application frameworkSet-Cookie: names → Session framework (PHPSESSID=PHP, JSESSIONID=Java)X-Generator: / X-WordPress-Cache: → CMS/robots.txt, /sitemap.xml, /.well-known/ for framework leaks/wp-admin/, /administrator/, /wp-json/)Technology stack report format:
URL: https://example.com
WEB SERVER: nginx/1.18.0 (Ubuntu)
APPLICATION: WordPress 6.4.2
LANGUAGE: PHP 8.1
DATABASE: MySQL (inferred from wp-config patterns)
CDN/WAF: Cloudflare
JS LIBRARIES: jQuery 3.6.0, Bootstrap 5.3
TLS: TLS 1.3, ECDHE-RSA-AES256-GCM-SHA384
NOTABLE HEADERS:
✗ Missing: X-Content-Type-Options
✗ Missing: X-Frame-Options
✗ Missing: Content-Security-Policy
✓ Present: Strict-Transport-SecurityWhen the user asks to correlate OSINT findings:
Every recon engagement should produce a structured report:
markdown# Reconnaissance Report — [Target] Date: [Date] | Scope: [Authorized Scope] | Analyst: [Name] ## Executive Summary [2-3 sentence overview of key findings] ## Discovered Assets - Subdomains: N found, N live - IP Ranges: [CIDRs] - Open Services: [Top findings] - Technologies: [Stack summary] ## Key Findings 1. [High-impact finding with evidence] 2. [Medium-impact finding] ... ## Attack Surface Summary [Map of entry points for follow-on testing] ## Recommended Next Steps - Feed live web apps → Skill 09 (Web Security) - Feed discovered services → Skill 02 (Vulnerability Scanner) - Feed cloud assets → Skill 10 (Cloud Security)
subdomain_enum.pybash# Passive CT log enumeration python scripts/subdomain_enum.py --domain target.com --passive-only --output results.json # Active brute-force with custom wordlist python scripts/subdomain_enum.py --domain target.com --wordlist resources/common_subdomains.txt --threads 20 --output results.json
dns_recon.pybash# Full DNS reconnaissance python scripts/dns_recon.py --domain target.com --output dns_report.json # Check zone transfer vulnerability python scripts/dns_recon.py --domain target.com --check-zone-transfer
tech_fingerprint.pybash# Single URL analysis python scripts/tech_fingerprint.py --url https://target.com --output tech_report.json # Batch URL fingerprinting python scripts/tech_fingerprint.py --urls urls.txt --output tech_report.json
| Next Step | Condition | Target Skill | |-----------|-----------|--------------| | Vulnerability assessment | Live services discovered | → Skill 02 | | Web application testing | Web apps found | → Skill 09 | | Cloud asset auditing | Cloud-hosted assets found | → Skill 10 | | Network traffic analysis | PCAP capture available | → Skill 08 | | IOC correlation | Suspicious infrastructure found | → Skill 06 |
Sharper, more current recon tradecraft:
CNAME (pointing to an unclaimed S3/Azure/GitHub Pages/Heroku/Fastly target), flag it as a takeover candidate and identify the fingerprint of the orphaned service.cloud_enum-style logic). Map ASN → CIDR → cloud-provider attribution.mmh3 hashes and JARM/JA4S server fingerprints in Shodan/Censys to find sibling infrastructure behind CDNs./graphql for introspection; harvest schema, types, and mutations to feed Skill 09.*.map source maps that leak internal paths.Precision rule: always separate confirmed assets (resolved + responding) from candidate assets (CT-log only) in output, and tag the discovery source per asset so findings are reproducible.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,327 | 20,731 | +27% | 1 | 1 | 0% | 1,938 | 4,802 | +148% | 0 | 0 | — |
case-02 | fail→fail | 13,196 | 20,805 | +58% | 1 | 1 | 0% | 2,154 | 5,260 | +144% | 0 | 0 | — |
case-03 | fail→fail | 15,144 | 18,838 | +24% | 1 | 1 | 0% | 1,884 | 5,188 | +175% | 0 | 0 | — |
case-04 | pass→pass | 14,109 | 13,649 | -3% | 1 | 1 | 0% | 2,314 | 4,805 | +108% | 0 | 0 | — |
case-05 | fail→fail | 21,641 | 14,521 | -33% | 1 | 1 | 0% | 1,878 | 4,293 | +129% | 0 | 0 | — |
case-06 | pass→fail | 9,925 | 10,579 | +7% | 1 | 1 | 0% | 1,581 | 4,768 | +202% | 0 | 0 | — |
case-07 | pass→pass | 6,508 | 6,693 | +3% | 1 | 1 | 0% | 940 | 4,203 | +347% | 0 | 0 | — |
case-08 | pass→pass | 4,778 | 12,225 | +156% | 1 | 1 | 0% | 513 | 3,765 | +634% | 0 | 0 | — |
case-09 | pass→pass | 3,705 | 4,483 | +21% | 1 | 1 | 0% | 609 | 3,902 | +541% | 0 | 0 | — |
case-10 | fail→pass | 6,320 | 5,575 | -12% | 1 | 1 | 0% | 1,038 | 4,146 | +299% | 0 | 0 | — |
case-11 | pass→pass | 9,969 | 9,015 | -10% | 1 | 1 | 0% | 1,677 | 4,658 | +178% | 0 | 0 | — |
case-12 | pass→pass | 15,617 | 16,265 | +4% | 1 | 1 | 0% | 2,554 | 6,061 | +137% | 0 | 0 | — |
case-13 | pass→pass | 15,425 | 10,783 | -30% | 1 | 1 | 0% | 2,341 | 4,744 | +103% | 0 | 0 | — |
case-14 | fail→pass | 9,630 | 1,999 | -79% | 1 | 1 | 0% | 1,432 | 3,370 | +135% | 0 | 0 | — |
case-15 | fail→pass | 5,661 | 1,622 | -71% | 1 | 1 | 0% | 898 | 3,316 | +269% | 0 | 0 | — |
case-16 | fail→pass | 6,190 | 1,990 | -68% | 1 | 1 | 0% | 935 | 3,415 | +265% | 0 | 0 | — |
case-17 | pass→pass | 19,483 | 23,207 | +19% | 1 | 1 | 0% | 3,200 | 7,211 | +125% | 0 | 0 | — |
case-18 | pass→pass | 16,577 | 18,907 | +14% | 1 | 1 | 0% | 2,899 | 6,313 | +118% | 0 | 0 | — |
case-19 | pass→pass | 13,280 | 8,574 | -35% | 1 | 1 | 0% | 2,383 | 4,518 | +90% | 0 | 0 | — |
case-20 | fail→fail | 6,015 | 11,480 | +91% | 1 | 1 | 0% | 433 | 4,239 | +879% | 0 | 0 | — |
case-21 | fail→fail | 8,542 | 7,443 | -13% | 1 | 1 | 0% | 787 | 3,609 | +359% | 0 | 0 | — |
case-22 | fail→fail | 10,281 | 13,675 | +33% | 1 | 1 | 0% | 1,792 | 5,409 | +202% | 0 | 0 | — |
case-23 | fail→fail | 16,032 | 13,121 | -18% | 1 | 1 | 0% | 3,174 | 5,573 | +76% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +17 percentage points is the difference between those two pass rates over the 23 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.