Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Payload-and-Polyglot-Lists — GromHacks Labs — As listas de payloads que eles não querem que você tenha. 1.324 sondas de injeção enviadas da nave-mãe para detectar o que é injetável em 20 classes de vulnerabilidade. Nós não exploramos, apenas batemos na porta e vemos quem atende. Cada payload testado contra parsers reais porque os alienígenas exigem provas. Não confie em nenhuma entrada. Questione tudo! | Kitploit
Ferramentas/GitHubGitHub/gromhacks/payload-and-polyglot-lists
OSINT (Inteligência de Fontes Abertas)Geração de PayloadsAnálise de VulnerabilidadesExploração de Aplicações WebFuzzingTestes de PenetraçãoAprendizado e Educação
GitHubgromhacks/payload-and-polyglot-lists

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →

Sobre

GromHacks Labs — As listas de payloads que eles não querem que você tenha. 1.324 sondas de injeção enviadas da nave-mãe para detectar o que é injetável em 20 classes de vulnerabilidade. Nós não exploramos, apenas batemos na porta e vemos quem atende. Cada payload testado contra parsers reais porque os alienígenas exigem provas. Não confie em nenhuma entrada. Questione tudo!

Payload-and-Polyglot-Lists

Ver Repositório
369há 4 mesesRevisado pelo Kitploit
Compartilhar

Listas de Payloads e Poliglotas

Encontrou um payload que não funciona? Por favor abra um issue com o payload, contexto do alvo e o que você esperava que acontecesse. Pull requests com correções ou novos payloads são sempre bem-vindos.

A pesquisa está em andamento. Este projeto está em desenvolvimento ativo e será atualizado regularmente com novos payloads, classes de vulnerabilidade e melhorias de validação.

Aviso Legal: Estes payloads são fornecidos apenas para testes de segurança autorizados, educação e fins de pesquisa. Os autores não assumem qualquer responsabilidade por uso indevido ou efeitos indiretos. Use totalmente por sua conta e risco. Ao usar este projeto, você aceita total responsabilidade por suas ações.

Licença: MIT - veja LICENSE

1,353 payloads de injeção validados cobrindo 20 classes de vulnerabilidade, 31 frameworks de desserialização e 14 mecanismos de template. Cada payload produz um sinal detectável. Zero payloads teóricos.

Validação: 1,353 testados / 1,353 acionam / 0 falhas / 0 ignorados contra 35 ambientes de teste Docker. A validação rigorosa comprova exploração real (computação no lado do servidor, erros reais de parser, atrasos de temporização medidos, callbacks OOB de contêineres alvo) -- não correspondência de strings.


Conceito

O Problema com Listas Tradicionais de Payloads

A maioria das listas de payloads disponíveis publicamente são organizadas por tipo de vulnerabilidade: uma lista para injeção SQL, outra para XSS, outra para injeção de comandos, e assim por diante. Um testador escolhe a lista que acha que corresponde ao alvo, carrega-a em uma ferramenta de intrusão e a executa contra um parâmetro. Se ele errar sobre a classe de vulnerabilidade, toda a varredura não produz nada. Se o backend for um banco de dados incomum, um mecanismo de template não padrão, ou uma linguagem que a lista não considerou, os payloads falham silenciosamente. O testador segue em frente pensando que o parâmetro está limpo.

Essa abordagem tem dois problemas fundamentais. Primeiro, exige que o testador saiba qual vulnerabilidade existe antes de encontrá-la. Segundo, a maioria dos payloads em circulação são teóricos -- copiados entre projetos e postagens de blog sem nunca serem testados contra um parser real. Eles parecem corretos. Eles podem até ser sintaticamente válidos. Mas eles não provocam uma resposta detectável do alvo.

Primeiro os Poliglotas, Sinal Garantido

Este projeto adota uma abordagem diferente. A unidade principal de trabalho é o poliglota -- uma única string de payload projetada para ser válida (ou significativamente inválida) em tantos contextos de injeção quanto possível simultaneamente. Um poliglota escapa de aspas simples, aspas duplas, parênteses, comentários de bloco, atributos HTML, delimitadores de template e contextos de crase de uma só vez. Em vez de precisar saber qual é a vulnerabilidade, o testador dispara poliglotas em cada parâmetro e observa os sinais.

Cada payload nesta coleção é construído em torno de pilares de detecção -- respostas observáveis que confirmam a existência de uma vulnerabilidade sem exigir acesso a logs do servidor, código fonte ou sistema de arquivos:

  • Erro: o payload faz o backend lançar uma exceção, erro de parser ou stack trace visível na resposta.
  • Matemática: o payload inclui uma expressão aritmética como 7*191 que resulta em 1337. Se esse número aparecer na resposta e o payload enviou apenas 7*191 (não o literal 1337), o backend computou a expressão -- prova de execução de código.
  • Temporização: o payload força um atraso (5+ segundos). Se a resposta for lenta, o backend executou um sleep ou operação intensiva de CPU.
  • OOB (Fora de Banda): o payload força o backend a fazer uma conexão HTTP, DNS, LDAP ou TCP de saída para um servidor de callback controlado pelo testador. Confirma execução mesmo quando a resposta é completamente opaca.

Se um payload não produzir pelo menos um desses sinais quando testado contra seu contexto alvo, ele não pertence à lista. Cada um dos 1,353 payloads aqui foi validado contra ambientes de teste Docker construídos para o propósito, com prova rigorosa de exploração. Zero são teóricos.

Funções Nativas em Vez de Comandos Shell

Payloads tradicionais de OOB e temporização dependem de comandos shell: curl, nslookup, ping, sleep. Estes quebram constantemente. Eles dependem do SO alvo, do PATH disponível, de qual shell interpreta o comando e se o processo tem permissão para gerar subprocessos. Um payload OOB baseado em curl que funciona no Ubuntu falha no Alpine (sem curl), falha no Windows (sem curl) e falha dentro de um contêiner restrito (sem execução de processo de saída).

Este projeto substitui comandos shell por funções nativas da linguagem sempre que possível. Payloads Python usam urllib.request.urlopen() e time.sleep(). Payloads Java usam java.net.URL.openStream() e Thread.sleep(). Ruby usa Net::HTTP.get() e Kernel.sleep. PHP usa file_get_contents() e sleep(). Essas funções existem em toda instalação padrão de suas respectivas linguagens -- sem busca de PATH, sem subprocesso, sem dependência de SO.

Onde até mesmo importações da biblioteca padrão podem ser bloqueadas (eval em sandbox, exec restrito), os payloads recorrem a alternativas sem importação: loops de CPU para temporização (sum(range(500000000)) em Python, Atomics.wait() em Node) e conexões socket brutas para OOB (__import__('socket').create_connection(), fsockopen(), TCPSocket.new()).

Onde os Poliglotas Não Alcançam

Nem tudo pode ser um poliglota. Mecanismos de template usam sintaxe fundamentalmente incompatível -- {{}} no Jinja2 não significa nada para o <%= %> do ERB, e nenhum deles é analisado como ${} do Freemarker). Formatos de desserialização são binários ou dados estruturados específicos de um framework. Para essas categorias, o projeto usa payloads por mecanismo organizados sob o mesmo sistema de pilares de detecção, cobrindo 14 mecanismos de template e 31 frameworks de desserialização em 7 linguagens.

O resultado é um único corpus onde os poliglotas lidam com os contextos que podem (SQLi, injeção de comando no SO, XSS, injeção de código) e payloads por mecanismo construídos para o propósito lidam com o restante, todos validados, todos produzindo sinais detectáveis, todos prontos para ferramentas de injeção linha por linha.


Lista Mínima (82 Payloads)

83 payloads cobrindo todas as 35 pilhas de teste, todos os 55+ endpoints e todos os 4 pilares de detecção por categoria. Validado: 83 ACIONAM / 0 NÃO ACIONAM / 0 IGNORADOS.

Toda categoria de injeção recebe cobertura de erro + matemática + temporização + OOB onde arquiteturalmente possível. Frameworks de desserialização que suportam execução de código (Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET) recebem cobertura completa de múltiplos pilares. Frameworks limitados a sondagem (PHP unserialize, Ruby Marshal, SnakeYAML, etc.) recebem detecção baseada em erro. Dispare isso em cada parâmetro antes de mudar para listas de categoria completa para profundidade.

83 requisições em vez de 1,353. Use ready/minimal/payloads-only.txt para o Burp Intruder.


Escolhendo o Payload Certo para um Alvo

Consulte HOWTOUSE.md para o guia completo do operador. Ele transforma "Estou olhando para um parâmetro, o que eu jogo nele?" em um fluxo de trabalho repetível:

  1. Perfil do parâmetro e contexto - 5 perguntas (forma do valor, impressão digital da pilha, visibilidade da resposta, disponibilidade de OOB, WAF) que podam categorias antes de disparar um único payload.
  2. Categoria por categoria "quando suspeitar" - dicas exaustivas focadas em produção para todas as 20 categorias. Cada categoria lista tipos reais de recursos SaaS (plataformas low-code, BI/relatórios, monitoramento, automação de fluxo de trabalho, SSO, extratores SSRF, sinks eval, construtores de template de e-mail, etc.), pistas visuais e comportamentais (7*7 retornando 49 como a dica de eval, {{name}} renderizando como "Alice" confirmando SSTI, saída de ping vazando de um campo de diagnóstico, strings User-Agent em logs OOB nomeando a biblioteca extratora), armadilhas ORM de pilha moderna (Prisma $queryRaw, Rails .order(), Hibernate JPQL concat, Mongoose findOne(req.body)), e sondagens baratas para confirmar suspeita antes de queimar a lista completa.
  3. Impressões digitais de bytes de serialização perigosos - bytes mágicos brutos e prefixos base64 para 31 frameworks em Python, PHP, Java, .NET, Node, Ruby e Perl (rO0AB = Java, AAEAAAD///// = .NET BinaryFormatter, BAg = Ruby Marshal, gASV = Python pickle P4, / = PHP unserialize, etc.) com um cartão de referência rápida de 16 entradas e heurísticas de desambiguação. Identifique o blob antes de disparar para carregar de 5 a 15 payloads correspondentes em vez de todos os 232.

Use HOWTOUSE.md antes de executar payloadctl prepare. Identificação primeiro, lista mínima segundo, aprofundamento por categoria terceiro - não uma saraivada de 1,353 payloads em cada parâmetro.


Início Rápido```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:~
After executar `prepare`, seus arquivos prontos para uso estão em `ready/full/` e `ready/minimal/` com a estrutura correspondente:

| Arquivo | O quê | Contagem |
|------|------|-------|
| `ready/minimal/payloads-only.txt` | **Mínimo -- 83 requisições, todos os pilares** | 83 |
| `ready/full/payloads-only.txt` | Lista completa, um payload por linha | 1.353 |
| `ready/full/by-category/sqli.txt` | Apenas SQL injection | 211 |
| `ready/full/by-category/ssti.txt` | Apenas injeção de template | 206 |
| `ready/full/by-category/deserialization.txt` | Apenas desserialização | 232 |
| `ready/full/by-category/os-cmd-injection.txt` | Apenas injeção de comando no SO | 120 |
| `ready/full/by-category/code-injection.txt` | Apenas injeção de código | 123 |
| `ready/full/by-category/ssrf.txt` | Apenas SSRF | 156 |
| `ready/full/by-category/path-traversal.txt` | Apenas path traversal | 113 |
| `ready/full/by-category/xss.txt` | Apenas XSS | 58 |
| `ready/full/by-category/nosql.txt` | Apenas injeção NoSQL | 32 |
| `ready/full/by-category/format-string.txt` | Apenas string de formato | 38 |
| `ready/full/by-category/el-injection.txt` | Apenas linguagem de expressão | 34 |
| `ready/full/by-category/header-crlf.txt` | Apenas injeção de CRLF/cabeçalho | 17 |
| `ready/full/by-category/prototype-pollution.txt` | Apenas poluição de protótipo | 12 |
| `ready/full/by-category/xxe.txt` | Apenas XXE | 11 |
| `ready/full/by-category/ldap-injection.txt` | Apenas injeção LDAP | 35 |
| `ready/full/by-category/xslt-injection.txt` | Apenas injeção XSLT | 30 |
| `ready/full/by-category/elasticsearch-injection.txt` | Apenas Elasticsearch | 30 |
| `ready/full/by-category/cypher-injection.txt` | Apenas Neo4j/Cypher | 27 |
| `ready/full/by-category/couchdb-injection.txt` | Apenas CouchDB | 5 |
| `ready/full/by-category/polyglots.txt` | Poliglotas cross-contexto | 246 |
| `ready/full/by-pillar/error-payloads-only.txt` | Payloads baseados em erro | 324 |
| `ready/full/by-pillar/timing-payloads-only.txt` | Baseados em temporização (cego) | 227 |
| `ready/full/by-pillar/oob-payloads-only.txt` | Callback fora de banda | 209 |
| `ready/full/by-pillar/math-payloads-only.txt` | Canário matemático (1337) | 182 |
| `ready/full/by-pillar/reflected-payloads-only.txt` | Refletidos/caso de borda | 374 |
| `ready/full/encoded/url-encoded/payloads.txt` | Variante codificada em URL | 1.353 |
| `ready/full/encoded/base64/payloads.txt` | Variante Base64 | 1.353 |
| `ready/full/encoded/json-safe/payloads.txt` | Variante segura para JSON | 1.353 |
| `ready/full/encoded/double-url-encoded/payloads.txt` | Duplamente codificado em URL | 1.353 |
| `ready/full/encoded/html-entity/payloads.txt` | Codificado como entidade HTML | 1.353 |
| `ready/full/encoded/hex-escaped/payloads.txt` | Variante com escape hexadecimal | 1.353 |
| `ready/full/encoded/unicode-escaped/payloads.txt` | Variante com escape Unicode | 1.353 |

O diretório `ready/minimal/` espelha a mesma estrutura (por categoria, por pilar, codificado) com o conjunto mínimo de payloads.

Diretório de saída personalizado:```bash
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com -o /path/to/engagement/payloads

Modelos brutos com o placeholder {domain} (para substituição por script) estão em payloads/lists/full/ e payloads/lists/minimal/.


Pilares de Detecção

Cada payload produz pelo menos um desses sinais. Use grep para localizá-los nas suas respostas:

Valores canários: 1337 (primário, de 7*191) e 7331 (secundário). A detecção é um simples grep.


Cobertura de Payloads

Por Classe de Vulnerabilidade

13 de 20 categorias têm todos os 4 pilares. As 7 que não têm (XSS, XSLT, Format String, Poluição de Protótipo, CRLF, XXE, CouchDB) têm razões arquiteturais — não é possível fazer CRLF baseado em tempo ou format strings OOB. Onde é possível ter pilares cruzados, a seção de poliglotas cobre.

Variantes Codificadas

7 formatos de codificação, cada um com todos os 1.353 payloads:


Princípios de Design

Mínimo de payloads, máxima cobertura de contexto. Veja SPEC.md para a especificação técnica completa com tabelas de pilares por motor e sintaxe exata dos payloads.

  1. Poliglotas primeiro. Um único payload sai de ', ", ), */, -->, crases e delimitadores de template simultaneamente. As seções de poliglotas lideram a lista principal.

  2. Por motor onde poliglotas não alcançam. Delimitadores SSTI e formatos de desserialização são fundamentalmente incompatíveis entre motores.

  3. Recursos internos em vez de shell. Payloads OOB e de tempo usam bibliotecas nativas da linguagem:


Ferramenta 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:~
### Fluxo de Desenvolvimento Típico```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

Estrutura do Repositório```

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

## Adicionando Payloads

### Adicionar um payload a uma categoria existente

1. Edite o arquivo fonte em `payloads/sources/`. Um payload por linha sob a seção `##Header##`.
2. Cada payload deve produzir um sinal detectável (error, math 1337, timing >4.5s, OOB, reflection).
3. Reconstrua e valide:   ```bash
   ./tools/payloadctl build && ./tools/payloadctl dist
   ./tools/payloadctl validate    # 0 NO-FIRE required

Adicionar uma nova categoria de vulnerabilidade

  1. Crie payloads/sources/<category>.txt com cabeçalhos ## para cada pilar (error, math, timing, OOB).
  2. Adicione o arquivo a tools/cmd_build.py SOURCE_FILES e tools/cmd_dist.py CATEGORY_SOURCES.
  3. Crie uma stack de testbed em testbed/stacks/<category>/ (Dockerfile + servidor expondo POST /<endpoint> com input=<payload> retornando {"output": "...", "error": "...", "time_ms": N}).
  4. Adicione roteamento de endpoint em tools/cmd_validate.py (ENDPOINTS dict e função _get_endpoints()).

Adicionar um novo framework de desserialização

  1. Edite tools/generate-deser-final.py - adicione uma função que gera payloads (error, math, timing, OOB).
  2. Execute ./tools/payloadctl generate deser && ./tools/payloadctl build
  3. Adicione endpoint de testbed e roteamento se necessário.

Adicionar um novo motor SSTI

  1. Edite payloads/sources/ssti.txt - adicione seções ##EngineName (Language) - Pillar##. Use funções nativas da linguagem para timing/OOB.
  2. Adicione endpoint de testbed na stack ssti-<language> correspondente.
  3. Adicione roteamento em tools/cmd_validate.py ENGINE_MAP.

Regras de formato de payload

  • Um payload por linha (YAML multilinha usa \n literal)
  • Placeholder {domain} para URLs de callback OOB
  • 1337 canário para todos os payloads de math
  • Seções ##Header## agrupam por categoria e pilar
  • Sem duplicatas (etapa de build deduplica automaticamente)

Validação

O validador testa cada payload contra aplicações vulneráveis reais:```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:~
Como funciona:
1. Lê o ficheiro de payloads e encaminha cada secção `##` para o(s) endpoint(s) correspondente(s)
2. Faz POST de `input=<payload>` para o(s) endpoint(s), verifica a resposta por sinais
3. Um payload é acionado se QUALQUER endpoint retornar: erro real de parser/intérprete, `1337` (de `7*191`) calculado pelo servidor, atraso >4,5s, callback OOB do contentor alvo, conteúdo de leitura de ficheiro (`root:x:0:0`), ou input refletido num contexto válido (XSS, CRLF)

Validação rigorosa (`tools/cmd_validate_strict.py`) adicionalmente verifica:
- Payloads matemáticos comprovam cálculos do lado do servidor (o payload envia `7*191`, não `1337` literal)
- Callbacks OOB originam-se de IPs do contentor da bancada de teste
- Mensagens de erro contêm assinaturas reais de parser/intérprete, não erros HTTP genéricos
- Atrasos de temporização enquadram-se no intervalo esperado (~5 segundos)

### Stacks de bancada de teste (35 no total)

| Stack | Porta | Linguagem | Endpoints |
|-------|------|-----------|-----------|
| 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 na porta 9999 (HTTP + deteção LDAP/binária) e 9998 (catch-all TCP bruto), com DNS em 5353/UDP. Detecta callbacks HTTP, conexões binárias LDAP/ASN.1 (JNDI), consultas DNS e conexões TCP brutas. Cada endpoint aceita `POST /<sink>` com `input=<payload>` e retorna `{"output": "...", "error": "...|null", "time_ms": N}`.

---

## Créditos

Payloads pesquisados e desenvolvidos por [Grom Hacks](https://github.com/gromhacks). Construído com base no trabalho da comunidade de pesquisa em segurança, incluindo PayloadsAllTheThings, HackTricks, PortSwigger Web Security Academy e investigadores individuais. Todos os payloads validados contra aplicações vulneráveis reais.
Baixar ferramenta
PayloadsCategoriaPilares
4SQLierro, matemática, temporização, OOB (poliglotas entre dialetos)
4SSTIerro, matemática, temporização, OOB (poliglotas entre mecanismos)
3Comando SOmatemática, temporização, OOB (poliglotas entre shells)
3Injeção de Códigomatemática, temporização, OOB (entre linguagens)
2XSSmatemática, OOB
2XXEleitura de arquivo, OOB
2SSRFerro, OOB
1Path Traversalleitura de arquivo
2NoSQLmatemática, erro
1Injeção ELmatemática
1Poluição de Protótipomatemática
1CRLF/Cabeçalhomatemática
1String de Formatoerro
1SSImatemática
2Injeção LDAPerro, matemática
3Injeção XSLTerro, matemática, OOB
2Elasticsearcherro, matemática
2Cypher/Neo4jerro, temporização
1CouchDBerro
3Groovymatemática, temporização, OOB
41Desserializaçãomúltiplos pilares onde suportado, apenas erro caso contrário
Tzo
YTo
  • Matriz de dica de alvo para categoria - vá de "Eu vejo id=42 e JSESSIONID" para "tente by-category/sqli.txt + desserialização Java + injeção EL, observe o pilar matemática" em uma consulta.
  • Regras de seleção de pilar - escolha o sinal que você realmente pode observar (OOB > matemática > temporização > erro > refletido) antes de disparar, para nunca testar às cegas contra um canal que você não pode ler.
  • PilarPayloadsO que procurarUsar quando
    Erro324Texto de exceção, stack trace, erro de parser na respostaA aplicação reflete erros
    Tempo227Resposta leva >4,5 segundosBlind - sem saída, sem erros
    OOB209HTTP/DNS/LDAP/TCP de saída para seu servidor de callbackBlind + assíncrono - tempo não confiável
    Matemática182Literal 1337 no corpo da resposta (servidor computou 7*191)Saída refletida mas sem erros
    Refletido374Valor de entrada ecoado de volta na respostaFuzzing para anomalias de parser
    Leitura de arquivo(subconjunto)Conteúdo root: ou [extensions] na respostaPath traversal, XXE leitura de arquivo
    CategoriaContagemPilaresCobertura
    SQLi211erro, matemática, tempo, oobMySQL, PostgreSQL, Oracle, MSSQL, SQLite, CockroachDB. UNION, erro, tempo, OOB. Quebras de contexto: ', ", ), )), */, numérico.
    SSTI206erro, matemática, tempo, oobJinja2, Mako, Tornado, EJS, Nunjucks, Pug, Twig, Smarty, ERB, Slim, Haml, Thymeleaf, Pebble, Freemarker, Velocity, Razor, Go template, Mustache, Liquid. Todos usam recursos nativos da linguagem.
    Desserialização232erro, matemática, tempo, oob31 frameworks / 7 linguagens. Todos os payloads nativos da linguagem usam recursos internos (sem comandos 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).
    Injeção de Comando OS120erro, matemática, tempo, oobBash, CMD, PowerShell. Quebras: ;, |, ||, &&, $(), crases. Bypass IFS, bypass glob, codificação hex.
    Injeção de Código123erro, matemática, tempo, oobPython, Node, PHP, Ruby, Perl, Lua, Java ScriptEngine, Groovy. CPU spin sem imports, OOB em nível de soquete.
    SSRF156erro, matemática, tempo, oobMetadados de nuvem (AWS/GCP/Azure), bypass de IP, esquemas de protocolo, DNS rebinding, sondagem de serviços internos.
    Path Traversal113erro, matemática, tempo, oobLinux + Windows, bypass de codificação, byte nulo, wrappers PHP, UNC, NTFS ADS, nomes curtos 8.3.
    XSS58erro, matemática, oobPoliglotas entre contextos (20+ contextos), manipuladores de eventos, evasão de filtros, DOM clobbering, mutation XSS, SVG, OOB.
    Format String38erro, matemáticaC/C++ (%s%n%x), Python ({0.__class__}), .NET ({0:X}).
    NoSQL32erro, matemática, tempo, oobInjeção de operadores MongoDB, tempo $where, OOB, comandos Redis.
    Injeção EL34erro, matemática, tempo, oobSpEL, OGNL, MVEL, Unified EL. OOB via java.net.URL.
    CRLF/Cabeçalho17erro, matemática, oobResponse splitting, injeção de cabeçalho, OOB via cabeçalho Host.
    Poluição de Protótipo12erro, matemática__proto__, constructor.prototype, variantes JSON e query string.
    XXE11erro, tempo, oob, leitura de arquivoEntidades externas, XInclude, entidades de parâmetro, Billion Laughs DoS.
    Injeção LDAP35erro, matemática, tempo, oobInjeção de filtro, bypass de autenticação, tempo com curinga, OOB referral.
    Elasticsearch30erro, matemática, tempo, oobInjeção de script Painless, query DSL, sintaxe query_string.
    Cypher/Neo4j27erro, matemática, tempo, oobInjeção de consulta Cypher, APOC sleep, LOAD CSV OOB.
    CouchDB5erro, matemáticaInjeção de consulta Mango, injeção de operadores, bypass de autenticação.
    Injeção XSLT30erro, matemática, oob, leitura de arquivoMatemática XPath, document() SSRF, leitura de arquivo, vazamento de informações system-property().
    Poliglotas/Casos Extremos246erro, matemática, tempo, oobPoliglotas entre contextos + buffer overflow, limite de inteiros, type confusion, byte nulo.
    CodificaçãoCaso de uso
    URL-encodedParâmetros padrão de query/formulário
    Double-URL-encodedBypass de WAF, vulnerabilidades de dupla decodificação
    Base64Corpos de API, JWT, parâmetros serializados
    JSON-safeCorpos de requisição JSON (aspas escapadas)
    HTML entityInjeção em atributos HTML
    Hex-escapedProtocolos binários, injeção de baixo nível
    Unicode-escapedBypass de normalização Unicode
    LinguagemRecurso Interno OOBRecurso Interno de Tempo
    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)

    Comandos shell (curl, nslookup) dependem do SO e PATH. Recursos internos funcionam em qualquer lugar.

  • Sem imports sempre que possível. O CPU spin timing funciona mesmo quando imports são bloqueados:

    • Python: sum(range(500000000)) (~7s, sem imports)
    • Node: Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,5000) (5s precisos)
    • Ruby: 99999999.times{1+1}
  • OOB em nível de soquete como fallback. Quando bibliotecas HTTP estão bloqueadas: __import__('socket').create_connection(), fsockopen(), TCPSocket.new(), new java.net.Socket().

  • Validar: ./tools/payloadctl validate