docs

Campaigns

Package a fuzzing or access-control attack once — launch it on demand or on a cron, against any in-scope host, and re-run it every engagement. (Pro)

A campaign is a saved, repeatable attack — a Pro feature. Package a base request, its payload sets, and the checks once; then launch it on demand, re-point it at the next host, or leave it on a cron to re-fire itself each engagement. Most campaigns wrap an Intruder run; a campaign can also drive a broken-access-control (BAC) audit.

A workflow is a different shape — an event-driven node graph. A campaign is the simpler thing: one packaged attack, saved, scheduled, and fired again and again.

The Campaigns view with a saved attack and its run history
A saved, repeatable Intruder or BAC attack you launch on demand or on a cron schedule, across one or more targets.

What a campaign packages

The core of a campaign is a base request with the positions to vary marked by § — the same markers Intruder uses. Around it you save:

  • Payload sets — a pasted list, a number range, null payloads, or a saved list referenced by wordlist:NAME. The token resolves to your wordlist at fire time, so editing the list changes the next run.
  • Attack mode — any of the seven Intruder modes (sniper, battering ram, pitchfork, cluster bomb, content discovery, custom, single-packet).
  • Grep rules — match, extract, and negative patterns, one per line, to flag responses and pull values out of them.
  • Rate and concurrency — a per-request throttle, concurrency up to 10,000, a retry count, and follow-redirects (up to 5).
  • OOB — turn on Oastify to catch blind callbacks during the run.
  • Targeting — host, port, and TLS overrides, plus a target_hosts allowlist that gates which hosts the campaign may fire at.

A campaign can be multi-step: several named stages, each with its own request, payload sets, and attack mode, run in order.

Build one

  1. Seed it from a captured flow

    In History, right-click a flow and choose Send to Campaigns — the request lands as the base request. Or open Campaigns and hit New Campaign to start from scratch.

  2. Name it and pick the kind

    Name the campaign, choose Intruder attack or BAC audit, mark the spots to vary with §, and add your payload sets. Add Step stacks more stages for a multi-step run.

  3. Set the checks and save

    Add grep match / extract / negative rules, set the throttle and concurrency, toggle Oastify for blind bugs, then Create.

  4. Launch it, or schedule it

    Hit Launch to fire once. To re-run it on a cron, add a schedule and a target_hosts allowlist (below).

Templated tokens

The base request keeps its {{...}} tokens raw and resolves them at dispatch, so each run gets fresh values — and re-pointing {{HOST}} (or the host override) fires the same packaged attack at a new target:

{{HOST}}       the resolved target host
{{NOW}}        an RFC3339 timestamp at fire time
{{EPOCH}}      Unix seconds at fire time
{{UUID}}       a fresh v4 UUID, regenerated every request
{{ENV:NAME}}   an OS environment variable
{{NAME}}       a variable from the Environment tab; {{NAME|default}} falls back

Tokens are case-sensitive. An unknown {{...}} is left untouched, so a literal in your request survives unchanged.

Schedule it

A campaign carries its own 5-field cron schedule. A background loop checks every 30 seconds, advances the next-run time before it fires so a long run can't double-fire, and skips any schedule you've paused. Pausing the schedule leaves the campaign intact — it just stops firing.

Before every scheduled launch, the campaign re-checks two gates: the active scope, and its own target_hosts allowlist. A host that's out of scope or off the allowlist is refused, not fired. The allowlist takes an exact host, a *.example.com subdomain wildcard, or * for any, comma- or newline-separated; an empty allowlist means no restriction.

For recurring scans rather than a packaged attack, use the scheduler instead.

Run, pause, resume, stop

A campaign moves through Idle → Running → Completed / Failed / Cancelled, and you can Pause and Resume a live run. Pause halts the in-flight attack; resume picks it up where it left off; Stop cancels it and returns the campaign to Idle. Delete is refused while a campaign is Running or Paused — stop it first.

Read the results

Every fire opens a run, so a scheduled campaign builds a history you can scroll. Open any run for its results table — one row per request, sortable and paginated by status, length, and your grep columns — and the findings attributed to that run. The campaign row shows live counters: total requests, completed, and findings so far.

Drive it from MCP or REST

Everything above is scriptable. Build, schedule, start, pause, and read any campaign from the REST API or an AI agent over MCP, so CI and agents fire the same packaged attack through the same scope and allowlist checks as the GUI.

A campaign repeats one packaged attack; a workflow runs an event-driven node graph; the scheduler runs recurring scans. Three different automation shapes.

Last updated 2026-06-17.