Comprehensive OSINT methodology for external red-team operations and authorized attack-surface assessments. Covers the 5-stage recon pipeline (seed discovery, asset expansion, enrichment, exposure analysis, reporting), asset-graph discipline with 29 asset types, severity rubric (CRITICAL/HIGH/MEDIUM/LOW/INFO), confidence upgrade workflows, time budgeting, asset-level triage rules, scale-based tactics, identity-fabric mapping (Entra/Okta/ADFS/Google/SAML/M365 Teams+SharePoint+OAuth), API and auth-map methodology, JavaScript deep analysis, mobile attack surface, cloud attack surface, breach×identity correlation, detectability tagging, detection-aware probing (back-off, persona rotation), read-only validator discipline, WAF/CDN bypass + origin discovery, vulnerability prioritization (CVE/EPSS/KEV), phishing infrastructure planning + pretext development, bug bounty submission templates, client deliverable templates with risk translation, threat-actor investigation (incl. RU/CN pivots), cryptocurrency tracing, image/video forensics, chronolocation. Use when planning or executing reconnaissance against authorized targets, mapping an organization's external attack surface, investigating a person/entity, tracing crypto flows, geolocating media, or performing attribution work.
npx skills add https://github.com/elementalsouls/Claude-BugHunter --skill osint-methodology
Use this skill when:
Do NOT use this skill when:
This skill is intended for assets the operator owns or has written authorization to assess (red-team rules of engagement, bug-bounty in-scope assets, ASM contracts).
Soft scope check: when a user asks you to act against a target whose authorization isn't established earlier in the conversation, ask once before proceeding:
> *"Quick scope check: is this a target you own or have written authorization to assess (e.g., a red-team engagement, in-scope bug-bounty asset, or your own infrastructure)? I want to make sure we stay on the right side of the engagement boundary."*
Once authorization is asserted, proceed without re-asking. If the user explicitly states the engagement type (e.g., "this is for our pentest of acme.com under contract"), you don't need to ask again.
Always-on guardrails (regardless of authorization):
--aggressive mode.Every assertion you make during an engagement should carry a confidence level. Three levels:
| Level | Meaning | Examples |
|---|---|---|
| TENTATIVE | Plausible based on indirect evidence; unverified. | Snippet-only Google dork match; email pattern inferred from name; subdomain returned by one passive source only; favicon-hash overlap (two hosts share a favicon — could be shared infra, could be a coincidence). |
| FIRM | Directly observed but uncorroborated. | Subdomain that resolves to an IP; HEAD-confirmed bucket exists (private); CT-log entry shows certificate; Shodan banner returned. |
| CONFIRMED | Multiple independent corroborations OR directly verified. | Live-validated PMAK token (read-only /me returned 200); breach corpus + crt.sh + DNS all agree; bucket listable AND files retrievable; user enumerated AND password reset flow returns valid hint. |
Rule of three for attribution: require three independent weak signals, OR one strong + one weak, before asserting linkage. Don't single-source attribute.
Confidence isn't static — every TENTATIVE asset should have a documented path to FIRM and to CONFIRMED. Use these per-asset-type rules.
| Asset type | TENTATIVE → FIRM | FIRM → CONFIRMED |
|---|---|---|
| Subdomain | Returned by ≥2 independent passive sources, OR DNS A/AAAA/CNAME resolves successfully. | Serves on a standard port (80/443/22/etc.) AND HTTP banner / TLS cert / SSH banner returned. |
| IP | Discovered via ≥2 sources (passive DNS, ASN lookup, Shodan). | Active probe responds (TCP SYN-ACK on at least one port, or ICMP echo reply). |
| WebApp | URL extracted from JS / API / archive but not yet hit. | HTTP request returns 2xx/3xx/4xx (any non-network-error response) AND content-length > 0. |
| Email | Generated from a name pattern OR returned by snippet-only dork. | Listed in Hunter.io / EmailRep / IntelX / breach corpus, OR MAIL FROM/RCPT TO SMTP probe returns 250 (without delivery — abort at DATA). |
| Bucket (S3/GCS/Azure) | Permutation candidate; no probe yet. | HEAD returns 200, 301, or 403 (existence confirmed). Then CONFIRMED when GET returns object listing or known object retrieval. |
| Endpoint (API / wayback) | Extracted from JS regex / Wayback / Postman. | HTTP request returns non-404 (route exists). Then CONFIRMED when the endpoint's behavior is fingerprinted (auth posture, response shape, rate limits). |
| Credential / secret | Matches catalog regex in captured text. | Read-only validator (/me, auth.test, sts:GetCallerIdentity, /user) returns success. Then CONFIRMED with documented scope + account ID. |
| Person | Name extracted from a single source (LinkedIn / breach / GitHub commit). | Confirmed by a second source (Hunter.io role + LinkedIn profile, or two breach sources with same email). |
| Repo | Name match on org keyword in GitHub search. | Repo metadata shows confirmed org/email/website match. Then CONFIRMED when commit-history shows employee involvement. |
| Mobile app | Name match in app store. | Ownership-confidence score ≥70 (see companion skill §21). Then CONFIRMED when binary metadata (signing cert, package name, dev account) ties back to target. |
| Certificate | Returned by crt.sh once. | CT-log entry confirmed in ≥2 logs. Then CONFIRMED when serving on a discovered host. |
| SSO tenant | Discovery-endpoint returns OIDC metadata. | Tenant GUID extracted AND domain resolves through the tenant's expected MX / autodiscover / SP record. |
Default reporting posture: never claim CONFIRMED without explicit corroboration. When in doubt, downgrade. Operators trust under-claims more than over-claims.
When you produce findings during an active session, structure each finding to match the schema below — it drops cleanly into asset-management tools.
Finding:
id: <stable hash or UUID>
module: <which technique discovered it; "manual" if hand-found>
asset_key: <typed key, e.g. sub:api.example.com or webapp:https://example.com/admin>
category: <e.g. SECRET_LEAK, MISSING_HSTS, OPEN_GRAPHQL_API, LEAKED_CRED, SSO_EXPOSURE>
severity: <info|low|medium|high|critical>
confidence: <tentative|firm|confirmed>
title: <one-line summary>
description: <2-5 sentences>
evidence:
url: <where it was found>
timestamp: <UTC ISO8601>
sha256: <hash of any downloaded artifact>
raw: <truncated to 2 KiB>
references:
- <CVE-ID, advisory URL, vendor doc>
remediation: <action the asset owner can take>
Always use UTC timestamps. Local time creates correlation bugs across notes/screenshots/logs.
For every artifact you capture, record: URL + UTC timestamp + SHA-256 hash + tool version + run_id.
run_id so the entire engagement is replayable.When citing a source in your output, prefer durable references (CVE, vendor advisory, ATT&CK technique ID, RFC) over ephemeral ones (a Twitter post, a forum thread). If the only source is ephemeral, archive it (archive.today, Wayback SavePageNow) before citing.
nuclei fuzzing/* templates outside an explicit DEEP / --aggressive mode.A sock puppet is a fake account that cannot be linked to you. Build a posting history, age the account, use it from a separate browser profile.
Resources & techniques:
References:
Every probe leaves a footprint. Tag every operation in your notes with a detectability level so you can reason about the SIEM trail you're leaving on the target's side.
| Tag | Examples |
|---|---|
| Low | Passive Shodan InternetDB; CT-log queries (crt.sh); Wayback CDX; passive DNS (SecurityTrails); Hunter.io email enrichment; HTTP HEAD on public buckets; getuserrealm.srf; Microsoft OIDC metadata fetch. |
| Medium | Microsoft GetCredentialType user-enum; Okta /api/v1/authn user-enum; Postman API key validation; AWS sts:GetCallerIdentity (logs to CloudTrail); Slack auth.test; full-page screenshots; Swagger/GraphQL probes against a 28/13-path wordlist; targeted favicon-hash + JARM fingerprinting. |
| High | Active port scans (naabu / masscan / nmap); Nuclei full template runs against production; subdomain brute-force at scale; APK download from third-party mirrors; deep-mode user enumeration past N attempts per tenant; SMTP RCPT TO enumeration; web fuzzing (ffuf/gobuster). |
When working with a client, document the operations actually run and their detectability tag in the engagement report — clients appreciate knowing what their detection stack should have caught.
Defaults: passive by default. Active probes only when (a) explicitly authorized, (b) within agreed maintenance windows, and (c) with the operator's awareness of the resulting log volume.
When you discover a credential in the wild (a leaked API key, a sourcemap-exposed token, a hard-coded PMAK in a public Postman workspace), you may want to confirm it's live. Do this with read-only validators only.
Discipline:
/me, /whoami, auth.test, sts:GetCallerIdentity).checked_at (UTC), the response (truncated), and the scope/account-ID returned.validation_skipped_by_policy and stop.Concrete validator endpoints (Postman, AWS, GitHub, Slack, Anthropic, OpenAI, npm, Atlassian, DataDog) live in the companion offensive-osint skill.
Your probes will eventually hit detection. Recognize the signs and back off before you trip an active response.
Signs you've been detected (in roughly increasing severity):
429 Too Many Requests, Retry-After header set, X-RateLimit-Remaining: 0./admin/db_dump.sql, exposed .env with credentials that don't validate). Real exposures rarely look this clean.Back-off ladder:
Persona / IP rotation rules:
Don't:
A 5-stage pipeline for any authorized external assessment. Stages are sequential; modules within a stage can run concurrently.
Establish the ground truth of who/what the target is.
Discover everything that might belong to the target.
Add depth to the discovered assets.
Convert assets into findings.
.git/config, .env, phpinfo.php, /actuator/env, /actuator/heapdump, _cat/indices, /console, /manager/html).Make the work usable.
When budget is constrained, work in this order:
.env files. Fastest path to cloud pivot.10. Certificates — CT-log timeline catches forgotten subdomains; weak ciphers = cheap findings.
11. ASN + reverse DNS — corporate IP space hosts unadvertised infra.
12. WHOIS — registrant PII reveals adjacent corp assets.
13. Typosquat — actively-registered squats are findings; unregistered ones go on the phishing-domain shortlist.
14. Security headers — low standalone value but required for client reports.
Stage and asset count drive how long a recon takes. Rough estimates (single operator on a typical SaaS-style target):
| Stage | Small org (<100 employees) | Medium (100–1K) | Large (1K+) |
|---|---|---|---|
| 1. Seed discovery | 30 min | 30 min | 30 min |
| 2. Asset expansion | 1–2 h | 2–4 h | 4–8 h |
| 3. Enrichment (per 100 alive webapps) | ~1 h | ~1 h | ~1 h |
| 4. Exposure analysis | 1–3 h | 3–6 h | 6–12 h |
| 5. Reporting | 2–4 h | 4–8 h | 1–2 days |
Engagement profiles:
When to abort early:
Treat every discovery as a typed asset in a graph, not a free-floating string.
| Category | Asset Types |
|---|---|
| DNS / Network | domain, subdomain, ip, netblock, asn |
| Service | port, service, certificate |
| Identity | email, person, credential |
| Code / Config | repo, secret |
| Cloud / Storage | bucket, firebase_project |
| Web | webapp, wayback_endpoint, api_endpoint, api_spec, graphql_schema |
| Mobile | mobile_app, deep_link, exported_component |
| Phishing / Adversarial | typosquat_domain |
| Collaboration / SaaS | postman_collection, postman_workspace, postman_api_key, stack_post, saas_public_surface |
Every asset carries:
type — one of the 29 above.key — unique dedup id (typed prefix, e.g. sub:api.example.com, email:[email protected]).value — the actual string/object.sources[] — every source that confirmed this asset (deduplicated).confidence — TENTATIVE / FIRM / CONFIRMED.first_seen, last_seen — UTC timestamps.attrs{} — type-specific metadata (e.g., for a webapp: status_code, title, tech-stack list, JARM, favicon mmh3, screenshot path).Relationships are typed edges, not text:
RESOLVES_TO, HOSTED_ON, IN_NETBLOCK, BELONGS_TO_ASN, LISTED_IN_CERT, OWNED_BY, ALIAS_OF, BREACHED_FROM, EMPLOYED_BY, HOSTS_REPO, TYPOSQUAT_OF, EXPOSES, DOCUMENTED_BY, BELONGS_TO_HOST, REQUIRES_AUTH, LEAKS_SCHEMA, SHIPPED_BY_ORG, CONTAINS_SECRET, TALKS_TO_HOST, EXPOSES_DEEPLINK, HAS_EXPORTED_COMPONENT, USES_FIREBASE_PROJECT, LACKS_PINNING_FOR.
sub:api.example.com and webapp:https://api.example.com/ are different assets with a BELONGS_TO_HOST edge).sources[] must list every source. If two sources confirmed it, both go in.mobile_endpoints.json, secrets_sidecar.json) — don't block module B on module A. See §24.When you have a mixed bag of assets and limited probe budget, prioritize by what each asset *enables*:
WebApp priority by hostname signal (highest first):
auth., login., sso., idp., accounts., oauth.)./admin, /dashboard, /console, /manager, /wp-admin, /phpmyadmin).dev., staging., stg., qa., uat., test., sandbox., preprod., preview.) — lower defenses, often dump prod data.api., services., gateway., graph.).portal., app., my., account.).www., blog., news., careers., support.).Subdomain priority by inferred function:
IP priority by netblock:
Email priority by role hint:
| Role indicator | Priority | Why |
|---|---|---|
| ceo@, cfo@, cto@, ciso@ | HIGHEST | Exec accounts have highest breach value (BEC, finance authority, board access). |
| it@, helpdesk@, support@, security@ | HIGH | IT/security accounts have privileged tool access; helpdesk accounts handle reset workflows. |
| dev, engineer, architect, dba | MEDIUM | Developer accounts often have GitHub / cloud / CI access. |
| sales, marketing, hr, finance | MEDIUM | SaaS access (Salesforce, HubSpot, Workday); finance enables BEC. |
| Generic role accounts (info@, noreply@, contact@) | LOW | Often unmonitored or alias forwarded; less personal context. |
Repo priority by recency + naming:
prod, internal, private, secret in name → priority HIGH despite being public (may be misnamed or accidentally exposed).Application order: when you have N assets and budget for M probes (M < N), apply asset-type priority first, then within-type priority. E.g.: 50 subdomains → probe API + admin + dev first (~15), then auth + prod-app (~20), defer marketing/content to a later pass.
Severity is operational, not subjective. Use these anchors:
Pre-auth code execution, confirmed valid credentials, listable production data, fundamental trust violations.
Examples:
.git/config exposed on production webapp (full source-code disclosure)./.env exposed (credentials in plaintext, often DB / cloud / API)./actuator/env or /actuator/heapdump reachable unauthenticated.https://{project}.firebaseio.com/.json returns data).android:debuggable=true in a production Android app./_cat/indices returns data)./v1.40/containers/json returns containers).authorized_keys).Significant exposure but not yet RCE; clear path to escalation; high-value information disclosure.
Examples:
.js.map) accessible — full original-source disclosure of frontend.Access-Control-Allow-Origin: <reflected> + Access-Control-Allow-Credentials: true)./login, /sso, /admin, /auth) — escalated from MED.p=none on production sending domain (spoof-feasible).Information disclosure, hardening gaps, brute-force exposure.
Examples:
/server-status or /server-info reachable.phpinfo() or /info.php reachable on dev/staging only.android:allowBackup=true in Android app.android:usesCleartextTraffic=true in Android app.android:permission protection.Access-Control-Allow-Origin: *) on an API that returns user-tied data (no creds).+all or many includes).Cosmetic or marginal hardening gaps.
Examples:
X-Frame-Options.X-Content-Type-Options..DS_Store exposed.Worth recording, no action required immediately.
Examples:
Referrer-Policy / Permissions-Policy./.well-known/security.txt.robots.txt reveals interesting paths.p=reject + SPF strict + DKIM rotated → no escalation; well-postured.Existing investigative work (threat-actor research, doxxing investigations, attribution) operates under different posture than offensive recon. Switch posture explicitly.
| Aspect | Investigative Mode | Offensive Recon Mode |
|---|---|---|
| Probing rate | Slow, single-threaded, blend with normal traffic. | Bursts, parallel, but rate-limited per provider. |
| OpSec posture | Sock-puppet only, never reveal investigator. | Persona may be the engagement persona; team may notify SOC. |
| Evidence handling | Court-grade chain of custody; hashes, timestamps, screenshots. | Engagement-grade; same hashing/timestamp discipline but evidence is for the client report. |
| Severity in scope | All severity levels relevant for context. | CRIT/HIGH/MED matter; LOW/INFO often dropped from exec summary. |
| Authorization posture | Public-record / OSINT-only; no probing private resources without authorization. | Written rules of engagement; explicit scope; explicit out-of-scope list. |
| Reporting format | Narrative + sourced timeline. | Per-asset findings + remediation + reproduction steps. |
| Stop conditions | When the question is answered. | When the engagement window closes OR when the report is delivered. |
When you're working with the user, ask which mode they're in if it's unclear from context.
Org size shapes which techniques pay off.
Small org (< 100 employees):
Medium org (100–1K):
Large org (1K–10K):
Very large org (10K+) or conglomerate:
Cross-scale principle: the smaller the org, the more individual-account focus pays off. The larger the org, the more systemic posture findings (DMARC gaps, SSO_EXPOSURE breadth, vendor-product version sweeps) pay off.
An organization's IdP/SSO posture is a high-value target: compromise the identity fabric and you don't need to break into individual apps. Map it methodically.
Probe these prefixes against the target's root domain (and any sibling brand domains discovered):
auth.{domain}
login.{domain}
sso.{domain}
idp.{domain}
iam.{domain}
identity.{domain}
accounts.{domain}
oauth.{domain}
Plus generic OIDC discovery on every alive subdomain:
{any-host}/.well-known/openid-configuration
https://login.microsoftonline.com/{tenant-or-domain}/.well-known/openid-configuration. The issuer field returns a URL containing the tenant GUID (8-4-4-4-12 hex format). Tenant GUID + domain = stable tenant fingerprint.https://login.microsoftonline.com/getuserrealm.srf?login=<user>@<domain> returns NameSpaceType: Managed (cloud-native), Federated (on-prem ADFS / external IdP), or Unknown. Detectability: low.https://autodiscover-s.outlook.com/autodiscover/metadata/json/1 POST with email; detects tenant membership.https://login.microsoftonline.com/common/GetCredentialType POST {"username": "<email>"}. Response indicates whether email exists in tenant. Detectability: medium. Cap attempts at 20 per tenant.<slug>.okta.com (or <slug>.oktapreview.com).https://<slug>.okta.com/.well-known/openid-configuration.{"username": "<email>", "password": "invalid"}. 400 vs 401 response code indicates user existence. Detectability: medium. Cap at 20 per tenant.https://{domain}/adfs/idpinitiatedsignon.aspx → 200 indicates ADFS present.https://{domain}/adfs/Services/Trust/mex returns SOAP metadata.https://{domain}/.well-known/openid-configuration — Google-hosted-domain customers expose discovery endpoints with characteristic issuer/JWKS URIs.*.googlemail.com / aspmx.l.google.com is a strong Google Workspace signal./.well-known/openid-configuration.issuer and authorization_endpoint fields fingerprint the IdP product.*.auth0.com, *.onelogin.com, *.pingone.com, *.duosecurity.com patterns are characteristic.Probe these paths on every alive webapp:
/saml/metadata
/FederationMetadata/2007-06/FederationMetadata.xml
/federationmetadata/2007-06/federationmetadata.xml
/simplesaml/saml2/idp/metadata.php
/auth/saml2/metadata
SAML metadata XML contains: EntityID, signing certs, SingleSignOnService URL, NameIDFormat.
x-amz-bucket-region; correlate with bucket-name entropy to infer account.arn:aws:[a-z0-9-]+:[a-z0-9-]*:([0-9]{12}): (the 12-digit AWS account ID is the capture group).AccountId property in JS / API responses — common in IAM-related error messages and CloudFormation outputs.<digits>-<chars>.apps.googleusercontent.com; MSAL: GUID in clientId property.Each discovered IdP becomes a Service asset with attrs.product, attrs.tenant_id, attrs.discovery_endpoint. Then in Stage 4, correlate with breach data: every compromised user under a discovered tenant becomes an SSO_EXPOSURE finding (CRITICAL — see §22.3).
Beyond plain Entra fingerprinting, M365 exposes a wider attack surface that's worth enumerating in depth.
Teams Federation:
https://login.microsoftonline.com/<target-domain>/.well-known/openid-configuration confirms tenant.https://teams.microsoft.com/api/mt/<region>/beta/users/<email>/externalsearchv3 (requires authenticated request from a federated tenant; useful for confirming whether external Teams chat is allowed).SharePoint subdomains:
<target-stem>.sharepoint.com — main tenant SharePoint.<target-stem>-my.sharepoint.com — OneDrive-for-Business URLs (per-user personal sites).<target-stem>-admin.sharepoint.com — SharePoint admin center (auth-required, but presence confirms tenancy).<target-stem> is derived from the company name (often the part before .com).OneDrive personal site enumeration:
https://<target-stem>-my.sharepoint.com/personal/<user_email_with_underscore>/Documents/.@ with _ and . with _ in the email (e.g., [email protected] → alice_acme_com).M365 OAuth client_id discovery:
client_id=<GUID> patterns.https://login.microsoftonline.com/<tenant>/v2.0/.well-known/openid-configuration lists supported endpoints; some tenants leave device_authorization_endpoint enabled (device-code phishing target).Power Platform / Power Apps:
https://make.powerapps.com/environments (auth-required); environment IDs sometimes leak in URLs.*.crm.dynamics.com (Dynamics 365 / Power Apps default URLs).*.azurewebsites.net for App Service deployments.M365 OAuth misconfig findings to look for:
device_authorization_endpoint enabled on common tenant (device-code phishing target) → MEDIUM (operational risk; not directly exploitable but enables attack).Public client flow enabled and broad scopes (offline_access, Mail.Read, Files.Read.All) → HIGH if app is approved for the tenant.Detectability: all M365 endpoint probes log to Entra sign-in logs / audit logs (medium-low for fetch-only; medium for any auth attempt).
Modern targets expose REST, GraphQL, and undocumented internal APIs. The OSINT goal is to enumerate them, classify them, and rank by attack interest.
mobile_endpoints.json).For each endpoint, capture:
url, method, source[], auth_required, auth_type, auth_location,
rate_limited, cors_policy, sensitive_path_keywords[], schema_leaks,
verb_tampering_possible, interest_score (0..100), interest_reasons[]
How to determine each field:
OPTIONS → Allow header reveals supported methods (verb tampering check).GET without auth → 200 = auth_required=false; 401/403 = auth_required=true.WWW-Authenticate (auth_type), RateLimit-* / X-RateLimit-*.Origin: https://attacker.example → response Access-Control-Allow-Origin reflected = cors_policy=reflected.See companion skill §20 for the full rubric. Score ≥ 70 → HIGH/CRITICAL finding with attack_path_hint in evidence.
When emitting a HIGH/CRITICAL finding, include a one-sentence attack-path hint in the evidence so the operator knows where to start exploiting. Templates in companion skill §39.
For every alive webapp, scrape its JS — it's where modern frontends leak.
<script src="..."> and <link rel="modulepreload" href="...">.//[#@]\s*sourceMappingURL= at end of bundle.<bundle>.map next to every discovered JS.sources[] (leaks repo structure) and sourcesContent[] (full original source code embedded). Run the secret catalog over sourcesContent[].INFO_DISCLOSURE.Run the 29+-pattern catalog (companion skill §17) over every JS body and every parsed sourcesContent[] blob. Each hit = SECRET_LEAK finding with the catalog's per-pattern severity.
Three regex tiers (companion skill §16.10). Each unique endpoint becomes a wayback_endpoint asset and feeds into the API classifier in §12.
Three patterns (companion skill §16.11): RFC1918, internal DNS suffixes, K8s service DNS. Each match = MEDIUM INFO_DISCLOSURE.
When an extracted endpoint ends in /graphql or /graphiql, POST the standard introspection query. If schema returns → HIGH MISCONFIG. Then enumerate mutations and subscriptions for high-value targets.
_buildManifest.js and _ssgManifest.js enumerate every Next.js page route — exposes the application's full route structure.
--deep.--deep.Mobile apps are often the weakest link.
See companion skill §21. Threshold: ≥70 for deep analysis.
zipfile + optional androguard.AndroidManifest.xml, resource strings, asset files, native .so files, classes*.dex (string-extract).Run the catalog over manifest, resources, asset files, dex string-extract output.
Every discovered hostname becomes a subdomain asset. Write sidecar mobile_endpoints.json for the API discovery module to consume.
| Manifest attribute | Severity |
|---|---|
| android:debuggable="true" | CRITICAL |
| android:allowBackup="true" (without whitelist) | MEDIUM |
| android:usesCleartextTraffic="true" | MEDIUM |
| Exported activity/service/receiver without android:permission | MEDIUM |
| Sensitive deep-link handler | HIGH |
| WebView with setJavaScriptEnabled(true) + addJavascriptInterface(...) | HIGH |
| Certificate pinning absent | LOW |
For every Firebase project ID extracted:
https://{project-id}.firebaseio.com/.json. Returns JSON tree → CRITICAL OPEN_FIREBASE_RTDB.https://{project-id}.firebaseapp.com/.https://apps.apple.com/<region>/app/<slug>/id<bundle-id>.Build candidate bucket names from: target's root domain, subdomain stems, optional brand/company name. Filter generic stems unless combined with target-identifying tokens. Apply 6 prefixes × 15 suffixes (companion skill §16.8 has the lists).
S3, GCS, Azure Blob templates — see companion skill §16.8.
| Outcome | Severity |
|---|---|
| Bucket listable | CRITICAL |
| Bucket exists, objects readable by direct URL but not listable | HIGH |
| Bucket exists, ACL private | INFO |
Extract AWS account-ID from S3 region/error responses. GCP project ID from GCS error responses. Azure tenant ID from blob URL patterns.
Tools: Cielo (multi-chain), TRM (graphs), Arkham (multichain + entity labels), MetaSleuth (visual), Range (CCTP), Socketscan (EVM bridge), Pulsy (bridge aggregator), Chainalysis Horizon 2.0 (paid), Elliptic Lens.
Methodology: start with L1 bridge events; use L2 explorers for in-rollup activity; for privacy protocols focus on timing analysis and clustering.
Same patterns: age + activity + connections + balance over time + linked accounts. NFTs add ownership history + metadata + connected wallets.
ExifTool, Jeffrey's Image Metadata Viewer, EXIF Viewer Pro.
Forensically, FotoForensics, Bellingcat Photo Checker, Sensity AI, Exposing.ai, Adobe Content Credentials Verify, c2patool. Techniques: ELA, metadata, clone detection, noise analysis.
Signs/banners, architecture, road markings, license plates, clothing, cross-platform snippet search.
YouTube Data Viewer (Amnesty), ExifTool on downloaded files.
bsky.social/xrpc/com.atproto.identity.resolveHandle; identity doc via plc.directory/<did>; firehose at Firesky; SkyView for graphs. Archive early — handle migration / post deletion.Languages, dialects, background noises (train horns, prayer calls, wildlife). Tools: Audacity, Sonic Visualiser, SoundCMD. Spectrograms for unique patterns; Shazam/SoundHound for music.
FFmpeg, VLC. Stitch panoramas; stabilize panning footage (FFmpeg deshake or Blender VSE). Prefer original uploads over re-encodes.
Tools: SunCalc, ShadeMap, Bellingcat Shadow-Finder, NOAA Solar Calculator.
Stellarium, SkyMap, MoonCalc to simulate sky at different times/locations.
Google Earth Pro (historical imagery slider), Sentinel Hub EO Browser (Sentinel + Landsat with timelapse). Record coordinates in WKT; hash cached tilesets.
whois.tcinet.ru; Telegram for channels/admins/cross-posts.WhatsMyName, NameCheckup, Sherlock, Maigret.
PimEyes, Exposing.ai, Azure Face API (compliance).
Maltego, snscrape, SocialBlade. Bluesky / Mastodon: instance explorers + handle resolvers.
This is the highest-ROI single technique for external red teams. Execute it on every engagement.
| Source | Tier | Notes |
|---|---|---|
| Hudson Rock Cavalier | FREE | Infostealer-log corpus; very high signal for corp SSO. |
| Have I Been Pwned | Free + paid | Domain-wide existence + Pwned Passwords (k-anonymity). |
| DeHashed | Paid | Searchable per-record API. |
| IntelX | Free + paid | Aggregator; phonebook search. |
| Local breach corpus | Operator-supplied | Whatever's on disk. |
| Stat | Severity |
|---|---|
| ≥10 employees compromised | CRITICAL |
| 1–9 employees compromised | HIGH |
| ≥1 end-user (non-employee) compromised | MEDIUM |
| Domain seen in breach with 0 named accounts | INFO |
After Stage 3 has run identity-fabric mapping AND breach lookups have completed: for every discovered IdP tenant, intersect with breach corpus on the tenant's domain. Non-empty intersection → SSO_EXPOSURE finding, severity CRITICAL. Evidence: tenant ID + product + employee count + per-account source attribution.
Shodan, Censys, Onyphe, DNSDB.
crt.sh, SecurityTrails.
__biz IDs. Expect link rot.Hunchly, Kasm Workspaces, ArchiveBox, SingleFileZ.
When multiple OSINT tools (or modules) run, late-arriving outputs need to feed into earlier-running consumers. Three patterns:
<scan>/mobile_endpoints.json or <scan>/secrets_sidecar.json; later modules read on start. No blocking.In ad-hoc engagement: tmpdir + JSON sidecars + one-line manifest makes operations composable.
Running a large dork corpus across multiple engines:
(severity, category, confidence).Expert in secure backend coding practices specializing in input validation, authentication, and API security. Use PROACTIVELY for backend security implementations or security code reviews.
This skill should be used when the user asks to "perform cloud penetration testing", "assess Azure or AWS or GCP security", "enumerate cloud resources", "exploit cloud misconfigurations", "test O365 security", "extract secrets from cloud environments", or "audit cloud infrastructure". It provides comprehensive techniques for security assessment across major cloud platforms.
You are a dependency security expert specializing in vulnerability scanning, license compliance, and supply chain security. Analyze project dependencies for known vulnerabilities, licensing issues, outdated packages, and provide actionable remediation strategies.
Comprehensive Flow Nexus platform management - authentication, sandboxes, app deployment, payments, and challenges
This skill should be used when the user asks to "escalate privileges on Linux", "find privesc vectors on Linux systems", "exploit sudo misconfigurations", "abuse SUID binaries", "exploit cron jobs for root access", "enumerate Linux systems for privilege escalation", or "gain root access from low-privilege shell". It provides comprehensive techniques for identifying and exploiting privilege escalation paths on Linux systems.
Expert malware analyst specializing in defensive malware research, threat intelligence, and incident response. Masters sandbox analysis, behavioral analysis, and malware family identification. Handles static/dynamic analysis, unpacking, and IOC extraction. Use PROACTIVELY for malware triage, threat hunting, incident response, or security research.
This skill should be used when the user asks to "use Metasploit for penetration testing", "exploit vulnerabilities with msfconsole", "create payloads with msfvenom", "perform post-exploitation", "use auxiliary modules for scanning", or "develop custom exploits". It provides comprehensive guidance for leveraging the Metasploit Framework in security assessments.
Expert in secure mobile coding practices specializing in input validation, WebView security, and mobile-specific security patterns. Use PROACTIVELY for mobile security implementations or mobile security code reviews.
Take elementalsouls/osint-methodology from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference go.
Without those the skill loads but fails at the first command.