Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Enviar
FerramentasExploitsBlog
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
rcekit — Kit de detecção e confirmação de RCE que testa URLs ou requisições HTTP capturadas em busca de injeção de comandos, SSTI, caminhos cegos e OOB, retornando veredictos em camadas com provas. | Kitploit
Ferramentas/GitHubGitHub/kabiri-labs/rcekit
Scanners de VulnerabilidadesScanners de Vulnerabilidades WebGeração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebFuzzingTestes de PenetraçãoComando e ControleUtilitários e FrameworksRed Teaming
14246há 1 diaAinda não revisado
GitHubkabiri-labs/rcekit

rcekit

Kit de detecção e confirmação de RCE que testa URLs ou requisições HTTP capturadas em busca de injeção de comandos, SSTI, caminhos cegos e OOB, retornando veredictos em camadas com provas.

Ver Repositório

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 →
Compartilhar

RCEKit

confirmed significa que o alvo executou a entrada. negative significa que as sondagens o alcançaram.

Versão 2.40.0 · MIT · Python 3.8+ · zero dependências de terceiros

RCEKit é um kit de detecção e confirmação de RCE para testes de penetração autorizados, red teaming e pesquisa de segurança. Aponte-o para um alvo que você tem permissão para testar — uma URL ou uma requisição HTTP capturada — e cada descoberta retorna com o nível que conquistou.

Cada confirmed baseia-se em um valor que o RCEKit gerou aleatoriamente para aquela sondagem e que a reflexão não pode produzir: um resultado computado presente na resposta e ausente de um controle sem payload, ou um callback out-of-band carregando um token que apenas o alvo detinha. Sinais mais fracos mantêm seus próprios níveis e nunca são promovidos a ele. E uma execução que não conseguiu testar algo nunca o reporta como limpo.


Prova, não "talvez"

O RCEKit confirma RCE através de múltiplos métodos sob uma única CLI. Abaixo ele é apontado para CVEs reais e publicamente documentadas em software de produção — cada veredito diferenciado contra um controle sem payload:

Classe de RCE--methodsAlvo do mundo realVeredito
Injeção de comando do SO (baseada em resultados)reflectedWebmin 1.910 — CVE-2019-15107confirmed
Injeção de expressão (OGNL)evalApache Struts2 — S2-001confirmed
Expression-lookup (Log4Shell/JNDI)lookupApache Solr 8.11.0 (Log4j 2.14.1) — CVE-2021-44228lookup-sink
Injeção de comando cega (sem saída)timeWebmin 1.910 — CVE-2019-15107needs-review

Cada linha é reproduzida por tests/bench/, que executa o RCEKit contra essas builds sob Docker e verifica o veredito e seu controle negativo. Última execução verde em 2.36.0 (2026-09-20): 3/3 casos. Essa é uma afirmação pontual, não contínua -- o benchmark é executado em uma cadência, não a cada alteração.

Cada controle é o teste real da linha. Struts2 sondado com reflected retorna negative, porque S2-001 reavalia OGNL e não há shell por trás dele. O sinal time do Webmin é mantido em needs-review em um alvo onde ele por acaso está correto. E o Solr sondado com oob retorna negative embora seja explorável -- oob constrói comandos de shell e um sink ${jndi:...} não executa nenhum deles, que é a lacuna que lookup existe para fechar, medida em vez de afirmada.

A linha do Log4Shell diz lookup-sink, não confirmed: o que o callback prova é que o sink resolveu uma URI escolhida pelo RCEKit. Alcançar RCE requer um servidor que responda à consulta com uma classe carregável, e no nível de risco padrão apenas jndi:dns:// sai -- uma consulta de nome, sem conexão além dela para tal servidor responder.

reflected — injeção de comando do SO, Webmin CVE-2019-15107 → confirmed

RCEKit confirmando injeção de comando do SO no Webmin 1.910 (CVE-2019-15107): o shell calcula aritmética sobre operandos aleatórios, o resultado é refletido na resposta e ausente de um controle sem payload

eval — injeção de expressão OGNL, Apache Struts2 S2-001 → confirmed

RCEKit confirmando injeção de expressão OGNL no Apache Struts2 (S2-001): o payload %{ab} avalia para o produto na resposta enquanto o literal ab não

out-of-band — Log4Shell cego (CVE-2021-44228) via callback DNS → lookup-sink

RCEKit correlacionando um callback DNS de Log4Shell cego (CVE-2021-44228) de volta ao payload exato que o produziu: o token no nome consultado é um que apenas o alvo poderia ter aprendido ao resolver a URI que lhe foi entregue

time — injeção de comando cega, Webmin CVE-2019-15107 → needs-review

RCEKit medindo uma resposta de temporização linear no Webmin 1.910 (CVE-2019-15107): o tempo de resposta acompanha uma série controlada de atrasos 0/N/2N — um candidato de temporização needs-review, nunca confirmado por si só


Início rápido

O RCEKit tem duas formas suportadas, e nenhuma é um substituto da outra.

Instale-o — pipx mantém a CLI em seu próprio ambiente, que é o que você quer para uma ferramenta em vez de uma biblioteca:```bash pipx install rcekit # or: pip install rcekit rcekit --doctor # confirms the corpus it will run with

root@kitploit:~
**Ou leve apenas o único arquivo.** O corpus de payloads é incorporado ao módulo, então
`rcekit.py` é executado sozinho sem nada ao lado — nenhuma etapa de instalação, nenhum
site-packages, nada para deixar para trás. Em uma jump box de cliente, um host
air-gapped, ou em qualquer lugar onde `pip install` não é uma opção:```bash
curl -O https://raw.githubusercontent.com/kabiri-labs/rcekit/main/rcekit.py
python rcekit.py --doctor    # same corpus, same check, zero installation

Ambos executam o mesmo código e reportam os mesmos veredictos. Trabalhar a partir de um checkout é a terceira forma, e também não requer instalação:```bash git clone https://github.com/kabiri-labs/rcekit.git cd rcekit # Python 3.8+, standard library only

root@kitploit:~
Coloque um marcador `FUZZ` onde sua entrada chega (ou selecione um parâmetro com `-p` ao
usar uma requisição capturada), e peça ao RCEKit para provar o RCE:```bash
rcekit --acknowledge-consent \
  --verify-url "https://target.example/lookup?host=FUZZ" \
  --methods reflected,eval

| -s | --server | SERVER | http://localhost:8080 | URL do servidor | | -t | --token | TOKEN | null | Token de autenticação | | -u | --username | USERNAME | null | Nome de usuário para autenticação | | -p | --password | PASSWORD | null | Senha para autenticação | | -k | --insecure | INSECURE | false | Ignorar verificação de certificado TLS | | -c | --config | CONFIG | null | Caminho para o arquivo de configuração | | -v | --verbose | VERBOSE | false | Ativar saída detalhada | | -d | --debug | DEBUG | false | Ativar saída de depuração | | -h | --help | HELP | false | Exibir mensagem de ajuda | | -V | --version | VERSION | false | Exibir informações da versão |``` [detect] methods: reflected, eval [detect] sent 13 probes: confirmed=4, negative=9

[detect] CONFIRMED execution (4): [reflected/unix/raw] ; echo RKYZRIP$((540141+314681))RKFWVFS$(echo RKBWOOC)RKYZRIP (target computed 'RKYZRIP854822RKFWVFSRKBWOOCRKYZRIP' — random operands, absent from control)

root@kitploit:~
### De uma requisição capturada — a forma que a maioria dos alvos reais tem

Um `--verify-url` carrega uma URL e nada mais. A maioria dos sinks que vale a pena testar fica
atrás de um POST com um cookie de sessão, um content type e um body, e o RCEKit recebe
essa requisição por inteiro: salve-a do seu proxy ou do devtools do seu navegador e nomeie
o campo no qual injetar.```bash
rcekit --acknowledge-consent \
  -r search.req -p q \
  --methods reflected,eval
  • --no-verify — Pula a verificação de integridade do arquivo de saída.
  • --no-cleanup — Mantém os arquivos temporários após a conclusão.
  • --verbose — Ativa a saída de log detalhada.
  • --quiet — Suprime toda a saída, exceto erros.

Exemplos

root@kitploit:~
# Verificação básica de integridade
python3 cve_2025_55182.py -t https://alvo.exemplo.com

# Verificação com autenticação
python3 cve_2025_55182.py -t https://alvo.exemplo.com -u admin -p senha

# Especificar arquivo de saída personalizado
python3 cve_2025_55182.py -t https://alvo.exemplo.com -o resultado.json

# Modo detalhado com limpeza desativada
python3 cve_2025_55182.py -t https://alvo.exemplo.com --verbose --no-cleanup

Como Funciona

A ferramenta segue um fluxo de verificação em várias etapas:

  1. Descoberta — Identifica o endpoint de destino e confirma a acessibilidade.
  2. Preparação — Cria um arquivo de teste com conteúdo controlado.
  3. Envio — Envia o arquivo através do mecanismo de upload vulnerável.
  4. Verificação — Recupera o arquivo enviado e compara os hashes.
  5. Relatório — Gera um relatório estruturado com os resultados.

Aviso Legal

Esta ferramenta destina-se apenas a testes de segurança autorizados e pesquisa educacional. O uso não autorizado contra sistemas sem consentimento explícito por escrito é ilegal e antiético. Os autores não se responsabilizam por qualquer uso indevido ou dano causado por esta ferramenta.

Sempre obtenha a devida autorização antes de testar qualquer sistema.``` [detect] sent 4 probes: confirmed=3, negative=1

[detect] CONFIRMED execution (3): [reflected/unix/raw] ; echo RKHWNHK$((114157+752773))RKXGFIH$(echo RKHSEIF)RKHWNHK (target computed 'RKHWNHK866930RKXGFIHRKHSEIFRKHWNHK' — random operands, absent from control)

root@kitploit:~
O método, o caminho, os cabeçalhos, o corpo e os cookies são reutilizados tal como capturados, e cada valor é codificado para o contexto em que é inserido — um valor JSON, um campo de formulário e um cookie não são escapados da mesma forma. Remova `-p` e marque o local com `FUZZ` ou `*`, se preferir.

### Tudo o que a ferramenta tem

Duas coisas só são acessíveis a partir de um pedido capturado: a **enumeração de pontos de injeção** (`--auto-params`) e qualquer sink que necessite de uma sessão. Portanto, a execução mais completa que o RCEKit consegue fazer começa a partir de `-r`, não de um URL — o que vale a pena saber antes de concluir que um alvo está limpo.```bash
rcekit --acknowledge-consent \
  -r search.req --auto-params all --point-order thorough \
  --methods reflected,eval,time,lookup,deser \
  --oob-host oob.yourdomain.example --listen-dns-port 53 \
  --verify-active-risk stateful --probe-depth full \
  --detect-json findings.json

| -s | --server | SERVER | http://localhost:8080 | URL base do servidor | | -t | --token | TOKEN | | Token de autenticação | | -k | --insecure | | false | Ignorar erros de TLS | | -o | --output | FORMAT | text | Formato de saída (text, json) | | -v | --verbose | | false | Ativar registro detalhado | | -q | --quiet | | false | Suprimir saída não essencial | | -c | --config | FILE | ~/.config/tool/config.yaml | Caminho do arquivo de configuração | | -n | --dry-run | | false | Simular sem executar ações | | -f | --force | | false | Forçar operação sem confirmação | | -y | --yes | | false | Responder sim a todos os prompts | | -d | --debug | | false | Ativar saída de depuração | | -h | --help | | | Exibir mensagem de ajuda | | -V | --version | | | Exibir informações da versão |

Exemplos

root@kitploit:~
# Execução básica
tool scan --target example.com

# Especificar porta e protocolo
tool scan --target example.com --port 443 --protocol https

# Saída em JSON
tool scan --target example.com --output json

# Usar arquivo de configuração
tool scan --config /path/to/config.yaml

# Modo detalhado com depuração
tool scan --target example.com --verbose --debug

# Simulação sem executar
tool scan --target example.com --dry-run

# Forçar operação sem confirmação
tool scan --target example.com --force

# Responder sim a todos os prompts
tool scan --target example.com --yes

Arquivo de Configuração

O arquivo de configuração usa o formato YAML:

root@kitploit:~
server: http://localhost:8080
token: your-token-here
insecure: false
output: text
verbose: false
quiet: false
timeout: 30
retries: 3

Variáveis de Ambiente

VariávelDescrição
TOOL_SERVERURL do servidor
TOOL_TOKENToken de autenticação
TOOL_INSECUREIgnorar erros de TLS
TOOL_OUTPUTFormato de saída
TOOL_VERBOSEAtivar registro detalhado
TOOL_QUIETSuprimir saída não essencial
TOOL_CONFIGCaminho do arquivo de configuração
TOOL_TIMEOUTTempo limite em segundos
TOOL_RETRIESNúmero de tentativas

Códigos de Saída

CódigoDescrição
0Sucesso
1Erro geral
2Uso incorreto do comando
3Erro de configuração
4Erro de autenticação
5Erro de rede
6Tempo limite excedido
7Permissão negada
8Recurso não encontrado
9Recurso já existe
10Operação cancelada

Solução de Problemas

Erro: Conexão recusada

Verifique se o servidor está em execução e se a URL está correta:

root@kitploit:~
curl -v http://localhost:8080/health

Erro: Autenticação falhou

Verifique se o token está correto e não expirou:

root@kitploit:~
tool auth status

Erro: Tempo limite excedido

Aumente o tempo limite ou verifique a conectividade de rede:

root@kitploit:~
tool scan --target example.com --timeout 60

Erro: Permissão negada

Execute com privilégios elevados ou verifique as permissões do arquivo:

root@kitploit:~
sudo tool scan --target example.com

Contribuindo

Contribuições são bem-vindas! Por favor, siga estas etapas:

  1. Faça um fork do repositório
  2. Crie uma branch para sua funcionalidade (git checkout -b feature/nova-funcionalidade)
  3. Faça commit das suas alterações (git commit -am 'Adiciona nova funcionalidade')
  4. Faça push para a branch (git push origin feature/nova-funcionalidade)
  5. Abra um Pull Request

Licença

Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

Agradecimentos

  • Contribuidor 1
  • Contribuidor 2
  • Contribuidor 3

Aviso Legal

Esta ferramenta é destinada apenas para testes de segurança autorizados e fins educacionais. Os usuários são responsáveis por garantir que têm permissão para testar os sistemas de destino. Os autores não se responsabilizam por qualquer uso indevido ou danos causados por esta ferramenta.

Contato

  • Site: https://example.com
  • Twitter: @example
  • Email: [email protected]``` [verify] loaded request from search.req: enumerating 4 injection point(s) [detect] enumerating 4 injection point(s) x 3 method(s) [detect] cost: 4 points x ~1739 probes = at least 6964 requests [detect] body param 'q': confirmed (1544 probes) <-- CONFIRMED [detect] sent 6371 probes: confirmed=446, negative=5925
root@kitploit:~
O que cada flag abre:

| | |
|---|---|
| `--auto-params all` | cada valor de query, folha JSON, campo de formulário, parte multipart, cookie e header, em vez de um campo nomeado |
| `--point-order thorough` | cada header não hop-by-hop, não apenas os de alto rendimento |
| `--methods ...,lookup,deser` | sinks de expression-lookup e desserialização, que os métodos em forma de shell não alcançam |
| `--oob-host` | um host de callback para os métodos cegos. Precisa de um domínio delegado a você; a porta 53 precisa de root |
| `--verify-active-risk stateful` | o degrau mais alto — adiciona as formas de probe que fazem o alvo buscar de um endereço que o RCEKit não escolheu |
| `--probe-depth full` | cada forma de break-out por sink, não apenas as baratas |
| `--detect-json` | os mesmos veredictos em JSON legível por máquina |

**Isto é um monte de requisições.** A linha de custo é impressa antes de qualquer coisa disparar, e
`--max-points` / `--max-payloads` a limitam. Execute contra uma instância que você tem
permissão para quebrar: `--verify-active-risk stateful` é o nível para um alvo descartável, não para produção.

Sem infraestrutura externa, sem arquivo de configuração.

**Não confie nos GIFs** — [reproduza-os você mesmo](https://github.com/kabiri-labs/rcekit/blob/main/docs/verify-it-yourself.md)
contra alvos Webmin e Struts2 dockerizados em cerca de cinco minutos.

**A seguir:** o [**guia de campo**](https://github.com/kabiri-labs/rcekit/blob/main/docs/guide.md) percorre as situações reais — requisições
capturadas, WAFs, separadores filtrados, sinks entre aspas, alvos cegos e sem egresso —
um exemplo prático cada.

---

## O que um veredicto significa

Encontrar um *candidato* a RCE é fácil. Reportar um que sobreviva ao reteste de outra pessoa
é a parte difícil, e falha em duas direções: um "possivelmente vulnerável" que acaba sendo
reflexão, e um "não vulnerável" de uma execução que na verdade nunca testou nada.

O RCEKit responde com **oito veredictos que nunca são colapsados uns nos outros**:

| Veredicto | O que ele afirma |
|---|---|
| **`confirmed`** | O alvo executou a entrada. Retornou um valor que não poderia produzir de outra forma — computado a partir de operandos aleatórios para aquele probe — e esse valor está ausente de um controle sem payload. |
| **`deserialization-sink`** | O alvo reconstruiu um grafo de objetos fornecido pelo atacante. Comprovado, mas sobre uma *propriedade diferente*: alcançar RCE a partir daí depende de gadgets no classpath, então nunca é chamado de RCE. |
| **`lookup-sink`** | O alvo resolveu uma URI que o RCEKit entregou — uma expressão `${jndi:…}` alcançou um lookup, comprovado por um callback carregando um token que só aquele probe possuía. É um sink, não execução: alcançar RCE a partir daí precisa de um servidor respondendo com uma classe carregável. |
| **`needs-review`** | Um sinal real que não é prova por si só — uma regressão de timing linear, uma fingerprint de parser. Vale o seu tempo, nunca vale a palavra "confirmed". |
| **`inconclusive`** | A evidência apareceu, mas não pôde ser atribuída à execução — o controle sem payload também a carregava. |
| **`negative`** | Probes foram construídos, alcançaram o alvo e não encontraram nada. |
| **`error`** | Nada alcançou o alvo. |
| **`nothing-tested`** | Nenhum probe foi construído. |

No momento em que `confirmed` e `maybe` se confundem, `confirmed` deixa de significar qualquer coisa — então
nada é jamais promovido para cima. Uma regressão de timing permanece `needs-review` por mais
limpa que seja a inclinação. Um callback de desserialização permanece `deserialization-sink` por mais
certo que você esteja de que o classpath é explorável.

### A outra metade: uma execução que não testou nada nunca é limpa

As duas últimas linhas são as que outras ferramentas não têm, e importam mais do que
parecem. Um scanner que não conseguiu alcançar o alvo, ou não construiu nenhum probe porque
suas flags excluíram todos eles, não aprendeu **nada** sobre o alvo —
e imprimir `negative` ali é uma mentira que se lê exatamente como segurança.

Então `error` e `nothing-tested` são veredictos de primeira classe, a execução sai com código diferente de zero,
e o RCEKit diz qual deles aconteceu e por quê:```
[!] No probes were built, so NOTHING WAS TESTED — this is not a negative result.
[!] None of the selected methods (reflected, file) apply to environment(s): sql.

Ele dispara onde quer que uma execução possa silenciosamente se tornar vazia: um método que não se aplica aos ambientes selecionados, um degrau de --sink-shape para o qual o shell escolhido não tem sintaxe, uma seleção de --bridges inteiramente retida pelo teto de segurança, um corpo de requisição que quebrou a entrega antes de chegar.

Uma execução que foi apenas parcialmente cegada recebe o mesmo tratamento um nível abaixo. Se você pediu um oráculo de segunda ordem e o endpoint observado nunca respondeu, os veredictos das sondagens ainda se mantêm — mas a execução informa que eles foram decididos sem nunca ler o canal que você apontou, em vez de deixá-los passar como um negativo de segunda ordem.


O que ele confirma

Uma CLI, uma flag --methods, cobrindo os principais caminhos para RCE:

Classe de RCE--methodsComo o RCEKit prova
Injeção de comando do SOreflectedFaz o shell calcular $((a+b)) sobre operandos aleatórios e colapsar $(echo TAG); confirma o resultado, nunca a expressão literal. Escrito no próprio dialeto do sink — POSIX, cmd.exe ou PowerShell.
Injeção de código / expressão — SSTI, SpEL, OGNL, Groovy, eval() (CWE-94)evalInjeta a*b em toda sintaxe de template comum (${…} {{…}} #{…} %{…} <%=…%> @(…), sem delimitadores); confirma que o produto aparece enquanto o literal a*b não.
Injeção de comando cega (sem saída)timeDispara uma série controlada de atrasos 0/N/2N e confirma que o tempo de resposta acompanha o atraso linearmente; reportado como needs-review — jitter não consegue falsificá-lo, mas timing não é um valor computado.
Alvos internos / sem egressofileEscreve um token aleatório e o busca de volta através de qualquer caminho de leitura — uma raiz web, um parâmetro LFI, um handler de download ou exportação, uma pré-visualização apoiada em /tmp. Prova execução mais uma primitiva de escrita, sem listener externo.
Primitiva de upload / escrita — PUT-a-JSP, upload não verificado (CWE-434)writeEscreve um one-liner que calcula um produto através da sua própria requisição de upload, depois busca o arquivo: o produto é RCE confirmed, o código-fonte retornando literalmente é needs-review — escrita arbitrária de arquivo, servido mas não interpretado.
Sinks de desserialização — fastjson, shiro, weblogic (CWE-502)deserProva que o endpoint desserializa dados do atacante, via um gadget DNS não-executável ou um diferencial de forma de erro. Reportado como , como RCE.

Três coisas ampliam onde esses métodos podem alcançar, sem mudar o que qualquer um deles chamará de confirmed:

  • Execução de segunda ordem (--observe-url) — quando o payload chega em uma requisição e executa em outra: SSTI armazenado renderizado em uma página de perfil, um payload escrito em um log que um motor de template posteriormente renderiza, um job enfileirado. O endpoint observado é diferenciado contra um snapshot tirado antes de qualquer sondagem ser enviada.
  • Pontes de linguagem de consulta (--bridges) — COPY … FROM PROGRAM, xp_cmdshell, expect://. Uma ponte é um transportador, não um oráculo: ela envolve o comando que os métodos já constroem, então os mesmos níveis se aplicam através dela.
  • Enumeração de pontos de injeção (-p all) — query, folhas JSON, campos de formulário, partes multipart, cookies, cabeçalhos e segmentos de caminho, cada um codificado para onde cai, com o custo da sondagem impresso antes de qualquer disparo. Um corpo GraphQL é ordenado pelo que pode realmente confirmar: as variables que um resolver lê antes do próprio documento de operação.

Combine métodos livremente: --methods reflected,eval,time executa os três e reporta cada nível separadamente.

Escopo honesto. O RCEKit confirma RCE que é alcançável por injeção em uma requisição e interpretado por um shell ou um avaliador. Ele não cobre bugs de corrupção de memória (buffer overflow, UAF) ou injeção de argumentos em um array argv sem shell — esses são problemas diferentes. Cadeias de gadgets de desserialização também ficam fora do escopo: --methods deser prova que um endpoint desserializa dados do atacante e o diz em seu próprio nível, mas qual gadget (se algum) transforma isso em execução depende do classpath do alvo, e o RCEKit não afirma saber. Ele visa ser excelente nas classes de RCE orientadas por injeção acima em vez de medíocre em tudo.


Como o RCEKit se compara

As outras ferramentas neste espaço são construídas para te colocar dentro. O RCEKit é construído para que o achado sobreviva ao escrutínio de outra pessoa — o reteste do cliente, a fila de triagem, a revisão do relatório. Essa diferença aparece três vezes.

1. Um ponto de injeção, todas as classes, uma execução

Você raramente sabe a classe antes de testar. Cobrir um sink desconhecido com ferramentas de classe única significa executar cada uma por vez e reconstruir a requisição para cada uma:

Pode confirmarRCEKitcommixSSTImapNuclei
Injeção de comando do SO✅✅ (todo o seu escopo)—por template
Injeção de expressão / SSTI✅via sua técnica baseada em eval✅ (todo o seu escopo)por template
Cego — timing✅ como um nível separado✅✅—
Cego — fora de banda✅ listener embutido——via interactsh
Sem egresso — escrever & buscar de volta✅ qualquer caminho de leitura✅ (raiz web)——
Sinks cmd.exe e PowerShell✅ sondagens por dialeto✅ (cmd)—por template
Upload → escrever-depois-executar✅ escrita vs. execução, níveis separados——por template
Segunda ordem — chega aqui, executa lá✅———
Ponte de linguagem de consulta para o SO✅——por template
Sink de desserialização✅ nível próprio, nunca chamado de RCE——por template
Tudo o acima, uma CLI, uma execução✅———

Cobertura conforme a lista de técnicas documentadas de cada projeto. SSTImap é o sucessor mantido do tplmap, que seu autor marcou como não mantido.```bash

Command injection, expression injection and blind timing against the same

parameter, in one pass, with zero infrastructure

python rcekit.py --acknowledge-consent -r request.txt -p host --methods reflected,eval,time

root@kitploit:~
### 2. Ele discute com os próprios resultados

Uma ferramenta relata o que encontrou. O RCEKit também relata **no que se recusou a acreditar** —
`inconclusive` é um veredito próprio, para evidências que apareceram mas não puderam
ser atribuídas à execução:```
[detect] methods: reflected, eval
[detect] sent 13 probes: confirmed=0, inconclusive=2, negative=11

Aqueles dois teriam sido descobertas de outra pessoa. Cinco mecanismos produzem esse veredito, e eles são executados em cada confirmação:

  • Uma requisição de controle sem payload. A evidência deve estar presente com o payload e ausente sem ele. Qualquer coisa em ambos é inconclusive, não uma descoberta.
  • Um controle inerte com o mesmo token. Uma segunda requisição carrega o token aleatório idêntico em uma forma não executável. Um alvo que meramente ecoa a entrada falha aqui — que é como uma reflexão é separada de uma execução.
  • Operandos aleatórios, nunca strings fixas. O oráculo é uma soma envolta em tag ou um produto delimitado por fronteira calculado do zero a cada execução. Ecoar o payload retorna o literal $((a+b)); apenas a execução retorna o valor.
  • Busca de evidência ciente de codificação. Um sink que aplica base64, hex, URL, HTML ou unicode-escape à sua saída ainda confirma — o corpo bruto é verificado primeiro, então a decodificação só transforma um acerto perdido em acerto, nunca o contrário.
  • Busca de evidência em toda a resposta. O valor computado é procurado em todos os canais da resposta — corpo, cabeçalhos da aplicação, valores de cookie, o alvo de redirecionamento, a frase de razão HTTP, e cada folha de um envelope de erro JSON — e a descoberta nomeia o canal que o carregou. O diferencial de controle é aplicado a todos os canais também, então ampliar onde o RCEKit procura não amplia o que ele chamará de confirmed.

O mesmo instinto funciona no sentido oposto. Timing nunca se autoconfirma, um callback de desserialização nunca é chamado de RCE, e uma execução que não construiu nenhuma sonda nunca é chamada de negativa.

3. É construído para um engajamento autorizado, não para um laboratório

Os controles que as regras de engajamento de um cliente realmente pedem, na ferramenta em vez de nas suas anotações:

Portão de consentimentoNada exploratório é gerado ou disparado sem --acknowledge-consent.
Plano de execuçãoImprime a contagem exata de sondas, formas de sink, níveis de segurança e quaisquer destinos de callback de saída antes da primeira requisição sair.
Seguro por padrãoReverse shells, acesso a credenciais, metadados de nuvem, movimento lateral e escape de contêiner são retidos até você elevar --verify-active-risk; persistência e backdoors precisam de uma segunda flag além disso. Pontes que criam um objeto no alvo estão sujeitas ao mesmo teto.
Comandos de limpezafile, write e as pontes com estado alteram o estado do alvo, então cada descoberta — incluindo um needs-review — imprime o que executar para desfazê-la.
Credenciais permanecem no lugarA busca de leitura de file carrega os cabeçalhos Authorization/Cookie da execução apenas para a mesma origem, e diz isso em voz alta quando os retém. A busca de canal observado não envia nenhum, a menos que você forneça uma requisição com --observe-request.
Trilha de auditoria redigidaCada execução é registrada em exploit_audit.log, registrando que um cabeçalho de credencial foi enviado, nunca o seu valor.
Marca d'água--watermark insere um token rastreável em cada payload, para que um payload encontrado nos logs do cliente meses depois seja atribuível à sua execução.
Sem callbacks de terceirosO listener OOB é seu. Nada é roteado através de um servidor de interação público, o que alguns engajamentos proíbem terminantemente.
Um único arquivo stdlibrcekit.py roda sozinho — jump box, host air-gapped, em qualquer lugar onde pip install não é uma opção.

Quando recorrer a outra coisa

Quer um shell em vez de um veredito? commix e SSTImap continuam para pós-exploração; o RCEKit para na prova por design. Varrendo milhares de hosts em busca de CVEs conhecidas? Esse é o trabalho do Nuclei — e o RCEKit escreve templates do Nuclei (--output-format nuclei), então ele alimenta o seu scanner em vez de competir com ele. Já sabe que a injeção é SQL e quer o banco de dados em si? sqlmap domina esse terreno — as pontes do RCEKit existem para provar que o SO é alcançável a partir de um parâmetro de texto, não para explorar o banco de dados.


Encontre a sua situação

Cada linha é um exemplo prático no guia de campo — o comando, o que ele envia, e como ler o que volta.

SituaçãoVá para
Tenho uma URL e um parâmetroAponte para uma URL
Tenho uma requisição salva do BurpAponte para uma requisição capturada
A aplicação é JSON / o payload continua sendo corrompidoFazendo o payload chegar intacto
Não sei qual classe éEscolhendo métodos
O sink remove ;Quando o sink filtra separadores
Minha entrada cai dentro de 'aspas'Injetando dentro de aspas
O sink executa minha entrada como o comando inteiroSinks de comando inteiro
O alvo é Windows ou o sink é PowerShellSinks Windows e PowerShell
Há um WAFContornando um WAF
Nenhuma saída voltaAlvos cegos
Nenhuma saída e nenhuma saída de redeAlvos sem saída de rede
A requisição armazena um arquivo em vez de executar algoAlvos de upload e primitiva de escrita
O payload executa depois, em uma requisição diferente

Documentação

Verifique você mesmoReproduza as confirmações acima na sua própria máquina, contra alvos vulneráveis em docker. Cinco minutos.
Guia de campoPasso a passo orientado a exemplos de cada situação real, da primeira sonda a cadeias multi-etapa. Comece aqui.
Geração de payload & exportaçõesO RCEKit como gerador de payload: perfis de alvo, e exportações para Burp / ffuf / Nuclei.
ReferênciaCada flag, ambiente, categoria, contexto, codificação e sink de execução de código.
CHANGELOG.mdO que mudou em cada versão, e o que reverificar ao atualizar.
CONTRIBUTING.mdComo adicionar sinks, categorias, codificações e métodos de detecção.
SECURITY.mdReportando uma vulnerabilidade no próprio RCEKit.

Segurança & ética

O RCEKit explora, e esse é o ponto. Uma vulnerabilidade é confirmada fazendo o alvo executar a coisa, porque essa é a única evidência que uma assinatura não pode falsificar e uma build corrigida não pode produzir por acidente. O que limita uma execução não é a relutância em explorar. São dois fatos estruturais e um interruptor.

Ele não aceita nenhum payload arbitrário seu. As sondas são construídas pelo motor para servir a um oráculo — aritmética sobre operandos aleatórios para aquela sonda, um nome que apenas esta execução poderia ter escolhido. Não há entrada que transforme a detecção em outra coisa, porque não há tal entrada a fornecer.

Qualquer coisa que vá além de computar um valor declara o nível que precisa, então uma flag decide até onde uma execução vai: --verify-active-risk safe | intrusive | stateful. Um método ou uma forma de sonda única acima desse nível é retido pelo nome, com a flag que o enviaria — uma escada que encolhe silenciosamente é indistinguível de um alvo sem nada a encontrar. Contra uma instância descartável, eleve o nível e obtenha tudo o que a ferramenta tem.

  • Portão de consentimento — geração e verificação de exploração exigem --acknowledge-consent; --detection-only é benigno e não exige.
  • Seguro por padrão — a verificação dispara apenas provas de baixo impacto; reverse shells, download-execute, acesso a credenciais, movimento lateral, escape de contêiner, metadados de nuvem e payloads OOB são retidos até você elevar --verify-active-risk. Payloads destrutivos (persistência, backdoors) nunca são disparados sem --verify-allow-destructive. Um plano de execução imprime exatamente o que será enviado antes de qualquer coisa disparar.
  • Níveis de segurança — safe / intrusive / stateful. Payloads do corpus são filtrados por --max-safety; métodos de detecção e suas formas de sonda declaram os mesmos degraus e são filtrados por --verify-active-risk, então um método que faz o alvo se comunicar externamente ou deixa algo para trás está sujeito à mesma ordenação que cada payload do corpus. O pré-voo nomeia o nível que cada item retido realmente precisa. file e write são controlados pela sua própria configuração em vez disso: nenhum dos dois faz nada até você nomear um diretório para escrever e uma URL para ler de volta.
  • Auditoria & logging — cada execução de exploração/verificação é registrada em exploit_audit.log; --watermark incorpora um token rastreável; logs de execução vão para rcekit.log.
  • Integridade do corpus — um corpus corrompido, ou um --template-file explícito que está ausente, faz o RCEKit se recusar a rodar e sair com código diferente de zero em vez de gerar silenciosamente nada (--doctor verifica isso). Apenas um arquivo de corpus padrão ausente recorre à cópia embutida, e ele avisa quando o faz.

Este toolkit destina-se apenas a testes de penetração autorizados, pesquisa de segurança, educação e treinamento defensivo. Nunca o use contra sistemas sem permissão explícita — testes não autorizados são ilegais.

Desenvolvimento```bash

python -m unittest discover -s tests # dependency-free test suite

root@kitploit:~
Contribuições são bem-vindas — novos sinks/categorias, codificações, ambientes, métodos
de detecção, correções de bugs e documentação. As bases de payload ficam em templates JSON
editáveis (`templates/payloads.json`), então a maior parte da cobertura é estendida sem tocar no
código-fonte Python. Após alterar o corpus, atualize a cópia embutida que acompanha o
`rcekit.py`:```bash
python tools/embed_corpus.py    # --check verifies it is current

A suíte de testes falha se os dois divergirem. Consulte CONTRIBUTING.md.

Licença

MIT — consulte LICENSE.

Baixar ferramenta
deserialization-sink
nunca
Cego / fora de banda — exfil, assíncronooobListener HTTP/DNS embutido recebe callbacks e correlaciona cada um ao payload exato; cada sondagem carrega seu próprio token.
Sinks de lookup de expressão — Log4Shell/JNDIlookupO sink resolve uma URI ${jndi:…} em vez de executar um comando, então as sondagens de shell do oob não alcançam nada. Prova apenas pelo callback e reporta lookup-sink, nunca confirmed. Apenas jndi:dns:// é enviado — uma consulta de nome e nada mais — então o que é provado é o lookup, não uma cadeia de gadgets.
Quando a execução acontece em outra requisição
O ponto de injeção é SQL e o sink é o host do banco de dadosPontes de linguagem de consulta
O endpoint recebe um objeto serializadoSinks de desserialização
O sink está atrás de um login ou de um upload de arquivoCadeias multi-etapa
Recebi needs-review / inconclusive / errorLendo os resultados
Diz que o corpus é inutilizávelSolução de problemas