Build a clean scope
Organize scope, domains, subdomains, DNS, HTTP, ports, URLs, JavaScript, parameters, APIs, content discovery, interesting findings, and screenshots into a predictable working structure.
CYBERSECURITY • RECON
A structured bug-bounty workflow for turning scope into attack surface, attack surface into functionality, and functionality into testable vulnerability hypotheses.
THE COMPLETE WORKFLOW
The workflow starts with program rules and scope, builds outward through passive discovery and application mapping, then loops back whenever testing reveals new hosts, routes, parameters, or functionality.
Organize scope, domains, subdomains, DNS, HTTP, ports, URLs, JavaScript, parameters, APIs, content discovery, interesting findings, and screenshots into a predictable working structure.
Gather subdomains, normalize them, and immediately flag higher-value names such as API, admin, internal, dev, staging, auth, files, upload, webhook, proxy, GraphQL, legacy, and backup.
Separate names that merely exist in passive sources from names that resolve today. Keep unresolved assets too because they may still reveal historical infrastructure or dangling resources.
Identify live web applications and keep more than just 200 responses. Redirects, 401s, 403s, 405s, 400s, and 500s can expose valuable application behavior.
Determine what you are actually looking at: framework, CMS, web server, CDN/WAF, authentication system, API architecture, cloud provider, JavaScript framework, and backend hints.
Use manual browsing through Burp and targeted crawling to collect URLs, parameters, forms, XHR/fetch traffic, JavaScript, APIs, uploads, downloads, redirects, callbacks, GraphQL, and WebSockets.
Compare current crawl data with historical sources. Endpoints that only appear historically can reveal old APIs, legacy functionality, removed parameters, admin panels, exports, callbacks, and debug behavior.
Search JavaScript for application functionality—not merely secrets. Look for routes, parameters, feature flags, GraphQL operations, WebSockets, source maps, storage buckets, OAuth flows, URL processing, redirects, and file functionality.
Create a separate API inventory and classify endpoints by operation. Knowing whether something is GET, POST, PUT, or DELETE immediately helps frame authorization, ownership, mass-assignment, and method-handling questions.
Prioritize dynamic endpoints and compare baseline behavior against requests with random or interesting parameters. Avoid wasting time on static assets that are unlikely to process additional input.
Do technology-aware discovery after fingerprinting. Generic wordlists have a place, but framework-specific paths produce less noise and more meaningful results.
Classify endpoints by what they do—URL fetch, redirect, upload, download, object access, admin, search, import, webhook, template rendering, OAuth, postMessage, or GraphQL—and map those behaviors to the most plausible bug classes.
Prioritize functions that appear to make the server retrieve remote resources, including previews, webhooks, imports, feeds, PDF generation, image fetching, avatar imports, document conversion, integrations, and callbacks.
Inventory client-side inputs and message handlers, then trace them toward sinks, navigation, DOM manipulation, authentication actions, or network requests.
Mark object identifiers, admin functionality, organization boundaries, invites, roles, private documents, account settings, and exports. Test authorization with accounts you are permitted to use.
Treat Burp history like a searchable database. Mine it for admin, internal, debug, stage, upload, download, callback, proxy, GraphQL, API, Swagger/OpenAPI, stack traces, internal hosts, and unusual error behavior.
Give more weight to authentication, admin, URL-fetching, file processing, payments, APIs, uploads, webhooks, object IDs, legacy/staging systems, interesting JavaScript, and unusual methods or errors.
Turn the final recon output into a map of authentication, APIs, URL processing, file processing, authorization, and client-side behavior so the next test is driven by functionality rather than guesswork.
FUNCTIONALITY → HYPOTHESIS
THE CORE IDEA
When testing reveals new information, go back to recon. When it does not, move to the next target or hypothesis.