Burp Suite is the standard toolkit for intercepting, inspecting, and modifying HTTP traffic between a client (browser or mobile app) and a web server. If you can see the request and the response, you can test what matters: authentication, authorization, input handling, session behavior, and the real security posture of the application.
This tutorial focuses on a manual, evidence-driven workflow using Burp Suite Community Edition. After reading it, you should understand what Burp is, how it works, how it helps a pentester, and exactly when to reach for it.
What is Burp Suite?
Burp Suite is an intercepting HTTP(S) / WebSocket proxy plus a set of tools that turn raw traffic into a practical pentesting workflow:
- Capture requests and responses in real time
- Replay requests with controlled edits
- Compare responses to confirm behavior differences
- Automate small, targeted request sets for validation and triage
- Keep clean evidence for report
In short: Burp is where web pentests become repeatable and evidence-driven, not guesswork. It’s also where your manual intuition becomes provable.
Burp ships in three editions: Community (free, manual toolkit), Professional (adds Scanner, Collaborator, project files, full-speed Intruder, Burp AI), and DAST (formerly Enterprise, for CI/CD). This guide covers Community. When a feature is Pro-only, it will be flagged inline, no digging for it later.
When to use Burp Suite
Use Burp when you need to:
- Understand a real request flow (login, checkout, API calls, SPA behavior)
- Validate broken authorization / IDOR / BOLA by changing identifiers and comparing results
- Validate input handling (server-side validation, encoding, parsing differences)
- Test session management (cookies, JWTs, refresh flows, logout)
- Confirm exploitation conditions for common classes (SQLi, XSS, SSRF) without noisy automation
- Produce a clean reproduction for engineering: exact request, exact response, minimal delta
If your question is “what’s the server actually doing here?”, Burp is the right tool.
Benefits for pentesters
- Shows what the client actually sends, not what the UI or the docs claim it sends
- Lets you replay a single request 50 times with tiny variations (Repeater)
- Lets you isolate “is this a bug, or just a UI artifact?” in seconds
- Lets you prove impact with minimal data exposure (response diffing + clean evidence)
- Keeps all your working traffic organized in one project instead of scattered across terminals
How Burp Suite works (mental model)
Burp Suite sits in the middle of the conversation:
Browser / App → Burp Proxy → Target ServerBrowser / App ← Burp Proxy ← Target Server
For HTTPS, Burp performs TLS interception:
- Burp generates a local Certificate Authority (CA).
- You install and trust that CA inside the browser or mobile device you’re testing with.
- Burp re-signs target certificates on the fly, which is why it can show you plaintext HTTPS.
This is why the setup matters: if your proxy listener or certificate trust is wrong, you’ll either see TLS errors or silently miss traffic. Most “Burp isn’t working” problems are interception-setup problems, not application bugs.
The toolbox
These are the tools you’ll actually use, in order of how often you’ll touch them:
| Tool | Purpose | Edition |
|---|---|---|
| Proxy (+ HTTP history) | Capture and optionally intercept traffic | Community |
| Target / Site map / Scope | Organize endpoints; filter in-scope only | Community |
| Repeater | Manual request replay with edits, your main hammer | Community |
| Intruder | Small request automation, throttled to ~1 req/s | Community (throttled) / Pro (full speed) |
| Inspector | Side panel to decode/encode values inline (params, JWT, cookies) | Community |
| Decoder / Comparer | Standalone encoding and response diffing | Community |
| Logger | Unified view of traffic generated by Burp itself (Repeater, Intruder, extensions) | Community |
| Organizer | Save annotated requests into collections for evidence | Community |
| Match and replace | Rewrite requests/responses automatically (headers, params) | Community |
| Extensions (BApp Store) | Add capabilities (JWT Editor, Autorize, Logger++, etc.) | Community (Pro-exclusive BApps flagged) |
| Scanner | Automated vulnerability scanning | Pro only, not covered here |
| Collaborator | Out-of-band (OAST) testing for SSRF/blind bugs | Pro only (public Collaborator has heavy limits on Community) |
| Burp AI | AI-assisted analysis of findings and payloads | Pro only, flagged below, not covered in depth |
The single most important distinction for beginners: Proxy HTTP history logs traffic that went through the proxy (browser → server). Logger logs traffic generated by Burp’s own tools. When an Intruder attack or an extension misbehaves, Logger is where you debug it.
Setup (current as of April 2026)
Step 1 — Install and launch
Download and install Burp Suite Community from PortSwigger’s download page. Launch it and start a Temporary project — Community only supports temporary projects, which means your work isn’t persisted across restarts. Plan your evidence collection accordingly (export findings to Organizer or to files as you go). Saved project files are a Professional feature and we won’t revisit them here.
On first launch, the Discover tab (introduced in the 2026.1.x line) gives you a curated starting point based on your edition, useful if you want a guided tour before diving into the workflows below.
Step 2 — Use Burp’s built-in browser
Burp ships with a Chromium-based browser, pre-configured to route through the proxy with Burp’s CA already trusted. Use it. It skips two annoying failure modes: manual proxy configuration and manual CA installation. Your personal browser profile stays clean, and TLS interception just works.
You only need an external browser when you genuinely need a specific profile (SSO accounts, password managers, saved sessions), covered in Step 5.
Step 3 — Set your target scope (mandatory)
Scope isn’t optional. Without it you will capture unrelated third-party traffic, your HTTP history becomes unreadable, and you risk touching assets you’re not authorized to test.
- Go to Target → Scope.
- Add your target host(s) or URL prefixes. Two useful patterns:
- Host match (for entire domains and subdomains): e.g.
app.example.comwith protocolAny - URL prefix (for a specific endpoint): e.g.
https://app.example.com/api/v2/
- Host match (for entire domains and subdomains): e.g.
- Enable “Use advanced scope control” if you need regex-level precision.
- Enable “Drop all out-of-scope requests” in Proxy settings to keep history clean.
See PortSwigger’s scope documentation for the exact UI.
Step 4 — Verify Proxy basics
Open Settings → Tools → Proxy and confirm:
- A proxy listener exists on
127.0.0.1:8080(default) - Intercept is OFF by default, you turn it on only when you need it
- Interception rules aren’t set to “intercept everything forever” (that kills productivity fast)
If you ever find your test browser can’t reach the internet after closing Burp, the cause is almost always: Intercept was left on, or the browser is still pointing at a dead proxy listener.
Step 5 — External browser (only when needed)
- Configure the browser to use
127.0.0.1:8080as its HTTP/HTTPS proxy. - Install Burp’s CA certificate in that browser so HTTPS works without warnings. The CA is exported from Proxy → Proxy settings → Import / export CA certificate.
Done correctly, browsing your in-scope target should populate Proxy → HTTP history immediately.
Step 6 — Keyboard shortcuts worth learning
Two shortcuts will save you hundreds of clicks per engagement:
Ctrl+R(orCmd+Ron macOS) — send the selected request to RepeaterCtrl+I(orCmd+I) — send the selected request to Intruder
Also useful: Ctrl+F inside Repeater/Inspector for in-request search.
Core workflows
Workflow A — Capture → Triage → Repeat
The loop you’ll run thousands of times:
- Browse the app normally through Burp’s browser (login, key user journeys).
- In Proxy → HTTP history, find an interesting request (authenticated action, sensitive data, identifier in the URL or body).
- Right-click → Send to Repeater (or
Ctrl+R). - In Repeater, change one thing at a time and resend until you understand the server’s behavior.
One-variable-at-a-time is not a stylistic preference — it’s how you produce proof. If you change three things and the response changes, you don’t know which change caused it.
Workflow B — Authorization testing (IDOR / BOLA) with evidence
Goal: prove that user A can access user B’s data.
- Authenticate as user A in Burp’s browser and capture a request that references an identifier:
GET /api/orders/1001GET /account?userId=1001
- Send to Repeater.
- Change only the identifier (
1001 → 1002). - Compare responses along three axes:
- Status code changes? (
200→403is expected;200→200with different data is the bug) - Response length changes?
- Sensitive fields present or absent?
- Status code changes? (
- Use Comparer (right-click response → Send to Comparer, then Compare words/bytes) to generate clean visual proof.
A full worked example is at the end of this section.
Workflow C — Input handling validation
Goal: understand how the server handles data, which is where a lot of vulnerabilities start.
- Capture a request with user input (search, profile update, API filter).
- Send to Repeater.
- Change, one at a time:
- Encoding (URL-encoded, double-encoded, JSON escaping, Unicode)
- Content-Type (
application/jsonvsapplication/x-www-form-urlencoded— sometimes the server accepts both and parses them differently) - Edge values (empty, very long, null bytes, unicode normalization edge cases)
- Watch for server behavior changes:
- Different validation errors
- Different code paths triggered
- Inconsistent normalization (the request hits different parsers)
Use the Inspector panel (right side of Repeater) to decode and edit encoded values inline without leaving the request.
Workflow D — Controlled automation with Intruder
Community’s Intruder is throttled to roughly 1 request per second, so it’s explicitly not a brute-force tool here, it’s an assistive one for small, targeted sets. That constraint is fine for most validation work.
Attack types you need to know:
| Attack type | Behavior | Use it for |
|---|---|---|
| Sniper | Iterates one payload set through each marked position, one at a time | Single parameter fuzzing — 90% of cases |
| Battering Ram | Puts the same payload into all marked positions simultaneously | When two fields must match (e.g., password + confirmation) |
| Pitchfork | Iterates multiple payload sets in parallel (first + first, second + second…) | Paired credentials (user1/pass1, user2/pass2) |
| Cluster Bomb | Tries every combination of multiple payload sets | Brute-forcing combinations (username × password) |
Typical flow:
- Send the request to Intruder (
Ctrl+I). - Clear auto-markers. Mark only the insertion points you care about (
§characters). - Pick the attack type. Load your payload list.
- Start the attack. Sort results by Status, Length, or Response received to find outliers fast.
Important: faster Intruder (via resource pools, parallel connections, and Turbo Intruder-grade throughput) is a Professional feature. Since we’re focusing on Community, we won’t go deeper into Pro tuning, but know that it exists if you hit the throttle limit on real work.
Workflow E — Match and replace (the silent productivity booster)
Found in Proxy settings → Match and replace rules, this lets you rewrite every request or response automatically. Examples that earn their keep daily:
- Inject a
X-Forwarded-For: 127.0.0.1on every request, quick check for IP-based access control bypasses - Replace User-Agent with a mobile UA to force mobile-only code paths
- Strip cache headers in responses to force the browser to re-fetch assets on every refresh
- Replace a specific JWT/cookie in every outgoing request during a long session test
Turn rules on and off as needed. Forgetting a match-and-replace rule is on and then wondering why the app behaves weirdly is a classic self-inflicted confusion, always check the rules list first when something seems off.
Workflow F — Organizer for clean evidence
Organizer gives you an inbox for requests you want to keep. Right-click any request → Send to Organizer, add a title and notes, and group it into a collection.
This is the single best answer to the “Community has no saved projects” problem: you can export Organizer entries and paste them directly into reports. Pro adds secure sharing of collections via encrypted links; that part we skip.
Worked example — IDOR end-to-end in 5 minutes
Scenario: an e-commerce app at https://shop.example.com exposes an API endpoint that returns order details. You have two test accounts: User A (order IDs 1001, 1002) and User B (order ID 2001).
Step 1. Log in as User A through Burp’s browser. Access your own order:
GET /api/v2/orders/1001 HTTP/2Host: shop.example.comAuthorization: Bearer eyJhbGciOi...Cookie: session=a1b2c3...
Response:
HTTP/2 200 OKContent-Type: application/jsonContent-Length: 412{"order_id":1001,"buyer_email":"userA@example.com","total":199.90,...}
Step 2. Send to Repeater (Ctrl+R). Change 1001 to 2001 (User B’s order). Send.
Step 3. Observe the response.
Safe outcome (authorization is enforced):
HTTP/2 403 ForbiddenContent-Length: 47{"error":"You do not own this resource"}
Vulnerable outcome (IDOR confirmed):
HTTP/2 200 OKContent-Length: 418{"order_id":2001,"buyer_email":"userB@example.com","total":89.50,...}
Step 4. Use Comparer. Right-click both responses → Send to Comparer → Compare words. The diff highlights userA@example.com vs userB@example.com and the differing totals. That’s your evidence.
Step 5. Send the original and modified requests to Organizer. Label the collection idor-orders-endpoint.
Step 6. Write the finding:
- Scope:
/api/v2/orders/{id}— GET - Reproduction: authenticated as User A, requesting User B’s order returns 200 OK with full order payload
- Evidence: request/response pair from Organizer + Comparer diff
- Impact: any authenticated user can enumerate and read arbitrary orders, including PII (buyer email), totals, and line items
- Fix direction: enforce ownership check server-side (
order.buyer_id == session.user_id) before returning the resource
That’s a complete pentest finding produced with nothing but Community Edition tooling.
Edge cases worth knowing
WebSockets
Modern SPAs use WebSockets heavily. Burp has a dedicated Proxy → WebSockets history tab , separate from HTTP history. WebSocket messages can also be sent to Repeater for manual replay. If an app “looks static” but reacts to events, check the WebSockets tab before assuming there’s nothing there.
CSRF tokens in Repeater
A common frustration: you replay a request in Repeater, but it fails because the CSRF token expired. The manual workaround in Community is to refresh the relevant page in the browser, grab the new token from Proxy history, and paste it into your Repeater request. Professional solves this with session handling rules that refresh tokens automatically; we don’t cover that here.
Mobile testing (brief)
To route a mobile device through Burp:
- Put the device on the same network.
- Set the device’s Wi-Fi HTTP proxy to your laptop’s IP and port 8080.
- Install Burp’s CA certificate on the device as a system trust anchor (Android: user CAs aren’t trusted by most apps since Android 7).
- Test. If the app uses certificate pinning, Burp will see TLS handshakes fail, bypassing pinning requires external tooling (Frida, objection) and is out of scope here.
AI + Burp Suite
AI doesn’t replace testing. What it does is reduce thinking overhead, turning raw traffic into hypotheses, and hypotheses into clean write-ups.
What AI is genuinely useful for in the Burp workflow:
- Summarizing a captured flow (login → action → API calls) into a narrative
- Spotting likely authorization boundaries in a request body
- Generating focused variation sets (“what to change to test IDOR vs what to change to test SSRF”)
- Turning evidence (request + response + diff) into a report section with impact and remediation
- Rewriting remediation guidance in developer-friendly language
For a deeper take on how AI is actually integrating into pentester workflows today, read How AI is actually helping pentesters today on the VSec blog.
A concrete prompt template for Community workflows, copy a Repeater request and its response, then ask:
Here is an authenticated HTTP request and response:[RAW REQUEST][RAW RESPONSE]Task:1) Identify likely authorization boundaries and trust assumptions.2) Propose 5 minimal variations to validate IDOR/BOLA.3) For each variation, define what response delta confirms a bug vs just noise.4) Draft a report-ready summary: context, repro steps, impact, and fix direction.
That takes you from “interesting request” to “tested hypothesis with report-ready language” in under a minute.
Burp AI note (Pro): Professional includes Burp AI features, explanations for Scanner findings, AI-assisted payload suggestions, and guided exploitation. Since this guide is Community-focused, we won’t go deep on Pro-only AI features. If you want tighter AI integration without paying for Pro, the MCP Server BApp is worth a look, it exposes Burp context to external AI clients via Model Context Protocol. Any data leaving Burp follows the external AI provider’s policies, so review them before connecting production-adjacent traffic.
Common mistakes to avoid
- Leaving Intercept ON all the time. Turn it on only when you need to modify a specific in-flight request, then turn it off. Left on, it will silently block every request the browser makes.
- Skipping scope. Unfiltered history is unreadable and risks out-of-authorization traffic capture.
- Changing multiple variables at once in Repeater. You lose the ability to prove which change caused the behavior.
- Flooding the target with Intruder. Even at 1 req/s, 10,000-entry wordlists are noisy and rarely necessary. Pare the list down.
- Treating TLS errors as application bugs. 95% of “the app is broken in Burp” issues are CA trust or proxy listener misconfiguration.
- Forgetting match-and-replace rules are active. Before declaring “the app behaves weirdly”, check your rules list.
- No evidence trail. If you didn’t save it to Organizer or export it, and Burp restarts, it’s gone, Community has no saved projects.
Pro tips
- Lead every session with scope first, then traffic. Don’t invert this order.
- Use the built-in browser unless you have a hard reason not to. It removes two entire categories of setup errors.
- Ctrl+R everything interesting as you browse, you’ll thank yourself when you realize what you wanted to test 20 minutes in.
- Keep Repeater tabs labeled by intent (right-click tab → Rename). “IDOR test — orders” beats “Tab 17”.
- Use Organizer as you go, not at the end. Memory is expensive; tagging is cheap.
- Install a small set of high-value extensions early: JWT Editor, Autorize, Logger++, Param Miner. All work on Community.
Summary: a safe Burp Suite workflow
- Start Burp, launch a temporary project, open the built-in browser.
- Set target scope and enable “drop out-of-scope traffic”.
- Browse one user journey end to end.
- Send interesting requests to Repeater (
Ctrl+R). - Change one variable at a time. Compare responses.
- Use Intruder only for small, controlled payload sets.
- Save evidence to Organizer as you go.
- Use AI to accelerate analysis, variation generation, and write-ups, not to replace validation.
Conclusion
Burp Suite Community becomes genuinely powerful the moment you stop treating it as “a proxy” and start treating it as a manual, evidence-driven testing environment. Scope your work, replay deliberately, change one variable at a time, save evidence as you go, and let AI handle the summarization and write-up overhead. That workflow produces findings that engineering teams can act on, which is, in the end, the only measure of a useful pentest.

