Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
Payload-and-Polyglot-Lists — GromHacks Labs -- The payload lists they don't want you to have. 1,324 injection probes beamed down from the mothership to detect what's injectable across 20 vuln classes. We don't exploit, we just knock on the door and see who answers. Every payload tested against real parsers because the aliens demand proof. Trust no input. Question everything! | Kitploit
Tools/GitHubGitHub/gromhacks/payload-and-polyglot-lists
OSINT (Open Source Intelligence)Payload GenerationVulnerability AnalysisWeb Application ExploitationFuzzingPenetration TestingLearning & Education
GitHubgromhacks/payload-and-polyglot-lists

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →

About

GromHacks Labs -- The payload lists they don't want you to have. 1,324 injection probes beamed down from the mothership to detect what's injectable across 20 vuln classes. We don't exploit, we just knock on the door and see who answers. Every payload tested against real parsers because the aliens demand proof. Trust no input. Question everything!

Payload-and-Polyglot-Lists

View Repository
3694 months agoReviewed by Kitploit
Share

Payload & Polyglot Lists

Found a payload that doesn't work? Please open an issue with the payload, target context, and what you expected to happen. Pull requests with fixes or new payloads are always welcome.

Research is ongoing. This project is under active development and will be updated regularly with new payloads, vulnerability classes, and validation improvements.

Disclaimer: These payloads are provided for authorized security testing, education, and research purposes only. The authors assume no responsibility or liability for any misuse or downstream effects. Use entirely at your own risk. By using this project you accept full responsibility for your actions.

License: MIT - see LICENSE

1,353 validated injection payloads covering 20 vulnerability classes, 31 deserialization frameworks, and 14 template engines. Every payload produces a detectable signal. Zero theoretical payloads.

Validation: 1,353 tested / 1,353 fire / 0 failures / 0 skipped against 35 Docker testbed stacks. Strict validation proves actual exploitation (server-side computation, real parser errors, measured timing delays, OOB callbacks from target containers) -- not string matching.


Concept

The Problem with Traditional Payload Lists

Most publicly available payload lists are organized by vulnerability type: one list for SQL injection, another for XSS, another for command injection, and so on. A tester picks the list they think matches the target, loads it into an intruder tool, and runs it against a parameter. If they guess wrong about the vulnerability class, the entire scan produces nothing. If the backend is an uncommon database, a non-standard template engine, or a language the list didn't account for, the payloads silently fail. The tester moves on thinking the parameter is clean.

This approach has two fundamental problems. First, it requires the tester to know what vulnerability exists before they've found it. Second, most payloads in circulation are theoretical -- copied between projects and blog posts without ever being tested against a real parser. They look right. They might even be syntactically valid. But they don't actually trigger a detectable response from the target.

Polyglot-First, Signal-Guaranteed

This project takes a different approach. The primary unit of work is the polyglot -- a single payload string engineered to be valid (or meaningfully invalid) across as many injection contexts as possible simultaneously. One polyglot breaks out of single quotes, double quotes, parentheses, block comments, HTML attributes, template delimiters, and backtick contexts all at once. Instead of needing to know what the vulnerability is, the tester fires polyglots at every parameter and watches for signals.

Every payload in this collection is built around detection pillars -- observable responses that confirm a vulnerability exists without requiring access to server logs, source code, or filesystem:

  • Error: the payload causes the backend to throw an exception, parser error, or stack trace visible in the response.
  • Math: the payload includes an arithmetic expression like 7*191 that evaluates to 1337. If that number appears in the response and the payload only sent 7*191 (not the literal 1337), the backend computed the expression -- proof of code execution.
  • Timing: the payload forces a delay (5+ seconds). If the response is slow, the backend executed a sleep or CPU-intensive operation.
  • OOB (Out-of-Band): the payload forces the backend to make an outbound HTTP, DNS, LDAP, or TCP connection to a callback server the tester controls. Confirms execution even when the response is completely opaque.

If a payload doesn't produce at least one of these signals when tested against its target context, it doesn't belong in the list. Every one of the 1,353 payloads here has been validated against purpose-built Docker testbeds with strict proof of exploitation. Zero are theoretical.

Built-ins Over Shell Commands

Traditional OOB and timing payloads rely on shell commands: curl, nslookup, ping, sleep. These break constantly. They depend on the target OS, the available PATH, which shell interprets the command, and whether the process has permission to spawn subprocesses. A curl-based OOB payload that works on Ubuntu fails on Alpine (no curl), fails on Windows (no curl), and fails inside a restricted container (no outbound process execution).

This project replaces shell commands with language-native built-ins wherever possible. Python payloads use urllib.request.urlopen() and time.sleep(). Java payloads use java.net.URL.openStream() and Thread.sleep(). Ruby uses Net::HTTP.get() and Kernel.sleep. PHP uses file_get_contents() and sleep(). These functions exist in every standard installation of their respective language -- no PATH lookup, no subprocess, no OS dependency.

Where even standard library imports might be blocked (sandboxed eval, restricted exec), the payloads fall back to import-free alternatives: CPU spin loops for timing (sum(range(500000000)) in Python, Atomics.wait() in Node) and raw socket connections for OOB (__import__('socket').create_connection(), fsockopen(), TCPSocket.new()).

Where Polyglots Don't Reach

Not everything can be a polyglot. Template engines use fundamentally incompatible syntax -- {{}} in Jinja2 means nothing to ERB's <%= %>, and neither parses as Freemarker's ${}). Deserialization formats are binary or structured data specific to one framework. For these categories, the project uses per-engine payloads organized under the same detection pillar system, covering 14 template engines and 31 deserialization frameworks across 7 languages.

The result is a single corpus where polyglots handle the contexts they can (SQLi, OS command injection, XSS, code injection) and purpose-built per-engine payloads handle the rest, all validated, all producing detectable signals, all ready for line-by-line injection tools.


Minimal List (82 Payloads)

83 payloads covering all 35 testbed stacks, all 55+ endpoints, and all 4 detection pillars per category. Validated: 83 FIRE / 0 NO-FIRE / 0 SKIPPED.

Every injection category gets error + math + timing + OOB coverage where architecturally possible. Deserialization frameworks that support code execution (Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET) get full multi-pillar coverage. Frameworks limited to probing (PHP unserialize, Ruby Marshal, SnakeYAML, etc.) get error-based detection. Fire this at every parameter before switching to full category lists for depth.

83 requests instead of 1,353. Use ready/minimal/payloads-only.txt for Burp Intruder.


Picking the Right Payload for a Target

See HOWTOUSE.md for the full operator guide. It turns "I'm looking at a parameter, what do I throw at it?" into a repeatable workflow:

  1. Parameter and context profiling - 5 questions (value shape, stack fingerprint, response visibility, OOB availability, WAF) that prune categories before you fire a single payload.
  2. Category-by-category "when to suspect it" - exhaustive, production-focused hints for all 20 categories. Each category lists real SaaS feature types (low-code platforms, BI/reporting, monitoring, workflow automation, SSO, SSRF fetchers, eval sinks, email template builders, etc.), visual and behavioral cues (7*7 returning 49 as the eval giveaway, {{name}} rendering as "Alice" confirming SSTI, ping output leaking from a diagnostic field, User-Agent strings in OOB logs naming the fetcher library), modern-stack ORM footguns (Prisma $queryRaw, Rails .order(), Hibernate JPQL concat, Mongoose findOne(req.body)), and cheap probes to confirm suspicion before burning the full list.
  3. Dangerous serialization byte fingerprints - raw magic bytes and base64 prefixes for 31 frameworks across Python, PHP, Java, .NET, Node, Ruby, and Perl (rO0AB = Java, AAEAAAD///// = .NET BinaryFormatter, BAg = Ruby Marshal, gASV = Python pickle P4, / = PHP unserialize, etc.) with a 16-entry quick-reference cheat-card and disambiguation heuristics. Fingerprint the blob before firing so you load 5-15 matching payloads instead of all 232.

Use HOWTOUSE.md before you run payloadctl prepare. Fingerprint first, minimal list second, category drill-down third - not a shotgun of 1,353 payloads at every parameter.


Quick Start

root@kitploit:~
# 1. Prepare payloads with your callback domain
#    Replaces {domain} placeholder in all OOB payloads with your server
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com

# 2. Load into Burp Intruder, ffuf, or any line-by-line injection tool
#    All output goes to ready/ (gitignored, contains your domain)

After running prepare, your ready-to-use files are in ready/full/ and ready/minimal/ with matching structure:

The ready/minimal/ directory mirrors the same structure (by-category, by-pillar, encoded) with the minimal payload set.

Custom output directory:

root@kitploit:~
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com -o /path/to/engagement/payloads

Raw templates with {domain} placeholder (for scripted substitution) are in payloads/lists/full/ and payloads/lists/minimal/.


Detection Pillars

Every payload produces at least one of these signals. Grep for these in your responses:

Canary values: 1337 (primary, from 7*191) and 7331 (secondary). Detection is a simple grep.


Payload Coverage

By Vulnerability Class

13 of 20 categories have all 4 pillars. The 7 that don't (XSS, XSLT, Format String, Prototype Pollution, CRLF, XXE, CouchDB) have architectural reasons -- you can't do timing-based CRLF or OOB format strings. Where cross-pillar IS possible, the polyglots section covers it.

Encoded Variants

7 encoding formats, each with all 1,353 payloads:


Design Principles

Minimum payloads, maximum context coverage. See SPEC.md for the full technical specification with per-engine pillar tables and exact payload syntax.

  1. Polyglots first. One payload breaks out of ', ", ), */, -->, backticks, and template delimiters simultaneously. Polyglot sections lead the master list.

  2. Per-engine where polyglots can't reach. SSTI delimiters and deserialization formats are fundamentally incompatible across engines.

  3. Built-in over shell. OOB and timing payloads use language-native libraries:


CLI Tool (payloadctl)

root@kitploit:~
# USAGE: prepare payloads for an engagement
./tools/payloadctl prepare abc123.oastify.com          # output -> ready/
./tools/payloadctl prepare abc123.oastify.com -o /tmp/payloads  # custom dir

# DEVELOPMENT: build, distribute, validate, generate
./tools/payloadctl build              # sources/ -> payloads/full.txt
./tools/payloadctl dist               # full.txt + minimum.txt -> payloads/lists/full/ + lists/minimal/
./tools/payloadctl validate           # test all 1,353 payloads against 35 testbed stacks
./tools/payloadctl validate <file>    # test a specific wordlist (e.g. lists/minimal/master.txt)
./tools/payloadctl generate           # regenerate computed payloads (deser, ssti, sqli, misc)
./tools/payloadctl generate deser     # deserialization only
./tools/payloadctl generate ssti      # SSTI only

Typical Development Workflow

root@kitploit:~
# 1. Edit source files
vim payloads/sources/sqli.txt

# 2. Rebuild
./tools/payloadctl build       # rebuild full.txt from sources
./tools/payloadctl dist        # regenerate lists/full/ + lists/minimal/

# 3. Validate (requires Docker testbeds running)
cd testbed && ./testbed up sqli-sqlite && cd ..
./tools/payloadctl validate    # expect: N FIRE / 0 NO-FIRE / 0 SKIPPED

# 4. Prepare for use
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com

Repository Structure

root@kitploit:~
.
├── README.md                          # This file
├── HOWTOUSE.md                        # Operator guide: context profiling + category selection matrix
├── SPEC.md                            # Technical spec - per-engine pillars, payload syntax, coverage
│
├── tools/                             # CLI and generators
│   ├── payloadctl                     # CLI entry point
│   ├── cmd_build.py                   # Build full.txt from source files
│   ├── cmd_dist.py                    # Generate lists/ directory
│   ├── cmd_validate.py                # Validate payloads against testbeds
│   ├── cmd_validate_strict.py         # Strict validation (proves actual exploitation)
│   ├── cmd_generate.py                # Run payload generators
│   ├── cmd_prepare.py                 # Prepare payloads with callback domain
│   ├── generate-deser-final.py        # Deserialization generator (31 frameworks)
│   ├── generate-ssti-missing.py       # SSTI generator (14 engines)
│   ├── generate-sqli-code-missing.py  # SQLi and code injection generator
│   └── generate-misc-missing.py       # XXE, XSS, SSRF, path traversal generator
│
├── payloads/
│   ├── full.txt                       # Master list (1,353 payloads, with ## headers)
│   ├── sources/                       # Source files (edit these, all validated)
│   │   ├── minimum.txt                # 83-payload minimal list (validated, all pillars)
│   │   ├── polyglots-condensed.txt    # Cross-context polyglots (first in master)
│   │   ├── sqli.txt                   # SQL injection (204)
│   │   ├── ssti.txt                   # Template injection (168)
│   │   ├── deserialization.txt        # Deserialization (116, 31 frameworks)
│   │   ├── os-cmd-injection.txt       # OS command injection (116)
│   │   ├── code-injection.txt         # Code injection (112, includes Groovy)
│   │   ├── ssrf.txt                   # SSRF (117)
│   │   ├── path-traversal.txt         # Path traversal (98)
│   │   ├── xss.txt                    # XSS (49)
│   │   ├── format-string.txt          # Format string (33)
│   │   ├── nosql.txt                  # NoSQL (26)
│   │   ├── el-injection.txt           # Expression language (26, includes MVEL)
│   │   ├── header-crlf.txt            # CRLF/header (14)
│   │   ├── prototype-pollution.txt    # Prototype pollution (10)
│   │   ├── xxe.txt                    # XXE (8)
│   │   ├── ldap-injection.txt         # LDAP injection (30)
│   │   ├── xslt-injection.txt         # XSLT injection (25)
│   │   ├── elasticsearch-injection.txt # Elasticsearch (25)
│   │   ├── cypher-injection.txt       # Neo4j/Cypher (22)
│   │   └── couchdb-injection.txt      # CouchDB (4)
│   └── lists/                         # Generated (don't edit, use payloadctl dist)
│       ├── full/                      # Full payload set
│       │   ├── master.txt             # 1,353 payloads with ## headers
│       │   ├── payloads-only.txt      # Raw lines for Burp Intruder
│       │   ├── by-category/           # 20 category files
│       │   ├── by-pillar/             # 5 pillar files (with -payloads-only variants)
│       │   └── encoded/               # 7 encoding variants
│       └── minimal/                   # Minimal payload set (same structure)
│           ├── master.txt             # 83 payloads with ## headers
│           ├── payloads-only.txt      # Raw lines for Burp Intruder
│           ├── by-category/           # 20 category files
│           ├── by-pillar/             # 5 pillar files (with -payloads-only variants)
│           └── encoded/               # 7 encoding variants
│
├── ready/                             # Output from payloadctl prepare (gitignored)
│
└── testbed/                           # Docker validation infrastructure
    ├── testbed                        # CLI: ./testbed up <stack>
    ├── docker-compose.oob.yml         # OOB callback catcher (HTTP 9999, TCP 9998, DNS 5353)
    ├── shared/oob-catcher/            # HTTP + LDAP/binary + raw TCP + DNS callback server
    └── stacks/                        # 35 vulnerable application stacks

Adding Payloads

Add a payload to an existing category

  1. Edit the source file in payloads/sources/. One payload per line under a ##Header## section.
  2. Every payload must produce a detectable signal (error, math 1337, timing >4.5s, OOB, reflection).
  3. Rebuild and validate:
    root@kitploit:~
    ./tools/payloadctl build && ./tools/payloadctl dist
    ./tools/payloadctl validate    # 0 NO-FIRE required
    

Add a new vulnerability category

  1. Create payloads/sources/<category>.txt with ## headers for each pillar (error, math, timing, OOB).
  2. Add the file to tools/cmd_build.py SOURCE_FILES and tools/cmd_dist.py CATEGORY_SOURCES.
  3. Create a testbed stack in testbed/stacks/<category>/ (Dockerfile + server exposing POST /<endpoint> with input=<payload> returning {"output": "...", "error": "...", "time_ms": N}).
  4. Add endpoint routing in tools/cmd_validate.py (ENDPOINTS dict and _get_endpoints() function).

Add a new deserialization framework

  1. Edit tools/generate-deser-final.py - add a function that outputs payloads (error, math, timing, OOB).
  2. Run ./tools/payloadctl generate deser && ./tools/payloadctl build
  3. Add testbed endpoint and routing if needed.

Add a new SSTI engine

  1. Edit payloads/sources/ssti.txt - add ##EngineName (Language) - Pillar## sections. Use language built-ins for timing/OOB.
  2. Add testbed endpoint in the matching ssti-<language> stack.
  3. Add routing in tools/cmd_validate.py ENGINE_MAP.

Payload format rules

  • One payload per line (multi-line YAML uses literal \n)
  • {domain} placeholder for OOB callback URLs
  • 1337 canary for all math payloads
  • ##Header## sections group by category and pillar
  • No duplicates (build step deduplicates automatically)

Validation

The validator tests every payload against real vulnerable applications:

root@kitploit:~
# Start testbeds (Docker required)
cd testbed
./testbed up sqli-sqlite
./testbed up ssti-python
./testbed up deserialization-java
# ... (35 stacks total)

# Run validation
cd ..
./tools/payloadctl validate
# Output: 1,353 FIRE / 0 NO-FIRE / 0 SKIPPED / 1,353 TOTAL

How it works:

  1. Reads the payload file and routes each ## section to matching testbed endpoint(s)
  2. POSTs input=<payload> to endpoint(s), checks response for signals
  3. A payload fires if ANY endpoint returns: real parser/interpreter error, server-computed 1337 (from 7*191), >4.5s delay, OOB callback from target container, file-read content (root:x:0:0), or reflected input in a valid context (XSS, CRLF)

Strict validation (tools/cmd_validate_strict.py) additionally verifies:

  • Math payloads prove server-side computation (payload sends 7*191, not literal 1337)
  • OOB callbacks originate from testbed container IPs
  • Error messages contain real parser/interpreter signatures, not generic HTTP errors
  • Timing delays fall within expected range (~5 seconds)

Testbed stacks (35 total)

OOB catcher on port 9999 (HTTP + LDAP/binary detection) and 9998 (raw TCP catch-all), with DNS on 5353/UDP. Detects HTTP callbacks, LDAP/ASN.1 binary connections (JNDI), DNS queries, and raw TCP connections. Every endpoint accepts POST /<sink> with input=<payload> and returns {"output": "...", "error": "...|null", "time_ms": N}.


Credits

Payloads researched and developed by Grom Hacks. Built on work from the security research community including PayloadsAllTheThings, HackTricks, PortSwigger Web Security Academy, and individual researchers. All payloads validated against real vulnerable applications.

Download Tool
PayloadsCategoryPillars
4SQLierror, math, timing, OOB (cross-dialect polyglots)
4SSTIerror, math, timing, OOB (cross-engine polyglots)
3OS Cmdmath, timing, OOB (cross-shell polyglots)
3Code Injectionmath, timing, OOB (cross-language)
2XSSmath, OOB
2XXEfile-read, OOB
2SSRFerror, OOB
1Path Traversalfile-read
2NoSQLmath, error
1EL Injectionmath
1Prototype Pollutionmath
1CRLF/Headermath
1Format Stringerror
1SSImath
2LDAP Injectionerror, math
3XSLT Injectionerror, math, OOB
2Elasticsearcherror, math
2Cypher/Neo4jerror, timing
1CouchDBerror
3Groovymath, timing, OOB
41Deserializationmulti-pillar where supported, error-only otherwise
Tzo
YTo
  • Target-hint to category matrix - go from "I see id=42 and JSESSIONID" to "try by-category/sqli.txt + Java deserialization + EL injection, watch math pillar" in one lookup.
  • Pillar-selection rules - pick the signal you can actually observe (OOB > math > timing > error > reflected) before you fire, so you never test blind against a channel you can't read.
  • FileWhatCount
    ready/minimal/payloads-only.txtMinimal -- 83 requests, all pillars83
    ready/full/payloads-only.txtFull list, one payload per line1,353
    ready/full/by-category/sqli.txtSQL injection only211
    ready/full/by-category/ssti.txtTemplate injection only206
    ready/full/by-category/deserialization.txtDeserialization only232
    ready/full/by-category/os-cmd-injection.txtOS command injection only120
    ready/full/by-category/code-injection.txtCode injection only123
    ready/full/by-category/ssrf.txtSSRF only156
    ready/full/by-category/path-traversal.txtPath traversal only113
    ready/full/by-category/xss.txtXSS only58
    ready/full/by-category/nosql.txtNoSQL injection only32
    ready/full/by-category/format-string.txtFormat string only38
    ready/full/by-category/el-injection.txtExpression language only34
    ready/full/by-category/header-crlf.txtCRLF/header injection only17
    ready/full/by-category/prototype-pollution.txtPrototype pollution only12
    ready/full/by-category/xxe.txtXXE only11
    ready/full/by-category/ldap-injection.txtLDAP injection only35
    ready/full/by-category/xslt-injection.txtXSLT injection only30
    ready/full/by-category/elasticsearch-injection.txtElasticsearch only30
    ready/full/by-category/cypher-injection.txtNeo4j/Cypher only27
    ready/full/by-category/couchdb-injection.txtCouchDB only5
    ready/full/by-category/polyglots.txtCross-context polyglots246
    ready/full/by-pillar/error-payloads-only.txtError-based payloads324
    ready/full/by-pillar/timing-payloads-only.txtTiming-based (blind)227
    ready/full/by-pillar/oob-payloads-only.txtOut-of-band callback209
    ready/full/by-pillar/math-payloads-only.txtMath canary (1337)182
    ready/full/by-pillar/reflected-payloads-only.txtReflected/edge-case374
    ready/full/encoded/url-encoded/payloads.txtURL-encoded variant1,353
    ready/full/encoded/base64/payloads.txtBase64 variant1,353
    ready/full/encoded/json-safe/payloads.txtJSON-safe variant1,353
    ready/full/encoded/double-url-encoded/payloads.txtDouble URL-encoded1,353
    ready/full/encoded/html-entity/payloads.txtHTML entity encoded1,353
    ready/full/encoded/hex-escaped/payloads.txtHex-escaped variant1,353
    ready/full/encoded/unicode-escaped/payloads.txtUnicode-escaped variant1,353
    PillarPayloadsWhat to look forUse when
    Error324Exception text, stack trace, parser error in responseApp reflects errors
    Timing227Response takes >4.5 secondsBlind - no output, no errors
    OOB209Outbound HTTP/DNS/LDAP/TCP to your callback serverBlind + async - timing unreliable
    Math1821337 literal in response body (server computed 7*191)Output reflected but no errors
    Reflected374Input value echoed back in responseFuzzing for parser anomalies
    File-read(subset)root: or [extensions] content in responsePath traversal, XXE file read
    CategoryCountPillarsCoverage
    SQLi211error, math, timing, oobMySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB. UNION, error, timing, OOB. Context breakouts: ', ", ), )), */, numeric.
    SSTI206error, math, timing, oobJinja2, Mako, Tornado, EJS, Nunjucks, Pug, Twig, Smarty, ERB, Slim, Haml, Thymeleaf, Pebble, Freemarker, Velocity, Razor, Go template, Mustache, Liquid. All use language built-ins.
    Deserialization232error, math, timing, oob31 frameworks / 7 languages. All language-native payloads use built-ins (no shell commands). Python (pickle P0/P2/P4 via time.sleep/builtins.eval/urllib, YAML via time.sleep/builtins.eval, jsonpickle), PHP (unserialize), Node (node-serialize via JS busy-wait/http.get, js-yaml, funcster, cryo), Ruby (YAML, Marshal, Oj), Java (Jackson, Fastjson, XStream, SnakeYAML, XMLDecoder, Hessian, JNDI/Log4Shell, ObjectInputStream, ysoserial URLDNS), .NET (Json.NET, BinaryFormatter, SoapFormatter, XmlSerializer, JavaScriptSerializer, LosFormatter, ViewState, ObjectStateFormatter), Perl (Storable, YAML).
    OS Cmd Injection120error, math, timing, oobBash, CMD, PowerShell. Breakouts: ;, |, ||, &&, $(), backticks. IFS bypass, glob bypass, hex encoding.
    Code Injection123error, math, timing, oobPython, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy. Import-free CPU spin, socket-level OOB.
    SSRF156error, math, timing, oobCloud metadata (AWS/GCP/Azure), IP bypass, protocol schemes, DNS rebinding, internal service probes.
    Path Traversal113error, math, timing, oobLinux + Windows, encoding bypass, null byte, PHP wrappers, UNC, NTFS ADS, 8.3 short names.
    XSS58error, math, oobCross-context polyglots (20+ contexts), event handlers, filter evasion, DOM clobbering, mutation XSS, SVG, OOB.
    Format String38error, mathC/C++ (%s%n%x), Python ({0.__class__}), .NET ({0:X}).
    NoSQL32error, math, timing, oobMongoDB operator injection, $where timing, OOB, Redis commands.
    EL Injection34error, math, timing, oobSpEL, OGNL, MVEL, Unified EL. OOB via java.net.URL.
    CRLF/Header17error, math, oobResponse splitting, header injection, OOB via Host header.
    Prototype Pollution12error, math__proto__, constructor.prototype, JSON and query string variants.
    XXE11error, timing, oob, file-readExternal entities, XInclude, parameter entities, Billion Laughs DoS.
    LDAP Injection35error, math, timing, oobFilter injection, auth bypass, wildcard timing, referral OOB.
    Elasticsearch30error, math, timing, oobPainless script injection, query DSL, query_string syntax.
    Cypher/Neo4j27error, math, timing, oobCypher query injection, APOC sleep, LOAD CSV OOB.
    CouchDB5error, mathMango query injection, operator injection, auth bypass.
    XSLT Injection30error, math, oob, file-readXPath math, document() SSRF, file read, system-property() info leak.
    Polyglots/Edge Cases246error, math, timing, oobCross-context polyglots + buffer overflow, integer boundary, type confusion, null byte.
    EncodingUse case
    URL-encodedStandard query/form parameters
    Double-URL-encodedWAF bypass, double-decode vulns
    Base64API bodies, JWT, serialized params
    JSON-safeJSON request bodies (escaped quotes)
    HTML entityHTML attribute injection
    Hex-escapedBinary protocols, low-level injection
    Unicode-escapedUnicode normalization bypass
    LanguageOOB Built-inTiming Built-in
    Pythonurllib.request.urlopen()time.sleep(5)
    Javajava.net.URL.openStream()Thread.sleep(5000)
    Noderequire('http').get()Date.now() busy-wait loop
    PHPfile_get_contents(), fsockopen()sleep(5)
    RubyNet::HTTP.get(), TCPSocket.new()sleep(5)
    PerlIO::Socket::INETselect(undef,undef,undef,5)
    .NETSystem.Net.WebClientThread.Sleep(5000)

    Shell commands (curl, nslookup) depend on OS and PATH. Built-ins work everywhere.

  • Import-free where possible. CPU spin timing works even when imports are blocked:

    • Python: sum(range(500000000)) (~7s, no imports)
    • Node: Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5000) (precise 5s)
    • Ruby: 99999999.times{1+1}
  • Socket-level OOB as fallback. When HTTP libraries are blocked: __import__('socket').create_connection(), fsockopen(), TCPSocket.new(), new java.net.Socket().

  • Validate: ./tools/payloadctl validate
  • StackPortLanguageEndpoints
    sqli-sqlite8001Python/sqli, /sqli-numeric
    sqli-postgres8030Python/sqli
    ssti-python8003Python/jinja2, /mako, /tornado
    ssti-node8011Node/ejs, /nunjucks, /pug
    ssti-php8020PHP/twig, /smarty
    ssti-ruby8025Ruby/erb, /slim, /haml
    ssti-java8040Java/freemarker, /velocity, /pebble, /thymeleaf
    os-cmd-injection8002Python/system, /popen
    code-injection-python8004Python/eval
    code-injection-node8012Node/eval
    code-injection-php8021PHP/eval
    code-injection-ruby8026Ruby/eval, /yaml, /marshal, /oj
    code-injection-perl8031Perl/eval, /storable, /yaml
    xss8010Node/reflected
    xxe8008Python/parse, /xinclude
    ssrf8007Python/fetch
    path-traversal8006Python/read
    nosql-redis8015Node/eval
    el-injection-java8041Java/spel, /ognl
    prototype-pollution8013Node/merge
    deserialization-python8005Python/pickle, /yaml, /jsonpickle
    deserialization-node8014Node/unserialize, /yaml, /funcster
    deserialization-php8022PHP/unserialize, /unserialize-b64, /phar
    deserialization-java8042Java/deserialize, /yaml, /jackson, /fastjson, /xstream, /xmldecoder, /hessian
    deserialization-dotnet8045.NET/jsonnet, /binaryformatter, /xmlserializer, /losformatter, /javascriptserializer
    log4j-jndi8046Java/log
    sqli-mysql8050Python/sqli, /sqli-numeric
    nosql-mongo8051Node/find, /where, /aggregate
    ssi-esi8035Python/ssi
    ldap-injection8055Python + OpenLDAP/search, /auth
    xslt-injection8056Python/transform, /xpath
    elasticsearch8057Python + ES 7.17/search, /script
    cypher-injection8058Python + Neo4j 5/query, /search
    couchdb-injection8059Python + CouchDB 3/find
    groovy-injection8060Groovy/JDK 21/eval