Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Payload-and-Polyglot-Lists — GromHacks Labs -- Le liste di payload che non vogliono farti avere. 1.324 sonde di iniezione trasmesse dalla nave madre per rilevare cosa è iniettabile in 20 classi di vulnerabilità. Non sfruttiamo, bussiamo solo alla porta e vediamo chi risponde. Ogni payload testato su parser reali perché gli alieni esigono prove. Non fidarti di nessun input. Metti tutto in discussione! | Kitploit
Strumenti/GitHubGitHub/gromhacks/payload-and-polyglot-lists
OSINT (Open Source Intelligence)Generazione di PayloadAnalisi delle VulnerabilitàSfruttamento di Applicazioni WebFuzzingPenetration TestingApprendimento e Formazione
GitHubgromhacks/payload-and-polyglot-lists

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

Informazioni

Payload-and-Polyglot-Lists

Vedi Repository
3694 mesi faRevisionato da Kitploit

GromHacks Labs -- Le liste di payload che non vogliono farti avere. 1.324 sonde di iniezione trasmesse dalla nave madre per rilevare cosa è iniettabile in 20 classi di vulnerabilità. Non sfruttiamo, bussiamo solo alla porta e vediamo chi risponde. Ogni payload testato su parser reali perché gli alieni esigono prove. Non fidarti di nessun input. Metti tutto in discussione!

Condividi

Elenchi di Payload e Poliglotti

Trovato un payload che non funziona? Per favore apri una segnalazione con il payload, il contesto di destinazione e cosa ti aspettavi accadesse. Le richieste pull con correzioni o nuovi payload sono sempre benvenute.

La ricerca è in corso. Questo progetto è in fase di sviluppo attivo e verrà aggiornato regolarmente con nuovi payload, classi di vulnerabilità e miglioramenti nella validazione.

Disclaimer: Questi payload sono forniti esclusivamente per test di sicurezza autorizzati, formazione e scopi di ricerca. Gli autori non si assumono alcuna responsabilità per eventuali usi impropri o effetti indiretti. Utilizzare interamente a proprio rischio. Utilizzando questo progetto accetti la piena responsabilità per le tue azioni.

Licenza: MIT - vedi LICENSE

1.353 payload di injection validati che coprono 20 classi di vulnerabilità, 31 framework di deserializzazione e 14 motori di template. Ogni payload produce un segnale rilevabile. Zero payload teorici.

Validazione: 1.353 testati / 1.353 attivi / 0 fallimenti / 0 saltati contro 35 stack di test Docker. La validazione rigorosa dimostra lo sfruttamento effettivo (calcolo lato server, errori reali del parser, ritardi di temporizzazione misurati, callback OOB dai container target) — non semplice corrispondenza di stringhe.


Concetto

Il Problema con le Liste Tradizionali di Payload

La maggior parte delle liste di payload disponibili pubblicamente sono organizzate per tipo di vulnerabilità: una lista per SQL injection, un'altra per XSS, un'altra per command injection, e così via. Un tester sceglie la lista che pensa corrisponda al target, la carica in uno strumento di intrusione e la esegue contro un parametro. Se sbaglia a indovinare la classe di vulnerabilità, l'intera scansione non produce nulla. Se il backend è un database insolito, un motore di template non standard o un linguaggio che la lista non ha considerato, i payload falliscono silenziosamente. Il tester passa oltre pensando che il parametro sia pulito.

Questo approccio ha due problemi fondamentali. In primo luogo, richiede che il tester sappia quale vulnerabilità esiste prima di averla trovata. In secondo luogo, la maggior parte dei payload in circolazione sono teorici — copiati tra progetti e articoli di blog senza mai essere testati contro un parser reale. Sembrano corretti. Potrebbero anche essere sintatticamente validi. Ma in realtà non innescano una risposta rilevabile dal target.

Prima i Poliglotti, Segnale Garantito

Questo progetto adotta un approccio diverso. L'unità di lavoro principale è il poliglotto — una singola stringa di payload progettata per essere valida (o significativamente invalida) in quanti più contesti di injection possibile simultaneamente. Un poliglotto esce da virgolette singole, virgolette doppie, parentesi, commenti a blocchi, attributi HTML, delimitatori di template e contesti di backtick tutti insieme. Invece di dover sapere qual è la vulnerabilità, il tester lancia poliglotti a ogni parametro e osserva i segnali.

Ogni payload in questa raccolta è costruito attorno a pilastri di rilevamento — risposte osservabili che confermano l'esistenza di una vulnerabilità senza richiedere accesso ai log del server, al codice sorgente o al filesystem:

  • Errore: il payload causa un'eccezione, un errore del parser o un trace dello stack visibile nella risposta.
  • Matematica: il payload include un'espressione aritmetica come 7*191 che viene valutata come 1337. Se quel numero appare nella risposta e il payload ha inviato solo 7*191 (non il letterale 1337), il backend ha calcolato l'espressione — prova di esecuzione di codice.
  • Temporizzazione: il payload forza un ritardo (5+ secondi). Se la risposta è lenta, il backend ha eseguito un'operazione di sleep o CPU-intensive.
  • OOB (Out-of-Band): il payload forza il backend a effettuare una connessione HTTP, DNS, LDAP o TCP in uscita verso un server di callback controllato dal tester. Conferma l'esecuzione anche quando la risposta è completamente opaca.

Se un payload non produce almeno uno di questi segnali quando testato contro il suo contesto target, non appartiene all'elenco. Ognuno dei 1.353 payload qui è stato validato contro banchi di prova Docker appositamente costruiti con prova rigorosa di sfruttamento. Zero sono teorici.

Funzioni Native del Linguaggio invece di Comandi Shell

I payload OOB e di temporizzazione tradizionali si basano su comandi shell: curl, nslookup, ping, sleep. Questi si rompono continuamente. Dipendono dal sistema operativo target, dal PATH disponibile, da quale shell interpreta il comando e se il processo ha il permesso di generare sottoprocessi. Un payload OOB basato su curl che funziona su Ubuntu fallisce su Alpine (nessun curl), fallisce su Windows (nessun curl) e fallisce all'interno di un contenitore ristretto (nessuna esecuzione di processo in uscita).

Questo progetto sostituisce i comandi shell con funzioni native del linguaggio, ove possibile. I payload Python usano urllib.request.urlopen() e time.sleep(). I payload Java usano java.net.URL.openStream() e Thread.sleep(). Ruby usa Net::HTTP.get() e Kernel.sleep. PHP usa file_get_contents() e sleep(). Queste funzioni esistono in ogni installazione standard del rispettivo linguaggio — nessuna ricerca nel PATH, nessun sottoprocesso, nessuna dipendenza dal sistema operativo.

Laddove anche gli import della libreria standard potrebbero essere bloccati (eval in sandbox, exec ristretto), i payload ricorrono ad alternative senza import: cicli CPU per la temporizzazione (sum(range(500000000)) in Python, Atomics.wait() in Node) e connessioni socket grezze per OOB (__import__('socket').create_connection(), fsockopen(), TCPSocket.new()).

Dove i Poliglotti Non Arrivano

Non tutto può essere un poliglotto. I motori di template usano sintassi fondamentalmente incompatibili — {{}} in Jinja2 non significa nulla per <%= %> di ERB, e nessuno dei due viene analizzato come ${} di Freemarker). I formati di deserializzazione sono dati binari o strutturati specifici di un singolo framework. Per queste categorie, il progetto utilizza payload per motore specifico organizzati sotto lo stesso sistema di pilastri di rilevamento, coprendo 14 motori di template e 31 framework di deserializzazione in 7 linguaggi.

Il risultato è un unico corpus dove i poliglotti gestiscono i contesti che possono (SQLi, OS command injection, XSS, code injection) e payload specifici per motore creati appositamente gestiscono il resto, tutti validati, tutti che producono segnali rilevabili, tutti pronti per strumenti di injection riga per riga.


Elenco Minimo (82 Payload)

83 payload che coprono tutti i 35 stack di test, tutti i 55+ endpoint e tutti i 4 pilastri di rilevamento per categoria. Validati: 83 ATTIVI / 0 NON ATTIVI / 0 SALTATI.

Ogni categoria di injection riceve copertura di errore + matematica + temporizzazione + OOB dove architetturalmente possibile. I framework di deserializzazione che supportano l'esecuzione di codice (Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET) ottengono copertura multi-pilastro completa. I framework limitati al probing (PHP unserialize, Ruby Marshal, SnakeYAML, ecc.) ricevono rilevamento basato su errore. Lancia questo contro ogni parametro prima di passare agli elenchi completi per categoria per approfondimento.

83 richieste invece di 1.353. Utilizza ready/minimal/payloads-only.txt per Burp Intruder.


Scegliere il Payload Giusto per un Target

Vedere HOWTOUSE.md per la guida completa all'operatore. Trasforma "Sto guardando un parametro, cosa ci lancio?" in un flusso di lavoro ripetibile:

  1. Profilazione del parametro e del contesto - 5 domande (forma del valore, fingerprint dello stack, visibilità della risposta, disponibilità OOB, WAF) che potano le categorie prima ancora di lanciare un singolo payload.
  2. Suggerimenti "quando sospettarlo" per ogni categoria - esaustivi, focalizzati sulla produzione per tutte le 20 categorie. Ogni categoria elenca tipi di funzionalità SaaS reali (piattaforme low-code, BI/reporting, monitoraggio, automazione del flusso di lavoro, SSO, fetcher SSRF, sink eval, builder di template email, ecc.), indizi visivi e comportamentali (7*7 che restituisce 49 come indizio di eval, {{name}} che viene renderizzato come "Alice" che conferma SSTI, output di ping che perde da un campo diagnostico, stringhe User-Agent nei log OOB che nominano la libreria fetcher), trappole ORM moderne (Prisma $queryRaw, Rails .order(), Hibernate JPQL concat, Mongoose findOne(req.body)), e sonde economiche per confermare il sospetto prima di bruciare l'intero elenco.
  3. Impronte digitali dei byte di serializzazione pericolosi - byte magici grezzi e prefissi base64 per 31 framework tra Python, PHP, Java, .NET, Node, Ruby e Perl (rO0AB = Java, AAEAAAD///// = .NET BinaryFormatter, BAg = Ruby Marshal, gASV = Python pickle P4, / = PHP unserialize, ecc.) con una scheda di riferimento rapido di 16 voci ed euristiche di disambiguazione. Identifica il blob prima di lanciare, così carichi 5-15 payload corrispondenti invece di tutti e 232.

Usa HOWTOUSE.md prima di eseguire payloadctl prepare. Prima fingerprint, poi elenco minimo, poi approfondimento per categoria — non una raffica di 1.353 payload a ogni parametro.


Avvio Rapido```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:~
Dopo aver eseguito `prepare`, i file pronti all'uso si trovano in `ready/full/` e `ready/minimal/` con la seguente struttura:

| File | Cosa | Conteggio |
|------|------|-------|
| `ready/minimal/payloads-only.txt` | **Minimale -- 83 richieste, tutti i pilastri** | 83 |
| `ready/full/payloads-only.txt` | Elenco completo, un payload per riga | 1,353 |
| `ready/full/by-category/sqli.txt` | Solo SQL injection | 211 |
| `ready/full/by-category/ssti.txt` | Solo template injection | 206 |
| `ready/full/by-category/deserialization.txt` | Solo deserializzazione | 232 |
| `ready/full/by-category/os-cmd-injection.txt` | Solo OS command injection | 120 |
| `ready/full/by-category/code-injection.txt` | Solo code injection | 123 |
| `ready/full/by-category/ssrf.txt` | Solo SSRF | 156 |
| `ready/full/by-category/path-traversal.txt` | Solo path traversal | 113 |
| `ready/full/by-category/xss.txt` | Solo XSS | 58 |
| `ready/full/by-category/nosql.txt` | Solo NoSQL injection | 32 |
| `ready/full/by-category/format-string.txt` | Solo format string | 38 |
| `ready/full/by-category/el-injection.txt` | Solo expression language | 34 |
| `ready/full/by-category/header-crlf.txt` | Solo CRLF/header injection | 17 |
| `ready/full/by-category/prototype-pollution.txt` | Solo prototype pollution | 12 |
| `ready/full/by-category/xxe.txt` | Solo XXE | 11 |
| `ready/full/by-category/ldap-injection.txt` | Solo LDAP injection | 35 |
| `ready/full/by-category/xslt-injection.txt` | Solo XSLT injection | 30 |
| `ready/full/by-category/elasticsearch-injection.txt` | Solo Elasticsearch | 30 |
| `ready/full/by-category/cypher-injection.txt` | Solo Neo4j/Cypher | 27 |
| `ready/full/by-category/couchdb-injection.txt` | Solo CouchDB | 5 |
| `ready/full/by-category/polyglots.txt` | Polyglot cross-context | 246 |
| `ready/full/by-pillar/error-payloads-only.txt` | Payload basati su errori | 324 |
| `ready/full/by-pillar/timing-payloads-only.txt` | Basati sul tempo (blind) | 227 |
| `ready/full/by-pillar/oob-payloads-only.txt` | Callback out-of-band | 209 |
| `ready/full/by-pillar/math-payloads-only.txt` | Canary matematico (1337) | 182 |
| `ready/full/by-pillar/reflected-payloads-only.txt` | Riflessi/casi limite | 374 |
| `ready/full/encoded/url-encoded/payloads.txt` | Variante URL-encoded | 1,353 |
| `ready/full/encoded/base64/payloads.txt` | Variante Base64 | 1,353 |
| `ready/full/encoded/json-safe/payloads.txt` | Variante JSON-safe | 1,353 |
| `ready/full/encoded/double-url-encoded/payloads.txt` | Doppio URL-encoded | 1,353 |
| `ready/full/encoded/html-entity/payloads.txt` | Codifica entità HTML | 1,353 |
| `ready/full/encoded/hex-escaped/payloads.txt` | Variante hex-escaped | 1,353 |
| `ready/full/encoded/unicode-escaped/payloads.txt` | Variante Unicode-escaped | 1,353 |

La directory `ready/minimal/` rispecchia la stessa struttura (by-category, by-pillar, encoded) con il set di payload minimale.

Directory di output personalizzata:```bash
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com -o /path/to/engagement/payloads

I template grezzi con segnaposto {domain} (per sostituzione scriptata) si trovano in payloads/lists/full/ e payloads/lists/minimal/.


Pilastri di Rilevamento

Ogni payload produce almeno uno di questi segnali. Cercali con grep nelle tue risposte:

Valori canarini: 1337 (primario, da 7*191) e 7331 (secondario). Il rilevamento è un semplice grep.


Copertura dei Payload

Per Classe di Vulnerabilità

13 delle 20 categorie hanno tutti e 4 i pilastri. Le 7 che non li hanno (XSS, XSLT, Format String, Prototype Pollution, CRLF, XXE, CouchDB) hanno ragioni architetturali -- non puoi fare CRLF basato su timing o format string OOB. Dove il cross-pilastro È possibile, la sezione polyglot lo copre.

Varianti Codificate

7 formati di codifica, ciascuno con tutti i 1.353 payload:


Principi di Progettazione

Payload minimi, massima copertura di contesto. Vedi SPEC.md per la specifica tecnica completa con tabelle dei pilastri per engine e sintassi esatta dei payload.

  1. Polyglot prima di tutto. Un singolo payload esce da ', ", ), */, -->, backtick e delimitatori di template simultaneamente. Le sezioni polyglot conducono la lista principale.

  2. Per engine dove i polyglot non possono arrivare. I delimitatori SSTI e i formati di deserializzazione sono fondamentalmente incompatibili tra engine.

  3. Built-in meglio di shell. I payload OOB e timing usano librerie native del linguaggio:


Strumento CLI (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:~
### Flusso di lavoro di sviluppo tipico```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

Struttura del Repository```

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

## Aggiungere payload

### Aggiungere un payload a una categoria esistente

1. Modificare il file sorgente in `payloads/sources/`. Un payload per riga sotto una sezione `##Header##`.
2. Ogni payload deve produrre un segnale rilevabile (errore, math 1337, timing >4.5s, OOB, reflection).
3. Ricostruire e convalidare:   ```bash
   ./tools/payloadctl build && ./tools/payloadctl dist
   ./tools/payloadctl validate    # 0 NO-FIRE required

Aggiungere una nuova categoria di vulnerabilità

  1. Creare payloads/sources/<category>.txt con intestazioni ## per ogni pilastro (error, math, timing, OOB).
  2. Aggiungere il file a tools/cmd_build.py SOURCE_FILES e tools/cmd_dist.py CATEGORY_SOURCES.
  3. Creare uno stack di testbed in testbed/stacks/<category>/ (Dockerfile + server che espone POST /<endpoint> con input=<payload> restituendo {"output": "...", "error": "...", "time_ms": N}).
  4. Aggiungere il routing degli endpoint in tools/cmd_validate.py (dizionario ENDPOINTS e funzione _get_endpoints()).

Aggiungere un nuovo framework di deserializzazione

  1. Modificare tools/generate-deser-final.py - aggiungere una funzione che produce payload (error, math, timing, OOB).
  2. Eseguire ./tools/payloadctl generate deser && ./tools/payloadctl build
  3. Aggiungere endpoint di testbed e routing se necessario.

Aggiungere un nuovo motore SSTI

  1. Modificare payloads/sources/ssti.txt - aggiungere sezioni ##EngineName (Language) - Pillar##. Utilizzare built-in del linguaggio per timing/OOB.
  2. Aggiungere endpoint di testbed nello stack corrispondente ssti-<language>.
  3. Aggiungere routing in tools/cmd_validate.py ENGINE_MAP.

Regole del formato dei payload

  • Un payload per riga (YAML multilinea usa \n letterale)
  • Segnaposto {domain} per URL di callback OOB
  • 1337 canary per tutti i payload math
  • Le sezioni ##Header## raggruppano per categoria e pilastro
  • Nessun duplicato (il passaggio di build deduplica automaticamente)

Validazione

Il validatore testa ogni payload contro applicazioni vulnerabili reali:```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:~
How it works:
1. Legge il file dei payload e indirizza ogni sezione `##` al/i testbed endpoint corrispondente/i
2. Invia POST `input=<payload>` agli endpoint, controlla la risposta per segnali
3. Un payload viene attivato se QUALSIASI endpoint restituisce: errore reale del parser/interprete, `1337` calcolato dal server (da `7*191`), ritardo >4,5s, callback OOB dal container di destinazione, contenuto di file letto (`root:x:0:0`), o input riflesso in un contesto valido (XSS, CRLF)

La validazione rigorosa (`tools/cmd_validate_strict.py`) verifica inoltre:
- I payload matematici dimostrano il calcolo lato server (il payload invia `7*191`, non il letterale `1337`)
- I callback OOB provengono dagli IP del container del testbed
- I messaggi di errore contengono firme reali del parser/interprete, non errori HTTP generici
- I ritardi temporali rientrano nell'intervallo previsto (~5 secondi)

### Stack dei testbed (35 totali)

| Stack | Porta | Linguaggio | Endpoint |
|-------|------|------------|----------|
| 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` |

Catcher OOB sulla porta 9999 (HTTP + rilevamento LDAP/binario) e sulla 9998 (catch-all TCP raw), con DNS sulla 5353/UDP. Rileva callback HTTP, connessioni binarie LDAP/ASN.1 (JNDI), query DNS e connessioni TCP raw. Ogni endpoint accetta `POST /<sink>` con `input=<payload>` e restituisce `{"output": "...", "error": "...|null", "time_ms": N}`.

---

## Crediti

Payload studiati e sviluppati da [Grom Hacks](https://github.com/gromhacks). Basati sul lavoro della community di ricerca sulla sicurezza, inclusi PayloadsAllTheThings, HackTricks, PortSwigger Web Security Academy e ricercatori individuali. Tutti i payload sono stati validati su applicazioni vulnerabili reali.
Scarica lo strumento
PayloadCategoriaPilastri
4SQLierrore, matematica, temporizzazione, OOB (poliglotti cross-dialetto)
4SSTIerrore, matematica, temporizzazione, OOB (poliglotti cross-motore)
3OS Cmdmatematica, temporizzazione, OOB (poliglotti cross-shell)
3Code Injectionmatematica, temporizzazione, OOB (cross-linguaggio)
2XSSmatematica, OOB
2XXElettura-file, OOB
2SSRFerrore, OOB
1Path Traversallettura-file
2NoSQLmatematica, errore
1EL Injectionmatematica
1Prototype Pollutionmatematica
1CRLF/Headermatematica
1Format Stringerrore
1SSImatematica
2LDAP Injectionerrore, matematica
3XSLT Injectionerrore, matematica, OOB
2Elasticsearcherrore, matematica
2Cypher/Neo4jerrore, temporizzazione
1CouchDBerrore
3Groovymatematica, temporizzazione, OOB
41Deserializzazionemulti-pilastro dove supportato, solo errore altrimenti
Tzo
YTo
  • Matrice indizio-target per categoria - vai da "Vedo id=42 e JSESSIONID" a "prova by-category/sqli.txt + deserializzazione Java + EL injection, controlla il pilastro matematica" in una sola consultazione.
  • Regole di selezione del pilastro - scegli il segnale che puoi effettivamente osservare (OOB > matematica > temporizzazione > errore > riflesso) prima di lanciare, in modo da non testare mai alla cieca contro un canale che non puoi leggere.
  • PilastroPayloadCosa cercareQuando usare
    Error324Testo dell'eccezione, stack trace, errore del parser nella rispostaL'app riflette errori
    Timing227La risposta richiede >4.5 secondiBlind - nessun output, nessun errore
    OOB209HTTP/DNS/LDAP/TCP in uscita verso il tuo server di callbackBlind + asincrono - timing inaffidabile
    Math182Letterale 1337 nel corpo della risposta (server ha calcolato 7*191)Output riflesso ma nessun errore
    Reflected374Valore di input riprodotto nella rispostaFuzzing per anomalie del parser
    File-read(sottoinsieme)Contenuto di root: o [extensions] nella rispostaPath traversal, lettura file XXE
    CategoriaConteggioPilastriCopertura
    SQLi211error, math, timing, oobMySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB. UNION, error, timing, OOB. Breakout di contesto: ', ", ), )), */, numerico.
    SSTI206error, math, timing, oobJinja2, Mako, Tornado, EJS, Nunjucks, Pug, Twig, Smarty, ERB, Slim, Haml, Thymeleaf, Pebble, Freemarker, Velocity, Razor, Go template, Mustache, Liquid. Tutti usano built-in del linguaggio.
    Deserialization232error, math, timing, oob31 framework / 7 linguaggi. Tutti i payload nativi del linguaggio usano built-in (nessun comando shell). 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. Breakout: ;, |, ||, &&, $(), backtick. Bypass IFS, bypass glob, codifica hex.
    Code Injection123error, math, timing, oobPython, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy. CPU spin senza import, OOB a livello di socket.
    SSRF156error, math, timing, oobMetadati cloud (AWS/GCP/Azure), bypass IP, schemi di protocollo, DNS rebinding, sonde di servizi interni.
    Path Traversal113error, math, timing, oobLinux + Windows, bypass di codifica, null byte, wrapper PHP, UNC, ADS NTFS, nomi brevi 8.3.
    XSS58error, math, oobPolyglot cross-contesto (20+ contesti), gestori di eventi, elusione filtri, DOM clobbering, mutation XSS, SVG, OOB.
    Format String38error, mathC/C++ (%s%n%x), Python ({0.__class__}), .NET ({0:X}).
    NoSQL32error, math, timing, oobIniezione di operatori MongoDB, timing $where, OOB, comandi Redis.
    EL Injection34error, math, timing, oobSpEL, OGNL, MVEL, Unified EL. OOB via java.net.URL.
    CRLF/Header17error, math, oobResponse splitting, iniezione di header, OOB via header Host.
    Prototype Pollution12error, math__proto__, constructor.prototype, varianti JSON e query string.
    XXE11error, timing, oob, file-readEntità esterne, XInclude, entità parametro, Billion Laughs DoS.
    LDAP Injection35error, math, timing, oobIniezione di filtro, bypass autenticazione, timing wildcard, referral OOB.
    Elasticsearch30error, math, timing, oobIniezione script Painless, query DSL, sintassi query_string.
    Cypher/Neo4j27error, math, timing, oobIniezione query Cypher, APOC sleep, LOAD CSV OOB.
    CouchDB5error, mathIniezione query Mango, iniezione operatori, bypass autenticazione.
    XSLT Injection30error, math, oob, file-readMath XPath, document() SSRF, lettura file, info leak system-property().
    Polyglots/Edge Cases246error, math, timing, oobPolyglot cross-contesto + buffer overflow, limite intero, type confusion, null byte.
    CodificaCaso d'uso
    URL-encodedParametri standard di query/form
    Double-URL-encodedBypass WAF, vulnerabilità double-decode
    Base64Corpi API, JWT, parametri serializzati
    JSON-safeCorpi richiesta JSON (virgolette escaped)
    HTML entityIniezione attributi HTML
    Hex-escapedProtocolli binari, iniezione a basso livello
    Unicode-escapedBypass normalizzazione Unicode
    LinguaggioBuilt-in OOBBuilt-in Timing
    Pythonurllib.request.urlopen()time.sleep(5)
    Javajava.net.URL.openStream()Thread.sleep(5000)
    Noderequire('http').get()Ciclo busy-wait con Date.now()
    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)

    I comandi shell (curl, nslookup) dipendono dal sistema operativo e dal PATH. I built-in funzionano ovunque.

  • Senza import dove possibile. Il timing CPU spin funziona anche quando gli import sono bloccati:

    • Python: sum(range(500000000)) (~7s, nessun import)
    • Node: Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5000) (preciso 5s)
    • Ruby: 99999999.times{1+1}
  • OOB a livello di socket come fallback. Quando le librerie HTTP sono bloccate: __import__('socket').create_connection(), fsockopen(), TCPSocket.new(), new java.net.Socket().

  • Convalidare: ./tools/payloadctl validate