Utility Skills¶
Utility skills support the pentest workflow with pre-engagement setup, monitoring, resumption, and post-engagement analysis. They are not part of the core 6-phase methodology but integrate with it.
/intake¶
Pre-engagement questionnaire that collects business context, tech stack, compliance requirements, and rules of engagement. Outputs brief.json at the project root.
Modes¶
| Mode | Command | Description |
|---|---|---|
| Guided | /intake |
Interactive interview with approximately 25 questions covering business context, tech stack, compliance, features, and engagement rules |
| Paste | /intake --paste |
Paste mode -- provide a block of text (email, SOW, scope document) and the skill extracts structured data from it |
Output¶
brief.json with _version: "1.0" containing:
- Business context and application purpose
- Known tech stack and frameworks
- Compliance requirements (PCI-DSS, HIPAA, SOC2, etc.)
- Key features and functionality to test
- Rules of engagement and restrictions
- Credentials and access information
Integration¶
/pentest auto-detects brief.json and merges it into context.json. Fingerprinting results from Phase 0 take priority over brief data when there are conflicts.
Tip
While optional, /intake significantly improves test targeting by providing context that automated fingerprinting cannot discover (e.g., business logic priorities, compliance requirements).
/preflight¶
Pre-check skill that validates the testing environment before starting a pentest. Verifies:
- Docker image
pentest-toolsis built and accessible - Target URL is reachable
- Scope file (
scope.txt) exists and is valid - Credentials file exists (if multi-user testing is planned)
- Required tools are available inside the Docker container
- Proxy connectivity (if
--proxyis specified) - VPN routing (if VPN is configured)
/resume¶
Checkpoint-based resume that continues a pentest from where it left off. Reads checkpoint.json to determine the last completed phase, wave, and agent state.
How It Works¶
- Reads
checkpoint.jsonfor current phase and wave state - Reads
waves/agent-*.jsonfor per-agent completion status - Skips completed phases and waves
- Resumes from the exact point of interruption
- Re-validates context before continuing (target reachable, tokens valid)
Checkpoint Data¶
checkpoint.json tracks:
- Current phase number and name
- Completed waves within the current phase
- Agent states (running, completed, failed)
- Elapsed time and request counts
- Kill switch status
/dashboard¶
Status overview of the current engagement. Displays:
- Current phase and wave
- Findings count by severity (Critical/High/Medium/Low/Info)
- Endpoint coverage statistics
- Request count and rate
- Time elapsed
- Kill switch proximity (time and request limits)
- Agent status (if wave dispatch is active)
/retest¶
Re-tests specific findings to verify they are still present (e.g., after remediation). Takes finding IDs as input and re-runs the verification PoC for each.
Output¶
For each finding, reports:
- Still vulnerable -- PoC still works, finding confirmed
- Fixed -- PoC no longer works, remediation verified
- Changed -- Behavior differs from original finding, manual review needed
/diff-engagements¶
Compares two engagement directories to identify new, fixed, and persistent findings. Useful for tracking remediation progress across multiple assessments.
Output¶
- New findings -- present in new engagement but not old
- Fixed findings -- present in old engagement but not new
- Persistent findings -- present in both engagements
- Regression analysis -- findings that were fixed but reappeared
- Summary statistics and trend analysis
/chain-findings¶
Correlates individual findings into multi-step attack chains. Runs after Phase 5 (verification) to discover compound vulnerabilities with higher combined impact than their individual severity suggests.
Chain Patterns Detected¶
| Pattern | Example |
|---|---|
| SSRF to cloud credentials | SSRF + metadata endpoint access + IAM role theft |
| XSS to account takeover | Stored XSS + session token theft + admin access |
| SQLi to data exfiltration | SQL injection + UNION-based extraction + PII exposure |
| CMDi + LFI | Command injection + local file read for source code |
| LFI + SSRF | Local file inclusion + internal service access |
| XXE + JAR | XML external entity + Java archive protocol |
| JWT + BAC | JWT weakness + broken access control escalation |
| UserEnum + NoRateLimit | Username enumeration + unrestricted brute force |
| XSS + CORS | Cross-site scripting + CORS misconfiguration |
Output¶
Each chain produces a CHAIN-NNN.md file in findings/ containing:
- Chain title and combined severity
- Component findings with individual severity
- Step-by-step attack flow narrative
- Mermaid diagram of the attack chain
- Combined business impact assessment
/walkthrough¶
Standalone browser crawl using Playwright in headless Chromium. Navigates every user role from credentials.json to discover SPA routes, dynamic menus, JS-rendered content, and API calls.
Features¶
- Headless Chromium via Playwright inside Docker
- Authenticates each role using
credentials.jsonlogin configuration - BFS (breadth-first search) crawling strategy
- Captures network requests (API calls, XHR, fetch)
- Diagnoses 403/500/timeout/JS errors instead of skipping
- Parallel crawling with 2+ roles
Parallel Crawling¶
With multiple roles, launches parallel Docker processes per role:
# Per-role crawling (parallel)
docker run --rm -v $(pwd):/work pentest-tools /opt/pentest-venv/bin/python3 /work/browser/crawler.py --role admin
docker run --rm -v $(pwd):/work pentest-tools /opt/pentest-venv/bin/python3 /work/browser/crawler.py --role user
# Merge results
docker run --rm -v $(pwd):/work pentest-tools /opt/pentest-venv/bin/python3 /work/browser/crawler.py --merge
Max 3 users per batch
When crawling 4+ users, split into batches of max 3 users. Crawling too many users in a single process causes timeouts and internal errors.
Output¶
| File | Description |
|---|---|
app-map.json |
Complete application map with routes, parameters, and role access |
walkthrough-report.md |
Human-readable crawl report |
crawled-urls.txt |
All discovered URLs |
api-endpoints.txt |
API endpoints captured from network traffic |
Credentials Requirement¶
credentials.json MUST include a login section so the crawler can authenticate each role:
{
"login": {
"url": "http://target/login",
"method": "form"
},
"users": [
{"username": "admin", "password": "admin123", "role": "admin"},
{"username": "user", "password": "user123", "role": "user"}
]
}
Without the login field, the crawler runs unauthenticated and misses all protected pages.
/route¶
Smart router that analyzes discovery output and maps endpoints to specific test scopes. Runs after Phase 3 (scanning) and before Phase 4 (manual testing).
Input¶
resource-map.json-- discovered resource typesinjectable-params.json-- parameter inventory- Scan results from Phase 3 (nuclei, nikto)
Analysis¶
Performs signal analysis on each endpoint to determine which test skills are applicable:
- Parameter types and names suggest injection vectors
- Response patterns indicate technology-specific tests
- Scan findings highlight confirmed attack surfaces
- Resource types map to access control tests
Output¶
discovery/test-plan.json mapping each endpoint to its relevant test scopes. This enables targeted, per-endpoint testing in Phase 4 instead of running every test against every endpoint.
{
"/api/v1/users": ["injection", "access", "api"],
"/api/v1/users/{id}": ["injection", "access", "ssrf", "api"],
"/login": ["injection", "auth", "client"],
"/upload": ["injection", "logic", "ssrf"]
}
/pentest_suggestions¶
Generates targeted manual testing suggestions after automated testing is complete. Analyzes:
- Anomalous behaviors observed during testing
- Promising attack surfaces that warrant deeper investigation
- Technology-specific attack vectors based on fingerprinted stack
- Areas where automated tools had limited coverage
Provides actionable recommendations for manual follow-up, prioritized by likelihood of finding vulnerabilities.
/update-wordlists¶
Updates all wordlists and nuclei templates. Uses a smart 24-hour cache to avoid redundant downloads.
/update-wordlists # Smart update (skips if updated within 24h)
/update-wordlists --force # Force update regardless of last run time
What Gets Updated¶
- SecLists -- comprehensive wordlist collection for fuzzing and discovery
- Nuclei templates -- vulnerability detection templates (9000+)
- Technology-specific wordlists based on current engagement context
- Custom wordlists from community sources
Cache Behavior¶
- Checks last update timestamp before downloading
- Skips update if last run was within 24 hours
--forceflag bypasses the cache check- Cache state stored locally to avoid redundant network requests