Skip to main content
Blackbox scanning tests a web application from the outside without access to source code. Vigolium sends crafted HTTP requests and analyzes responses to find vulnerabilities.

Quick Start

Strategies

Use --strategy to control how much reconnaissance Vigolium performs before dynamic testing.

Lite, Fast, Minimal Discovery

Runs only the dynamic-assessment phase against the provided targets. No crawling, no content discovery.
Best for: quick checks, CI pipelines, known endpoints.

Balanced, Default

Runs content discovery, browser spidering, known-issue-scan analysis, and audit.
Best for: general-purpose scanning with good coverage.

Deep, Maximum Recon

Adds external intelligence harvesting (Wayback Machine, CommonCrawl, etc.) on top of balanced.
Best for: thorough assessments where you want to discover forgotten endpoints and historical paths.

Phase-by-Phase Walkthrough

Input Formats

Vigolium accepts targets in multiple formats via -I / --input-mode:

External Harvesting

Queries external data sources for historical URLs and endpoints. Enabled by --strategy deep or --external-harvest.
Sources: Wayback Machine, CommonCrawl, AlienVault OTX, URLScan, VirusTotal. API keys for URLScan and VirusTotal can be configured in vigolium-configs.yaml under external_harvester.sources.

Content Discovery

Brute-force directory and file discovery using the deparos engine. Enabled by --strategy balanced/deep or --discover.
The discovery engine uses recursive brute-forcing (default depth 5), observed filename variants, JS analysis, and case-sensitivity auto-detection.

Browser Spidering

Chromium-based crawling that handles SPAs, JavaScript rendering, and form interactions. Enabled by --strategy balanced/deep or --spider.
Spider flags:
  • -b / --browsers, number of browser instances (default: 1)
  • -E / --browser-engine, chromium, ungoogled, or fingerprint (default: chromium)
  • --headless: headless mode (default: true)
  • --no-cdp: disable CDP event listener detection
  • --no-forms: disable automatic form filling
  • --spider-max-time: max duration (default: 30m)

Known Issue Scan

Runs Nuclei templates and Kingfisher secret scanning against discovered hosts and response bodies. Enabled by --strategy balanced/deep or by the strategy. By default, known-issue-scan enriches its target list with path prefixes discovered in previous phases (discovery, spidering). This increases coverage, Nuclei templates run against individual path prefixes (e.g., https://example.com/api/v1/) rather than just the host root. Disable this for faster but less granular scans:

Dynamic Assessment

The core scanning phase (canonical name dynamic-assessment; aliases audit, dast, assessment). Runs active and passive modules against all discovered HTTP records. Enabled in all strategies. Uses a feedback loop (up to 3 rounds): after each round, checks for newly discovered records and rescans if found. OAST (Out-of-band Application Security Testing) injects blind callback payloads when configured:

Performance Tuning

CLI Speed Flags

Scanning Pace (Config File)

The scanning_pace section in vigolium-configs.yaml provides centralized speed control. Common values serve as a baseline inherited by all phases; per-phase subsections override specific values.
Precedence (highest to lowest): CLI flags > scanning profile > per-phase overrides > common values > built-in defaults.

Proactive WAF/CDN Pacing

An aggressive active phase can burst a WAF/CDN edge into a rate-based block — and once the edge starts filtering, the findings that would have surfaced are hidden behind challenge pages. To stay ahead of that, the per-host rate limiter pre-throttles a host the first time earlier-phase traffic fingerprints it behind a recognized edge, before the heavy phase ever fires:
  • Detection reads ordinary responses — headers on plain 200s are enough to fingerprint CloudFront, Cloudflare, Akamai, Imperva/Incapsula, Sucuri, and Azure Front Door. No block or challenge is required to arm the pacing.
  • On the first match, per-host concurrency drops to a quarter of its ceiling (MaxPerHost/4), then ramps back up on healthy responses so a well-behaved edge isn’t paced forever.
  • The drop prints once per host as a [waf-pacing-armed] notice (for example 40→10), so you can see exactly when and how far a host was throttled.
This is the proactive half of Vigolium’s WAF handling: it slows down before an edge blocks. It complements the reactive WAF-block warning (the one-time-per-host [waf-block-detected] notice covered on the discovery phase page), which fires after a confirmed block. Passing --no-waf-pacing disables only the proactive pacing; the reactive back-off after a confirmed block is unaffected.

Output Formats

Multiple formats can be combined with a comma, e.g. --format jsonl,html.

Lightweight Scan Commands

For quick, targeted scans of individual URLs or raw requests.

scan-url: Single URL

scan-request: Raw HTTP Request

When phase flags (--discover, --spider, --external-harvest, --known-issue-scan) are used with these commands, they delegate to the full Runner pipeline (database required).

Module Selection

Hand-picking modules auto-skips known-issue-scan. Narrowing a scan to specific modules (--module-id, or -m/--modules) signals a targeted, low-noise run, so Vigolium auto-appends --skip known-issue-scan — otherwise the broad Nuclei/Kingfisher known-issue pass would flood the results. A one-line console note explains the auto-skip; pass --only known-issue-scan to force the pass back on. It’s a no-op when --only is set or when no module narrowing is active, and is silent under --silent.

Filtering by Tag

Modules are tagged with classification labels (e.g., spring, rails, django, xss, injection, light). Use --module-tag to run only modules matching specific tags:
Tags are matched with OR logic, a module runs if it matches any of the specified tags. When both -m and --module-tag are provided, the results are merged (union).

Custom Extensions

Load JavaScript or YAML extension modules alongside or instead of built-in modules. See Extension Scanning for full details.

Heuristics

Pre-flight checks detect WAFs, redirects, and technology before scanning. Controlled via --heuristics-check:
Heuristics are automatically disabled when --only is used.

OAST (Out-of-Band Testing)

OAST detects blind vulnerabilities where the application triggers an out-of-band callback (DNS/HTTP) instead of reflecting payloads in the response. Vigolium uses an interactsh server for callback tracking. OAST is enabled by default. The OAST probe module injects callback URLs into insertion points and monitors for interactions during and after the scan.
Configuration in vigolium-configs.yaml:

Mutation Strategy

The mutation strategy controls how Vigolium generates payloads for parameter fuzzing. Value-aware mutation analyzes the original parameter value, classifies it by semantic type, and generates type-appropriate mutations.
Recognized value types include: integer, UUID, email, JWT, boolean, path, sequential ID, and 15+ others. Each type has specialized neighbor, boundary, and escalation mutations.

Project Scoping

Use --project-id (with a UUID) or --project-name (with a name) to scope all scan data to a specific project for multi-tenant isolation:
See Projects for the full multi-tenancy reference.

Common Scenarios