skills/request-exploration/SKILL.md
Systematic live request mutation: flip booleans, field ops, headers, content-type, parser differentials, replay vs intercept, null/empty testing. Inherits live-testing-policy scope/rate/ownership rules.
npx skillsauth add ghostonbutterbread/bug-bounty-harness request-explorationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use when testing a known live request or mapped workflow and you want to systematically mutate it to discover behavior, edge cases, and security boundaries.
This is a thinking loop, not a request-count cap. Continue while each mutation family produces new signal. Stop or pivot when responses become redundant, rate limits appear, or a stronger lead emerges.
/live-testing-policy./headers/waf-live-policy/hypothesis-live-testingreferences/juice-shop-lab.md and references/local-notes-map.md.Test one mutation family at a time and observe whether the response changes in ways that matter — status, body length, validation errors, behavior side effects, entitlement differences, or data exposure.
For each mutation family, document: what changed, what the baseline response was, what the mutated response was, and whether it represents a security-relevant difference.
The examples below are patterns to think with, not a fixed checklist. Adapt them to the target's actual request shape, parser, auth state, and ownership model. If a request shape or response behavior suggests a mutation not listed here, try it.
Change true/false, 0/1, yes/no, enabled/disabled, active/inactive, premium/basic, staff/customer, internal/external, isAdmin, isModerator, isOwner, hasAccess, verified, approved, paid, subscribed.
Examples:
payment_option: false. Change to true and observe whether the price drops, a premium feature unlocks, or an entitlement flips without payment.role: "user". Try role: "admin" or "moderator" and check downstream privilege gating."subscribed": false. Re-send the mutation request with "subscribed": true and see if the server trusts a client-side flag.isOwner or canEdit. Reflect the same key back in the next state-changing request and see if the server trusts it.Try 1, -1, 0, 99, 999999, null, true, false, empty string, or an array where a scalar is expected.
Look for: type coercion, negative-price billing, range bypass, integer overflow, MAX_INT, or privilege escalation through number-shaped fields.
Examples:
-1 and check whether the total becomes negative or the item is added at no cost.0, -100, 0.01, or a string like "free".0 (often reserved for admin/superuser in some frameworks), -1, or a very large integer.2, 99, -1, "true", or [true] to see whether the parser coerces or rejects non-standard values.Duplicate a field with the same or different value. Remove a field entirely. Change field order in JSON. Send extra fields not in the original request.
Examples:
?role=user&role=admin and observe which value the server or backend framework picks.{"BasketId":"<owned_a>","ProductId":1,"BasketId":"<owned_b>"} — last-value-wins frameworks may pick the second one, bypassing access checks keyed on the first.isAdmin, role, companyId, plan, credit, or verified to a registration or profile update where the field is not normally present.Remove auth-related headers (Authorization, Cookie, X-API-Key). Swap Content-Type. Add/remove Origin, Referer, X-Forwarded-For, X-Real-IP, X-Forwarded-Host, X-Forwarded-Proto, X-Original-URL, X-Rewrite-URL. Load /headers skill for deeper header poisoning guidance.
Examples:
X-Forwarded-For: 127.0.0.1 or X-Real-IP: 127.0.0.1 to a rate-limited endpoint and observe whether rate limiting or IP-based access controls are bypassed.Content-Type: application/json to text/xml or application/x-www-form-urlencoded with the same payload and observe parser behavior differences.Send JSON as form-encoded, form as JSON, XML where JSON is expected, multipart where form is expected. Change Accept header. Probe whether the server and backend parse the body differently based on Content-Type.
Examples:
application/json. Try x-www-form-urlencoded or multipart/form-data with the same mutation payload.application/xml, text/html, or */* and observe whether the response format reveals internal error messages or different parser paths.Same payload, different encoding: URL-encode, double URL-encode, Unicode escape, hex, base64. Different quoting: single vs double, no quotes. Nested JSON vs flat. Array vs scalar for single-value fields.
Examples:
{"id": 1} vs {"id": [1]} vs {"id": {"$gt": ""}} and observe whether a NoSQL or ORM parser treats the shape differently.role=admin vs role=%61dmin vs role=%25%36%31dmin and test whether a WAF, filter, or backend parser normalizes inconsistently.{"user":"attacker"} vs {"user":["attacker","victim"]} and observe whether a multi-value array bypasses single-value access checks.Remove fields one at a time. Send null vs "" vs [] vs {} vs omitted entirely.
Examples:
email, password, name. Remove email and see whether the server accepts a user with no email, defaults to null, or rejects.oldPassword, newPassword. Remove oldPassword and check whether the server skips current-password verification.{"id": null} to an endpoint that normally requires an ID and observe whether it returns all records, the first record, or an error.{"role": ""} instead of omitting it entirely and compare behavior to {"role": null}.For stateful endpoints, send the exact captured request (replay) and compare the response to a live-intercepted mutation of the same request.
Examples:
Stop on: out-of-scope URL, non-owned resource without clear public access, human-facing action, destructive mutation, paid transaction authorization, program-disallowed behavior, instability, or sensitive-data exposure beyond minimal classification proof.
Record full URLs, request method, auth state, owned account aliases, mutation class, baseline vs mutated response deltas, and whether the delta is security-relevant. Never record raw passwords, cookies, bearer tokens, reset links, reset tokens, or private data.
development
Test password reset, forgot-password, reset-token, email reset, and account recovery flows for account takeover risks.
tools
Targeted param/field discovery using tech stack clues, naming conventions, and controlled-rate ffuf — then feeds findings into request-exploration for mutation. Not brute-force; informed and scoped.
testing
Ghost-only workflow for creating approved bug bounty test accounts and saving credential references.
tools
Use BountyLens sessions, findings, leads, tested endpoints, reports, watchlist, stats, and program intelligence without per-agent MCP config.