Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Payload-and-Polyglot-Lists — GromHacks Labs -- Die Payload-Listen, die sie dir nicht geben wollen. 1.324 Injektionssonden, die vom Mutterschiff herabgestrahlt werden, um zu erkennen, was über 20 Schwachstellenklassen hinweg injizierbar ist. Wir nutzen nichts aus, wir klopfen nur an die Tür und schauen, wer antwortet. Jede Payload wird an echten Parsern getestet, weil die Aliens Beweise fordern. Vertraue keiner Eingabe. Stelle alles in Frage! | Kitploit
Tools/GitHubGitHub/gromhacks/payload-and-polyglot-lists
OSINT (Open-Source-Intelligence)Payload-GenerierungSchwachstellenanalyseWebanwendungs-ExploitationFuzzingPenetrationstestsLernen & Bildung
GitHubgromhacks/payload-and-polyglot-lists

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

GromHacks Labs -- Die Payload-Listen, die sie dir nicht geben wollen. 1.324 Injektionssonden, die vom Mutterschiff herabgestrahlt werden, um zu erkennen, was über 20 Schwachstellenklassen hinweg injizierbar ist. Wir nutzen nichts aus, wir klopfen nur an die Tür und schauen, wer antwortet. Jede Payload wird an echten Parsern getestet, weil die Aliens Beweise fordern. Vertraue keiner Eingabe. Stelle alles in Frage!

Payload-and-Polyglot-Lists

Repository anzeigen
369vor 4 MonatenVon Kitploit geprüft
Teilen

Payload- und Polyglot-Listen

Haben Sie einen Payload gefunden, der nicht funktioniert? Bitte eröffnen Sie ein Issue mit dem Payload, dem Zielkontext und dem erwarteten Verhalten. Pull-Requests mit Korrekturen oder neuen Payloads sind immer willkommen.

Die Forschung läuft weiter. Dieses Projekt befindet sich in aktiver Entwicklung und wird regelmäßig mit neuen Payloads, Schwachstellenklassen und Validierungsverbesserungen aktualisiert.

Haftungsausschluss: Diese Payloads sind ausschließlich für autorisierte Sicherheitstests, Schulungen und Forschungszwecke vorgesehen. Die Autoren übernehmen keinerlei Verantwortung oder Haftung für Missbrauch oder daraus resultierende Folgen. Die Nutzung erfolgt vollständig auf eigenes Risiko. Mit der Nutzung dieses Projekts übernehmen Sie die volle Verantwortung für Ihr Handeln.

Lizenz: MIT – siehe LICENSE

1.353 validierte Injektions-Payloads, die 20 Schwachstellenklassen, 31 Deserialisierungs-Frameworks und 14 Template-Engines abdecken. Jeder Payload erzeugt ein detektierbares Signal. Null theoretische Payloads.

Validierung: 1.353 getestet / 1.353 feuern / 0 Fehlschläge / 0 übersprungen gegen 35 Docker-Testumgebungen. Strikte Validierung beweist tatsächliche Ausnutzung (serverseitige Berechnung, echte Parserfehler, gemessene Zeitverzögerungen, OOB-Callbacks von Zielcontainern) – kein Zeichenkettenabgleich.


Konzept

Das Problem mit traditionellen Payload-Listen

Die meisten öffentlich verfügbaren Payload-Listen sind nach Schwachstellentyp organisiert: eine Liste für SQL-Injektion, eine andere für XSS, eine weitere für Befehlsinjektion und so weiter. Ein Tester wählt die Liste aus, von der er glaubt, dass sie zum Ziel passt, lädt sie in ein Intruder-Tool und führt sie gegen einen Parameter aus. Wenn er sich bei der Schwachstellenklasse irrt, liefert der gesamte Scan nichts. Wenn das Backend eine ungewöhnliche Datenbank, eine nicht standardmäßige Template-Engine oder eine Sprache ist, die in der Liste nicht berücksichtigt wurde, schlagen die Payloads stillschweigend fehl. Der Tester geht weiter und hält den Parameter für sauber.

Dieser Ansatz hat zwei grundlegende Probleme. Erstens erfordert er, dass der Tester weiß, welche Schwachstelle existiert, bevor er sie gefunden hat. Zweitens sind die meisten in Umlauf befindlichen Payloads theoretisch – sie werden zwischen Projekten und Blogbeiträgen kopiert, ohne jemals gegen einen echten Parser getestet zu werden. Sie sehen richtig aus. Sie könnten sogar syntaktisch gültig sein. Aber sie lösen tatsächlich keine detektierbare Antwort des Ziels aus.

Polyglot-first, Signal-Garantie

Dieses Projekt verfolgt einen anderen Ansatz. Die primäre Arbeitseinheit ist der Polyglot – eine einzelne Payload-Zeichenfolge, die so konstruiert ist, dass sie in möglichst vielen Injektionskontexten gleichzeitig gültig (oder bedeutungsvoll ungültig) ist. Ein einziger Polyglot bricht aus einfachen Anführungszeichen, doppelten Anführungszeichen, Klammern, Blockkommentaren, HTML-Attributen, Template-Begrenzern und Backtick-Kontexten gleichzeitig aus. Anstatt zu wissen, was die Schwachstelle ist, schießt der Tester Polyglots auf jeden Parameter und beobachtet die Signale.

Jeder Payload in dieser Sammlung basiert auf Erkennungssäulen – beobachtbaren Antworten, die bestätigen, dass eine Schwachstelle existiert, ohne dass Zugriff auf Serverlogs, Quellcode oder das Dateisystem erforderlich ist:

  • Fehler: Der Payload verursacht eine Ausnahme, einen Parserfehler oder einen Stacktrace, der in der Antwort sichtbar ist.
  • Mathe: Der Payload enthält einen arithmetischen Ausdruck wie 7*191, der zu 1337 ausgewertet wird. Wenn diese Zahl in der Antwort erscheint und der Payload nur 7*191 (nicht den Literal 1337) gesendet hat, hat das Backend den Ausdruck berechnet – ein Beweis für Codeausführung.
  • Timing: Der Payload erzwingt eine Verzögerung (5+ Sekunden). Wenn die Antwort langsam ist, hat das Backend einen Schlaf- oder CPU-intensiven Vorgang ausgeführt.
  • OOB (Out-of-Band): Der Payload zwingt das Backend, eine ausgehende HTTP-, DNS-, LDAP- oder TCP-Verbindung zu einem vom Tester kontrollierten Callback-Server herzustellen. Bestätigt die Ausführung, selbst wenn die Antwort völlig undurchsichtig ist.

Wenn ein Payload mindestens eines dieser Signale im Test gegen seinen Zielkontext nicht erzeugt, gehört er nicht in die Liste. Jeder der 1.353 Payloads hier wurde gegen eigens erstellte Docker-Testumgebungen mit strengem Nachweis der Ausnutzung validiert. Keiner ist theoretisch.

Built-ins statt Shell-Befehle

Traditionelle OOB- und Timing-Payloads verlassen sich auf Shell-Befehle: curl, nslookup, ping, sleep. Diese versagen ständig. Sie hängen vom Zielbetriebssystem, dem verfügbaren PATH, der Shell, die den Befehl interpretiert, und davon ab, ob der Prozess die Berechtigung zum Erstellen von Unterprozessen hat. Ein curl-basierter OOB-Payload, der auf Ubuntu funktioniert, schlägt auf Alpine (kein curl), auf Windows (kein curl) und innerhalb eines eingeschränkten Containers (keine ausgehende Prozessausführung) fehl.

Dieses Projekt ersetzt Shell-Befehle nach Möglichkeit durch sprachspezifische Built-ins. Python-Payloads verwenden urllib.request.urlopen() und time.sleep(). Java-Payloads verwenden java.net.URL.openStream() und Thread.sleep(). Ruby verwendet Net::HTTP.get() und Kernel.sleep. PHP verwendet file_get_contents() und sleep(). Diese Funktionen sind in jeder Standardinstallation ihrer jeweiligen Sprache vorhanden – kein PATH-Lookup, kein Unterprozess, keine Betriebssystemabhängigkeit.

Wo selbst Standardbibliotheksimporte blockiert sein könnten (Sandbox-Eval, eingeschränktes Exec), greifen die Payloads auf import-freie Alternativen zurück: CPU-Spin-Loops für Timing (sum(range(500000000)) in Python, Atomics.wait() in Node) und direkte Socket-Verbindungen für OOB (__import__('socket').create_connection(), fsockopen(), TCPSocket.new()).

Wo Polyglots nicht hinkommen

Nicht alles kann ein Polyglot sein. Template-Engines verwenden grundlegend inkompatible Syntax – {{}} in Jinja2 bedeutet nichts für ERBs <%= %>, und beides wird nicht als Freemarker-${} geparst). Deserialisierungsformate sind binär oder strukturierte Daten, die für ein bestimmtes Framework spezifisch sind. Für diese Kategorien verwendet das Projekt pro-Engine-Payloads, die unter demselben Erkennungssäulen-System organisiert sind und 14 Template-Engines und 31 Deserialisierungs-Frameworks in 7 Sprachen abdecken.

Das Ergebnis ist ein einzelnes Korpus, in dem Polyglots die Kontexte abdecken, die sie können (SQLi, OS-Befehlsinjektion, XSS, Code-Injektion), und speziell entwickelte pro-Engine-Payloads den Rest, alle validiert, alle erzeugen detektierbare Signale, alle bereit für zeilenweise Injektionswerkzeuge.


Minimal-Liste (82 Payloads)

83 Payloads decken alle 35 Testumgebungen, alle 55+ Endpunkte und alle 4 Erkennungssäulen pro Kategorie ab. Validierung: 83 FEUERN / 0 NICHT-FEUERN / 0 ÜBERSPRUNGEN.

Jede Injektionskategorie erhält, wo architektonisch möglich, Fehler- + Mathe- + Timing- + OOB-Abdeckung. Deserialisierungs-Frameworks, die Codeausführung unterstützen (Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET), erhalten vollständige Multi-Säulen-Abdeckung. Frameworks, die auf Sondierung beschränkt sind (PHP unserialize, Ruby Marshal, SnakeYAML usw.), erhalten fehlerbasierte Erkennung. Feuern Sie diese Liste auf jeden Parameter, bevor Sie für die Tiefe zu den vollständigen Kategorielisten übergehen.

83 Anfragen statt 1.353. Verwenden Sie ready/minimal/payloads-only.txt für Burp Intruder.


Die richtigen Payloads für ein Ziel auswählen

Siehe HOWTOUSE.md für die vollständige Bedienungsanleitung. Sie verwandelt „Ich schaue mir einen Parameter an, was werfe ich darauf?“ in einen wiederholbaren Arbeitsablauf:

  1. Parameter- und Kontextprofilierung – 5 Fragen (Werteform, Stack-Fingerprint, Sichtbarkeit der Antwort, OOB-Verfügbarkeit, WAF), die Kategorien reduzieren, bevor Sie einen einzigen Payload feuern.
  2. Kategorie-für-Kategorie „Wann es vermuten“ – erschöpfende, produktionsorientierte Hinweise für alle 20 Kategorien. Jede Kategorie listet reale SaaS-Funktionsarten (Low-Code-Plattformen, BI/Reporting, Monitoring, Workflow-Automatisierung, SSO, SSRF-Abrufer, Eval-Sinks, E-Mail-Template-Builder usw.), visuelle und verhaltensbezogene Hinweise (7*7 gibt 49 als Eval-Hinweis zurück, {{name}} rendert als „Alice“ bestätigt SSTI, Ping-Ausgabe aus einem Diagnosefeld, User-Agent-Strings in OOB-Logs nennen die Abrufbibliothek), moderne-Stack-ORM-Fallstricke (Prisma $queryRaw, Rails .order(), Hibernate JPQL Concat, Mongoose findOne(req.body)) und günstige Sonden, um den Verdacht zu bestätigen, bevor Sie die vollständige Liste abfeuern.
  3. Gefährliche Serialisierungs-Byte-Fingerabdrücke – rohe Magic-Bytes und Base64-Präfixe für 31 Frameworks in Python, PHP, Java, .NET, Node, Ruby und Perl (rO0AB = Java, AAEAAAD///// = .NET BinaryFormatter, BAg = Ruby Marshal, gASV = Python pickle P4, / = PHP unserialize usw.) mit einer 16-Einträge-Spickzettel-Cheat-Karte und Disambiguierungsheuristiken. Fingerprinten Sie den Blob, bevor Sie feuern, sodass Sie 5-15 passende Payloads laden statt aller 232.

Verwenden Sie HOWTOUSE.md, bevor Sie payloadctl prepare ausführen. Zuerst Fingerabdruck, dann Minimal-Liste, dann Kategorie-Tiefenbohrung – keine Schrotflinte mit 1.353 Payloads auf jeden Parameter.


Schnellstart```bash

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)

root@kitploit:~
Nach Ausführung von `prepare` befinden sich Ihre einsatzbereiten Dateien in `ready/full/` und `ready/minimal/` mit folgender Struktur:

| Datei | Beschreibung | Anzahl |
|------|------|-------|
| `ready/minimal/payloads-only.txt` | **Minimal – 83 Anfragen, alle Säulen** | 83 |
| `ready/full/payloads-only.txt` | Vollständige Liste, ein Payload pro Zeile | 1,353 |
| `ready/full/by-category/sqli.txt` | Nur SQL-Injection | 211 |
| `ready/full/by-category/ssti.txt` | Nur Template-Injection | 206 |
| `ready/full/by-category/deserialization.txt` | Nur Deserialisierung | 232 |
| `ready/full/by-category/os-cmd-injection.txt` | Nur OS-Befehlsinjektion | 120 |
| `ready/full/by-category/code-injection.txt` | Nur Code-Injection | 123 |
| `ready/full/by-category/ssrf.txt` | Nur SSRF | 156 |
| `ready/full/by-category/path-traversal.txt` | Nur Path Traversal | 113 |
| `ready/full/by-category/xss.txt` | Nur XSS | 58 |
| `ready/full/by-category/nosql.txt` | Nur NoSQL-Injection | 32 |
| `ready/full/by-category/format-string.txt` | Nur Format String | 38 |
| `ready/full/by-category/el-injection.txt` | Nur Expression Language | 34 |
| `ready/full/by-category/header-crlf.txt` | Nur CRLF/Header-Injection | 17 |
| `ready/full/by-category/prototype-pollution.txt` | Nur Prototype Pollution | 12 |
| `ready/full/by-category/xxe.txt` | Nur XXE | 11 |
| `ready/full/by-category/ldap-injection.txt` | Nur LDAP-Injection | 35 |
| `ready/full/by-category/xslt-injection.txt` | Nur XSLT-Injection | 30 |
| `ready/full/by-category/elasticsearch-injection.txt` | Nur Elasticsearch | 30 |
| `ready/full/by-category/cypher-injection.txt` | Nur Neo4j/Cypher | 27 |
| `ready/full/by-category/couchdb-injection.txt` | Nur CouchDB | 5 |
| `ready/full/by-category/polyglots.txt` | Kontextübergreifende Polyglots | 246 |
| `ready/full/by-pillar/error-payloads-only.txt` | Fehlerbasierte Payloads | 324 |
| `ready/full/by-pillar/timing-payloads-only.txt` | Zeitbasierte (Blind) | 227 |
| `ready/full/by-pillar/oob-payloads-only.txt` | Out-of-Band Callback | 209 |
| `ready/full/by-pillar/math-payloads-only.txt` | Mathematische Canary (1337) | 182 |
| `ready/full/by-pillar/reflected-payloads-only.txt` | Reflektierte/Grenzfälle | 374 |
| `ready/full/encoded/url-encoded/payloads.txt` | URL-kodierte Variante | 1,353 |
| `ready/full/encoded/base64/payloads.txt` | Base64-Variante | 1,353 |
| `ready/full/encoded/json-safe/payloads.txt` | JSON-sichere Variante | 1,353 |
| `ready/full/encoded/double-url-encoded/payloads.txt` | Doppelt URL-kodiert | 1,353 |
| `ready/full/encoded/html-entity/payloads.txt` | HTML-Entity-kodiert | 1,353 |
| `ready/full/encoded/hex-escaped/payloads.txt` | Hex-escaped Variante | 1,353 |
| `ready/full/encoded/unicode-escaped/payloads.txt` | Unicode-escaped Variante | 1,353 |

Das Verzeichnis `ready/minimal/` spiegelt die gleiche Struktur (by-category, by-pillar, encoded) mit dem minimalen Payload-Satz wider.

Benutzerdefiniertes Ausgabeverzeichnis:```bash
./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/.


Erkennungssäulen

Jeder Payload erzeugt mindestens eines dieser Signale. Suchen Sie mit grep in Ihren Antworten danach:

Canary-Werte: 1337 (primär, aus 7*191) und 7331 (sekundär). Erkennung ist ein einfaches grep.


Payload-Abdeckung

Nach Schwachstellenklasse

13 von 20 Kategorien haben alle 4 Säulen. Die 7, die das nicht haben (XSS, XSLT, Format String, Prototype Pollution, CRLF, XXE, CouchDB), haben architektonische Gründe – Sie können kein Timing-basiertes CRLF oder OOB-Format-Strings durchführen. Wo säulenübergreifende Erkennung möglich ist, wird sie im Polyglots-Abschnitt abgedeckt.

Kodierte Varianten


Design-Prinzipien

Minimale Payloads, maximale Kontextabdeckung. Siehe SPEC.md für die vollständige technische Spezifikation mit enginespezifischen Säulentabellen und genauer Payload-Syntax.

  1. Polyglots zuerst. Ein einziger Payload bricht gleichzeitig aus ', ", ), */, -->, Backticks und Template-Trennzeichen aus. Polyglot-Abschnitte führen die Masterliste an.

  2. Pro Engine, wo Polyglots nicht hinreichen. SSTI-Trennzeichen und Deserialisierungsformate sind grundsätzlich enginespezifisch inkompatibel.

  3. Built-in vor Shell. OOB- und Timing-Payloads verwenden spracheigene Bibliotheken:


CLI-Tool (payloadctl)```bash

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 # 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

root@kitploit:~
### Typischer Entwicklungsablauf```bash
# 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-Struktur```

. ├── 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 ├── 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

root@kitploit:~
---

## Hinzufügen von Payloads

### Hinzufügen einer Payload zu einer bestehenden Kategorie

1. Bearbeiten Sie die Quelldatei in `payloads/sources/`. Eine Payload pro Zeile unter einem `##Header##`-Abschnitt.
2. Jede Payload muss ein nachweisbares Signal erzeugen (Fehler, math 1337, Zeit >4.5s, OOB, Reflexion).
3. Neu erstellen und validieren:   ```bash
   ./tools/payloadctl build && ./tools/payloadctl dist
   ./tools/payloadctl validate    # 0 NO-FIRE required

Neue Sicherheitslücken-Kategorie hinzufügen

  1. Erstelle payloads/sources/<category>.txt mit ##-Überschriften für jeden Pfeiler (error, math, timing, OOB).
  2. Füge die Datei zu tools/cmd_build.py SOURCE_FILES und tools/cmd_dist.py CATEGORY_SOURCES hinzu.
  3. Erstelle einen Testbed-Stack in testbed/stacks/<category>/ (Dockerfile + Server, der POST /<endpoint> mit input=<payload> bereitstellt und {"output": "...", "error": "...", "time_ms": N} zurückgibt).
  4. Füge Endpunkt-Routing in tools/cmd_validate.py hinzu (ENDPOINTS-Dict und _get_endpoints()-Funktion).

Neues Deserialisierungs-Framework hinzufügen

  1. Bearbeite tools/generate-deser-final.py – füge eine Funktion hinzu, die Payloads (error, math, timing, OOB) ausgibt.
  2. Führe ./tools/payloadctl generate deser && ./tools/payloadctl build aus
  3. Füge bei Bedarf Testbed-Endpoint und Routing hinzu.

Neue SSTI-Engine hinzufügen

  1. Bearbeite payloads/sources/ssti.txt – füge ##EngineName (Sprache) - Pillar##-Abschnitte hinzu. Verwende sprachinterne Funktionen für timing/OOB.
  2. Füge Testbed-Endpoint im passenden ssti-<Sprache>-Stack hinzu.
  3. Füge Routing in tools/cmd_validate.py ENGINE_MAP hinzu.

Payload-Format-Regeln

  • Ein Payload pro Zeile (mehrzeiliges YAML verwendet wörtliches \n)
  • {domain}-Platzhalter für OOB-Callback-URLs
  • 1337-Canary für alle Math-Payloads
  • ##Header##-Abschnitte gruppieren nach Kategorie und Pfeiler
  • Keine Duplikate (Build-Schritt dedupliziert automatisch)

Validierung

Der Validator testet jeden Payload gegen echte anfällige Anwendungen:```bash

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

root@kitploit:~
So funktioniert es:
1. Liest die Payload-Datei ein und leitet jede `##`-Sektion an passende Testbed-Endpunkte weiter
2. Sendet `input=<payload>` per POST an die Endpunkte und prüft die Antwort auf Signale
3. Ein Payload feuert, wenn IRGENDEIN Endpunkt zurückgibt: echten Parser/Interpreter-Fehler, server-seitig berechnetes `1337` (aus `7*191`), >4.5s Verzögerung, OOB-Callback vom Zielcontainer, Datei-Lese-Inhalt (`root:x:0:0`) oder reflektierte Eingabe in einem gültigen Kontext (XSS, CRLF)

Strenge Validierung (`tools/cmd_validate_strict.py`) überprüft zusätzlich:
- Mathe-Payloads beweisen serverseitige Berechnung (Payload sendet `7*191`, nicht literal `1337`)
- OOB-Callbacks stammen von den IPs der Testbed-Container
- Fehlermeldungen enthalten echte Parser/Interpreter-Signaturen, keine generischen HTTP-Fehler
- Zeitverzögerungen liegen im erwarteten Bereich (~5 Sekunden)

### Testbed-Stacks (insgesamt 35)

| Stack | Port | Sprache | Endpunkte |
|-------|------|----------|-----------|
| sqli-sqlite | 8001 | Python | `/sqli`, `/sqli-numeric` |
| sqli-postgres | 8030 | Python | `/sqli` |
| ssti-python | 8003 | Python | `/jinja2`, `/mako`, `/tornado` |
| ssti-node | 8011 | Node | `/ejs`, `/nunjucks`, `/pug` |
| ssti-php | 8020 | PHP | `/twig`, `/smarty` |
| ssti-ruby | 8025 | Ruby | `/erb`, `/slim`, `/haml` |
| ssti-java | 8040 | Java | `/freemarker`, `/velocity`, `/pebble`, `/thymeleaf` |
| os-cmd-injection | 8002 | Python | `/system`, `/popen` |
| code-injection-python | 8004 | Python | `/eval` |
| code-injection-node | 8012 | Node | `/eval` |
| code-injection-php | 8021 | PHP | `/eval` |
| code-injection-ruby | 8026 | Ruby | `/eval`, `/yaml`, `/marshal`, `/oj` |
| code-injection-perl | 8031 | Perl | `/eval`, `/storable`, `/yaml` |
| xss | 8010 | Node | `/reflected` |
| xxe | 8008 | Python | `/parse`, `/xinclude` |
| ssrf | 8007 | Python | `/fetch` |
| path-traversal | 8006 | Python | `/read` |
| nosql-redis | 8015 | Node | `/eval` |
| el-injection-java | 8041 | Java | `/spel`, `/ognl` |
| prototype-pollution | 8013 | Node | `/merge` |
| deserialization-python | 8005 | Python | `/pickle`, `/yaml`, `/jsonpickle` |
| deserialization-node | 8014 | Node | `/unserialize`, `/yaml`, `/funcster` |
| deserialization-php | 8022 | PHP | `/unserialize`, `/unserialize-b64`, `/phar` |
| deserialization-java | 8042 | Java | `/deserialize`, `/yaml`, `/jackson`, `/fastjson`, `/xstream`, `/xmldecoder`, `/hessian` |
| deserialization-dotnet | 8045 | .NET | `/jsonnet`, `/binaryformatter`, `/xmlserializer`, `/losformatter`, `/javascriptserializer` |
| log4j-jndi | 8046 | Java | `/log` |
| sqli-mysql | 8050 | Python | `/sqli`, `/sqli-numeric` |
| nosql-mongo | 8051 | Node | `/find`, `/where`, `/aggregate` |
| ssi-esi | 8035 | Python | `/ssi` |
| ldap-injection | 8055 | Python + OpenLDAP | `/search`, `/auth` |
| xslt-injection | 8056 | Python | `/transform`, `/xpath` |
| elasticsearch | 8057 | Python + ES 7.17 | `/search`, `/script` |
| cypher-injection | 8058 | Python + Neo4j 5 | `/query`, `/search` |
| couchdb-injection | 8059 | Python + CouchDB 3 | `/find` |
| groovy-injection | 8060 | Groovy/JDK 21 | `/eval` |

OOB-Catcher auf Port 9999 (HTTP + LDAP/Binary-Erkennung) und 9998 (roher TCP-Catch-All), mit DNS auf 5353/UDP. Erkennt HTTP-Callbacks, LDAP/ASN.1-Binärverbindungen (JNDI), DNS-Abfragen und rohe TCP-Verbindungen. Jeder Endpunkt akzeptiert `POST /<sink>` mit `input=<payload>` und gibt `{"output": "...", "error": "...|null", "time_ms": N}` zurück.

---

## Danksagungen

Payloads erforscht und entwickelt von [Grom Hacks](https://github.com/gromhacks). Basiert auf Arbeiten der Sicherheitsforschungsgemeinschaft, einschließlich PayloadsAllTheThings, HackTricks, PortSwigger Web Security Academy und einzelner Forscher. Alle Payloads wurden gegen reale anfällige Anwendungen validiert.
Tool herunterladen
PayloadsKategorieSäulen
4SQLiFehler, Mathe, Timing, OOB (dialektübergreifende Polyglots)
4SSTIFehler, Mathe, Timing, OOB (engineübergreifende Polyglots)
3OS-BefehlMathe, Timing, OOB (shellübergreifende Polyglots)
3Code-InjektionMathe, Timing, OOB (sprachübergreifend)
2XSSMathe, OOB
2XXEDatei-Lesen, OOB
2SSRFFehler, OOB
1Path TraversalDatei-Lesen
2NoSQLMathe, Fehler
1EL-InjektionMathe
1Prototype PollutionMathe
1CRLF/HeaderMathe
1Format StringFehler
1SSIMathe
2LDAP-InjektionFehler, Mathe
3XSLT-InjektionFehler, Mathe, OOB
2ElasticsearchFehler, Mathe
2Cypher/Neo4jFehler, Timing
1CouchDBFehler
3GroovyMathe, Timing, OOB
41DeserialisierungMulti-Säule wo unterstützt, sonst nur Fehler
Tzo
YTo
  • Zielhinweis-zu-Kategorie-Matrix – von „Ich sehe id=42 und JSESSIONID“ zu „versuchen Sie by-category/sqli.txt + Java-Deserialisierung + EL-Injektion, achten Sie auf Mathe-Säule“ in einer Suche.
  • Säulenauswahlregeln – wählen Sie das Signal, das Sie tatsächlich beobachten können (OOB > Mathe > Timing > Fehler > reflektiert), bevor Sie feuern, sodass Sie niemals blind gegen einen nicht lesbaren Kanal testen.
  • SäulePayloadsWorauf achtenVerwenden, wenn
    Fehler324Ausnahmetext, Stacktrace, Parserfehler in der AntwortApp gibt Fehler zurück
    Timing227Antwort dauert >4,5 SekundenBlind – keine Ausgabe, keine Fehler
    OOB209Ausgehendes HTTP/DNS/LDAP/TCP zu Ihrem Callback-ServerBlind + asynchron – Timing unzuverlässig
    Mathe1821337 wörtlich im Antworttext (Server berechnete 7*191)Ausgabe wird reflektiert, aber keine Fehler
    Reflektiert374Eingabewert wird in der Antwort zurückgegebenFuzzing auf Parser-Anomalien
    Datei-Lesen(Teilmenge)root: oder [extensions]-Inhalt in der AntwortPath Traversal, XXE Datei-Lesen
    KategorieAnzahlSäulenAbdeckung
    SQLi211error, math, timing, oobMySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB. UNION, error, timing, OOB. Kontextausbrüche: ', ", ), )), */, numerisch.
    SSTI206error, math, timing, oobJinja2, Mako, Tornado, EJS, Nunjucks, Pug, Twig, Smarty, ERB, Slim, Haml, Thymeleaf, Pebble, Freemarker, Velocity, Razor, Go template, Mustache, Liquid. Alle verwenden Sprach-Built-ins.
    Deserialisierung232error, math, timing, oob31 Frameworks / 7 Sprachen. Alle spracheigenen Payloads verwenden Built-ins (keine Shell-Befehle). 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-Befehlseinschleusung120error, math, timing, oobBash, CMD, PowerShell. Ausbrüche: ;, |, ||, &&, $(), Backticks. IFS-Bypass, Glob-Bypass, Hex-Kodierung.
    Code-Injection123error, math, timing, oobPython, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy. Import-freie CPU-Spin, Socket-Level-OOB.
    SSRF156error, math, timing, oobCloud-Metadaten (AWS/GCP/Azure), IP-Bypass, Protokoll-Schemata, DNS-Rebinding, interne Service-Probes.
    Path Traversal113error, math, timing, oobLinux + Windows, Kodierungs-Bypass, Nullbyte, PHP-Wrapper, UNC, NTFS ADS, 8.3-Kurznamen.
    XSS58error, math, oobKontextübergreifende Polyglots (20+ Kontexte), Event-Handler, Filterumgehung, DOM-Clobbering, Mutations-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-Befehle.
    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- und Query-String-Varianten.
    XXE11error, timing, oob, file-readExterne Entitäten, XInclude, Parameter-Entitäten, 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-Mathe, document()-SSRF, Datei-Lesen, system-property()-Info-Leak.
    Polyglots/Grenzfälle246error, math, timing, oobKontextübergreifende Polyglots + Pufferüberlauf, Integer-Grenze, Typkonfusion, Nullbyte.
    KodierungAnwendungsfall
    URL-kodiertStandard-Query-/Formularparameter
    Doppelt URL-kodiertWAF-Bypass, Double-Decode-Schwachstellen
    Base64API-Bodies, JWT, serialisierte Parameter
    JSON-sicherJSON-Anfragekörper (escaped Anführungszeichen)
    HTML-EntitätHTML-Attribut-Injection
    Hex-escapedBinärprotokolle, Low-Level-Injection
    Unicode-escapedUnicode-Normalisierungs-Bypass
    SpracheOOB-Built-inTiming-Built-in
    Pythonurllib.request.urlopen()time.sleep(5)
    Javajava.net.URL.openStream()Thread.sleep(5000)
    Noderequire('http').get()Date.now()-Busy-Wait-Schleife
    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-Befehle (curl, nslookup) sind abhängig vom Betriebssystem und PATH. Built-ins funktionieren überall.

  • Import-frei wo möglich. CPU-Spin-Timing funktioniert auch, wenn Imports blockiert sind:

    • 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 als Fallback. Wenn HTTP-Bibliotheken blockiert sind: __import__('socket').create_connection(), fsockopen(), TCPSocket.new(), new java.net.Socket().

  • Validiere: ./tools/payloadctl validate