<< All versions

Skill v1.0.0

currentAutomated scan100/100
portswigger/http-terminator/simplify-vector
──Details
PublishedNovember 5, 2026 at 04:54 PM
Content Hashsha256:2acb113f7a8feee6...
Git SHA874682cdbdd1
──Files
Files (1 file, 2.2 KB)
SKILL.md2.2 KBactive
SKILL.md · 53 lines · 2.2 KB

name: simplify-vector description: simplify/minimise a HTTP request to identify the minimum requirements to trigger the behaviour metadata: version: "1.0.0"


Request Simplification

Iteratively simplifies an HTTP request to find the minimal trigger for a behavior.

How to use

  1. Copy the template simplify-vector.py
  2. Set request_to_simplify to the full request that triggers the behavior
  3. Set success_fingerprint to a string that appears in the response ONLY when the behavior triggers
  4. Run via turbo simulator MCP

Configuration

python
request_to_simplify = '''POST /path HTTP/1.1\r\nHost: example.com\r\n...\r\n\r\n'''
success_fingerprint = 'unique-string-in-triggered-response'

Choosing a good fingerprint

The fingerprint must be UNIQUE to the triggered behavior. Bad fingerprints cause over-simplification.

For desync/response concatenation:

  • Use text from the FIRST response (e.g., Apache Server from a front-end 400 error)
  • Or use something that only appears when both responses are concatenated

Avoid:

  • Strings that appear in normal responses (e.g., domain names, app names)
  • Generic error messages that appear in multiple error types

Simplification phases

  1. Normalise protocol - if HTTP/1.0 or HTTP/2, tries changing to HTTP/1.1
  2. Try GET method - if not already GET, tries changing to GET
  3. Simplify path - tries changing path to /
  4. Remove headers - tries removing each header (except Host)
  5. Try canonical values - for each surviving header, tries replacing its value with x, then a normal value for that header; keeps the simplest value that still triggers. Retried (default 3x) so a flaky miss doesn't wrongly mark a value as essential. This reveals when an unusual-looking value (e.g. Content-Type: multipart/byteranges) isn't actually required — something deletion alone can never discover.
  6. Remove words - for remaining headers, tries removing words from values
  7. Remove characters - tries removing individual characters from values

Output

  • kept:* - simplification was kept (fingerprint still present)
  • reverted:* - simplification was reverted (fingerprint disappeared)
  • FINAL-MINIMAL - the minimal trigger
All versions