Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Invia
StrumentiExploitsBlog
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
rcekit — Toolkit per il rilevamento e la conferma di RCE che verifica URL o richieste HTTP catturate per command injection, SSTI, percorsi blind e OOB, restituendo verdetti a livelli con prova. | Kitploit
Strumenti/GitHubGitHub/kabiri-labs/rcekit
Scanner di VulnerabilitàScanner di Vulnerabilità WebGenerazione di PayloadAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebFuzzingPenetration TestingCommand and ControlUtilità e FrameworkRed Teaming
142502 giorni faNon ancora revisionato
GitHubkabiri-labs/rcekit

rcekit

Toolkit per il rilevamento e la conferma di RCE che verifica URL o richieste HTTP catturate per command injection, SSTI, percorsi blind e OOB, restituendo verdetti a livelli con prova.

Vedi Repository

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

RCEKit

confirmed significa che il target ha eseguito l'input. negative significa che le sonde lo hanno raggiunto.

Versione 2.40.0 · MIT · Python 3.8+ · zero dipendenze di terze parti

RCEKit è un toolkit di rilevamento e conferma RCE per penetration testing autorizzato, red teaming e ricerca sulla sicurezza. Puntalo verso un target che sei autorizzato a testare — un URL o una richiesta HTTP catturata — e ogni risultato torna con il livello che ha guadagnato.

Ogni confirmed si basa su un valore che RCEKit ha generato casualmente per quella sonda e che quella riflessione non può produrre: un risultato calcolato presente nella risposta e assente da un controllo senza payload, oppure un callback out-of-band che trasporta un token che solo il target ha mai posseduto. I segnali più deboli mantengono i propri livelli e non vengono mai promossi a confirmed. E un'esecuzione che non ha potuto testare qualcosa non lo riporta mai come pulito.


Prove, non "forse"

RCEKit conferma RCE attraverso molteplici metodi sotto un'unica CLI. Di seguito è puntato verso CVE reali e documentati pubblicamente in software di produzione — ogni verdetto differenziato rispetto a un controllo senza payload:

Classe RCE--methodsTarget realeVerdetto
OS command injection (basata su risultati)reflectedWebmin 1.910 — CVE-2019-15107confirmed
Expression injection (OGNL)evalApache Struts2 — S2-001confirmed
Expression-lookup (Log4Shell/JNDI)lookupApache Solr 8.11.0 (Log4j 2.14.1) — CVE-2021-44228lookup-sink
Blind command injection (nessun output)timeWebmin 1.910 — CVE-2019-15107needs-review

Ogni riga è riprodotta da tests/bench/, che esegue RCEKit contro queste build sotto Docker e verifica il verdetto e il suo controllo negativo. Ultima esecuzione verde alla 2.36.0 (2026-09-20): 3/3 casi. Questa è una affermazione puntuale, non continua -- il benchmark viene eseguito con una cadenza, non a ogni modifica.

Ogni controllo è il vero test della riga. Struts2 sondato con reflected torna negative, perché S2-001 rivaluta OGNL e non c'è una shell dietro di esso. Il segnale time di Webmin è mantenuto a needs-review su un target dove capita di essere corretto. E Solr sondato con oob torna negative sebbene sia sfruttabile -- oob costruisce comandi shell e un sink ${jndi:...} non ne esegue nessuno, che è il divario che lookup esiste per colmare, misurato piuttosto che asserito.

La riga Log4Shell dice lookup-sink, non confirmed: ciò che il callback prova è che il sink ha risolto un URI scelto da RCEKit. Raggiungere RCE richiede un server che risponda alla lookup con una classe caricabile, e al livello di rischio predefinito solo jndi:dns:// esce -- una name lookup, senza alcuna connessione oltre essa per un tale server a cui rispondere.

reflected — OS command injection, Webmin CVE-2019-15107 → confirmed

RCEKit conferma OS command injection su Webmin 1.910 (CVE-2019-15107): la shell calcola aritmetica su operandi casuali, il risultato è riflesso nella risposta e assente da un controllo senza payload

eval — OGNL expression injection, Apache Struts2 S2-001 → confirmed

RCEKit conferma OGNL expression injection su Apache Struts2 (S2-001): il payload %{ab} si valuta nel prodotto nella risposta mentre il letterale ab no

out-of-band — blind Log4Shell (CVE-2021-44228) tramite un callback DNS → lookup-sink

RCEKit correla un callback DNS blind Log4Shell (CVE-2021-44228) al payload esatto che lo ha prodotto: il token nel nome interrogato è uno che solo il target avrebbe potuto apprendere risolvendo l'URI che gli è stato fornito

time — blind command injection, Webmin CVE-2019-15107 → needs-review

RCEKit misura una risposta temporale lineare su Webmin 1.910 (CVE-2019-15107): il tempo di risposta segue una serie di ritardi controllati 0/N/2N — un candidato timing needs-review, mai confermato da solo


Avvio rapido

RCEKit ha due forme supportate, e nessuna è un fallback per l'altra.

Installalo — pipx mantiene la CLI nel proprio ambiente, che è ciò che vuoi per uno strumento piuttosto che una libreria:```bash pipx install rcekit # or: pip install rcekit rcekit --doctor # confirms the corpus it will run with

root@kitploit:~
**Oppure prendi solo quel singolo file.** Il corpus di payload è integrato nel modulo, quindi
`rcekit.py` funziona da solo senza nient'altro accanto — nessun passaggio di installazione, nessun
site-packages, nulla da lasciare dietro. Su un jump box del cliente, un host air-gapped,
o ovunque `pip install` non sia un'opzione:```bash
curl -O https://raw.githubusercontent.com/kabiri-labs/rcekit/main/rcekit.py
python rcekit.py --doctor    # same corpus, same check, zero installation

Entrambi eseguono lo stesso codice e riportano gli stessi verdetti. Lavorare da un checkout è il terzo modo, e non richiede alcuna installazione:```bash git clone https://github.com/kabiri-labs/rcekit.git cd rcekit # Python 3.8+, standard library only

root@kitploit:~
Metti un marker `FUZZ` dove arriva il tuo input (oppure seleziona un parametro con `-p` quando
usi una richiesta catturata), e chiedi a RCEKit di dimostrare l'RCE:```bash
rcekit --acknowledge-consent \
  --verify-url "https://target.example/lookup?host=FUZZ" \
  --methods reflected,eval

| -s | --server | SERVER | http://localhost:8080 | URL del server MCP | | -t | --token | TOKEN | null | Token di autenticazione | | -c | --config | CONFIG | null | File di configurazione | | -v | --verbose | VERBOSE | false | Abilita output dettagliato | | -h | --help | HELP | false | Mostra il messaggio di aiuto |

Esempi di utilizzo

root@kitploit:~
# Avvia il server MCP con impostazioni predefinite
mcp-server

# Avvia con porta e host personalizzati
mcp-server --port 9090 --host 0.0.0.0

# Abilita output dettagliato
mcp-server --verbose

# Usa un file di configurazione
mcp-server --config /path/to/config.json

Integrazione

Integrazione con Claude Desktop

Aggiungi quanto segue al file di configurazione di Claude Desktop:

root@kitploit:~
{
  "mcpServers": {
    "kitploit": {
      "command": "node",
      "args": ["/path/to/mcp-server/index.js"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:8080"
      }
    }
  }
}

Integrazione con VS Code

Installa l'estensione MCP per VS Code e configura il server:

root@kitploit:~
{
  "mcp.servers": {
    "kitploit": {
      "command": "node",
      "args": ["/path/to/mcp-server/index.js"]
    }
  }
}

Sviluppo

Prerequisiti

  • Node.js >= 18.0.0
  • npm >= 9.0.0

Configurazione

root@kitploit:~
# Clona il repository
git clone https://github.com/kitploit/mcp-server.git
cd mcp-server

# Installa le dipendenze
npm install

# Avvia in modalità sviluppo
npm run dev

Test

root@kitploit:~
# Esegui tutti i test
npm test

# Esegui i test con copertura
npm run test:coverage

# Esegui i test in modalità watch
npm run test:watch

Build

root@kitploit:~
# Crea la build di produzione
npm run build

# Avvia la build di produzione
npm start

Contribuire

I contributi sono benvenuti! Segui questi passaggi:

  1. Fai il fork del repository
  2. Crea un branch per la funzionalità (git checkout -b feature/amazing-feature)
  3. Esegui il commit delle modifiche (git commit -m 'Add some amazing feature')
  4. Esegui il push del branch (git push origin feature/amazing-feature)
  5. Apri una Pull Request

Licenza

Questo progetto è distribuito sotto licenza MIT. Consulta il file LICENSE per i dettagli.

Ringraziamenti

  • Model Context Protocol
  • Anthropic
  • Kitploit

Supporto

  • 📧 Email: [email protected]
  • 🐛 Issues: GitHub Issues
  • 💬 Discussions: GitHub Discussions

Nota: Questo progetto è fornito solo a scopo educativo e di ricerca. Gli autori non sono responsabili per qualsiasi uso improprio.``` [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:~
### Da una richiesta catturata — la forma che hanno la maggior parte dei target reali

Un `--verify-url` trasporta un URL e nient'altro. La maggior parte dei sink che vale la pena testare si trova
dietro una POST con un cookie di sessione, un content type e un body, e RCEKit prende
quella richiesta intera: salvala dal tuo proxy o dai devtools del tuo browser e indica
il campo in cui iniettare.```bash
rcekit --acknowledge-consent \
  -r search.req -p q \
  --methods reflected,eval

Utilizzo

root@kitploit:~
python3 CVE-2025-55182.py --url http://target.com

Opzioni

OpzioneDescrizione
--urlURL di destinazione (obbligatorio)
--proxyProxy HTTP (es. http://127.0.0.1:8080)
--headersFile contenente header personalizzati
--timeoutTimeout della richiesta in secondi (predefinito: 10)
--verboseAbilita output dettagliato

Esempi

root@kitploit:~
# Test di base
python3 CVE-2025-55182.py --url http://target.com

# Con proxy
python3 CVE-2025-55182.py --url http://target.com --proxy http://127.0.0.1:8080

# Con header personalizzati
python3 CVE-2025-55182.py --url http://target.com --headers headers.txt

# Modalità dettagliata
python3 CVE-2025-55182.py --url http://target.com --verbose

Come funziona

Lo script invia una richiesta POST appositamente predisposta all'endpoint /api/upload con un payload multipart che sfrutta la vulnerabilità di path traversal. La risposta viene analizzata per determinare se il target è vulnerabile.

Payload

root@kitploit:~
POST /api/upload HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="../../../../etc/passwd"
Content-Type: application/octet-stream

<contenuto del file>
------WebKitFormBoundary--

Rilevamento

Lo script controlla la risposta alla ricerca di indicatori di sfruttamento riuscito:

  • Codice di stato HTTP 200
  • Presenza di stringhe specifiche nella risposta
  • Tempo di risposta

Limitazioni

  • Lo script è progettato solo per test autorizzati
  • Potrebbe non funzionare su tutte le configurazioni
  • Richiede accesso di rete al target

Riferimenti

  • CVE-2025-55182
  • Documentazione OWASP

Licenza

Questo progetto è rilasciato sotto la licenza MIT.``` [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:~
Il metodo, il percorso, gli header, il body e i cookie vengono riutilizzati così come catturati, e ogni valore viene codificato per il contesto in cui finisce — una foglia JSON, un campo di form e un cookie non vengono escapati allo stesso modo. Ometti `-p` e contrassegna il punto con `FUZZ` o `*`, se preferisci.

### Tutto ciò che lo strumento ha

Due cose sono raggiungibili solo da una richiesta catturata: l'**enumerazione dei punti di iniezione** (`--auto-params`), e qualsiasi sink che richiede una sessione. Quindi l'esecuzione più completa che RCEKit può fare parte da `-r`, non da un URL — cosa che vale la pena sapere prima di concludere che un target è pulito.```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

Utilizzo

root@kitploit:~
python3 CVE-2025-55182.py -u <URL> -c <COMMAND>

Esempi

root@kitploit:~
# Esegui il comando 'id' sul server di destinazione
python3 CVE-2025-55182.py -u http://target.com -c "id"

# Esegui il comando 'whoami' sul server di destinazione
python3 CVE-2025-55182.py -u http://target.com -c "whoami"

# Esegui il comando 'ls -la' sul server di destinazione
python3 CVE-2025-55182.py -u http://target.com -c "ls -la"

Come funziona

Lo script sfrutta la vulnerabilità CVE-2025-55182 inviando una richiesta POST appositamente predisposta all'endpoint di destinazione. La richiesta contiene un payload progettato per attivare l'esecuzione di codice in remoto (RCE) sul server.

Requisiti

  • Python 3.x
  • Libreria requests

Installazione

root@kitploit:~
pip install requests

Esclusione di responsabilità

Questo strumento è fornito solo a scopo didattico e di ricerca sulla sicurezza. Gli autori non sono responsabili per qualsiasi uso improprio o danno causato da questo software. Usalo in modo responsabile e solo su sistemi che possiedi o per cui hai ricevuto autorizzazione esplicita.

Riferimenti

  • CVE-2025-55182
  • Analisi della vulnerabilità

Licenza

Questo progetto è rilasciato sotto la Licenza MIT.``` [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:~
Cosa apre ciascun flag:

| | |
|---|---|
| `--auto-params all` | ogni valore di query, foglia JSON, campo di form, parte multipart, cookie e header, invece di un singolo campo denominato |
| `--point-order thorough` | ogni header non hop-by-hop, non solo quelli ad alto rendimento |
| `--methods ...,lookup,deser` | sink di expression-lookup e deserializzazione, che i metodi a forma di shell non riescono a raggiungere |
| `--oob-host` | un host di callback per i metodi blind. Richiede un dominio delegato a te; la porta 53 richiede root |
| `--verify-active-risk stateful` | il livello più alto — aggiunge le forme di probe che fanno sì che il target effettui una richiesta da un indirizzo che RCEKit non ha scelto |
| `--probe-depth full` | ogni forma di break-out per sink, non solo quelle economiche |
| `--detect-json` | gli stessi verdetti in JSON leggibile da macchina |

**Queste sono un sacco di richieste.** La riga di costo viene stampata prima che qualsiasi cosa parta, e
`--max-points` / `--max-payloads` la limitano. Eseguilo contro un'istanza che ti è
consentito rompere: `--verify-active-risk stateful` è il livello per un target usa e getta, non per la produzione.

Nessuna infrastruttura esterna, nessun file di configurazione.

**Non fidarti delle GIF** — [riproducile tu stesso](https://github.com/kabiri-labs/rcekit/blob/main/docs/verify-it-yourself.md)
contro target Webmin e Struts2 dockerizzati in circa cinque minuti.

**Poi:** la [**guida sul campo**](https://github.com/kabiri-labs/rcekit/blob/main/docs/guide.md) affronta le situazioni reali — richieste
catturate, WAF, separatori filtrati, sink tra virgolette, target blind e senza egress —
un esempio pratico ciascuna.

---

## Cosa significa un verdetto

Trovare un *candidato* RCE è facile. Segnalarne uno che sopravvive al retest di qualcun altro
è la parte difficile, e fallisce in due direzioni: un "possibilmente vulnerabile"
che si rivela essere reflection, e un "non vulnerabile" da un'esecuzione che in realtà
non ha testato nulla.

RCEKit risponde con **otto verdetti che non vengono mai collassati l'uno nell'altro**:

| Verdetto | Cosa asserisce |
|---|---|
| **`confirmed`** | Il target ha eseguito l'input. Ha restituito un valore che non avrebbe potuto produrre altrimenti — calcolato da operandi casuali per quella specifica probe — e quel valore è assente da un controllo senza payload. |
| **`deserialization-sink`** | Il target ha ricostruito un grafo di oggetti fornito dall'attaccante. Provato, ma riguarda una *proprietà diversa*: raggiungere l'RCE da lì dipende da gadget nel classpath, quindi non viene mai chiamato RCE. |
| **`lookup-sink`** | Il target ha risolto un URI che RCEKit gli ha passato — un'espressione `${jndi:…}` ha raggiunto un lookup, provato su un callback che portava un token detenuto solo da quella probe. È un sink, non un'esecuzione: raggiungere l'RCE da lì richiede un server che risponda con una classe caricabile. |
| **`needs-review`** | Un segnale reale che non è prova di per sé — una regressione temporale lineare, un fingerprint del parser. Vale il tuo tempo, mai la parola "confirmed". |
| **`inconclusive`** | L'evidenza è apparsa, ma non è stato possibile attribuirla all'esecuzione — anche il controllo senza payload la conteneva. |
| **`negative`** | Le probe sono state costruite, hanno raggiunto il target e non hanno trovato nulla. |
| **`error`** | Nulla ha raggiunto il target. |
| **`nothing-tested`** | Non è stata costruita alcuna probe. |

Nel momento in cui `confirmed` e `maybe` si confondono, `confirmed` smette di significare qualcosa — quindi
nulla viene mai promosso verso l'alto. Una regressione temporale resta `needs-review` per quanto
pulita sia la pendenza. Un callback di deserializzazione resta `deserialization-sink` per quanto
tu sia certo che il classpath sia sfruttabile.

### L'altra metà: un'esecuzione che non ha testato nulla non è mai pulita

Le ultime due righe sono quelle che gli altri strumenti non hanno, e contano più di
quanto sembri. Uno scanner che non ha potuto raggiungere il target, o che non ha costruito alcuna probe
perché i tuoi flag le escludevano tutte, non ha appreso **nulla** sul target —
e stampare `negative` in quel caso è una bugia che si legge esattamente come sicurezza.

Quindi `error` e `nothing-tested` sono verdetti di prima classe, l'esecuzione esce con codice diverso da zero,
e RCEKit dice quale dei due si è verificato e perché:```
[!] 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.

Colpisce ovunque una run possa silenziosamente diventare vuota: un metodo che non si applica agli ambienti selezionati, un gradino --sink-shape per cui la shell scelta non ha sintassi, una selezione --bridges interamente trattenuta dal tetto di sicurezza, un corpo di richiesta che ha interrotto la consegna prima di arrivare.

Una run che è stata solo parzialmente accecata riceve lo stesso trattamento un livello più in basso. Se hai richiesto un oracolo di secondo ordine e l'endpoint osservato non ha mai risposto, i verdetti delle sonde restano validi — ma la run ti dice che sono stati decisi senza mai leggere il canale verso cui l'hai puntato, invece di lasciarli passare per un negativo di secondo ordine.


Cosa conferma

Una CLI, un flag --methods, che copre i principali percorsi verso l'RCE:

Classe RCE--methodsCome RCEKit lo dimostra
OS command injectionreflectedFa calcolare alla shell $((a+b)) su operandi casuali e collassare $(echo TAG); conferma il risultato, mai l'espressione letterale. Scritto nel dialetto del sink stesso — POSIX, cmd.exe o PowerShell.
Code / expression injection — SSTI, SpEL, OGNL, Groovy, eval() (CWE-94)evalInietta a*b in ogni sintassi di template comune (${…} {{…}} #{…} %{…} <%=…%> @(…), nudo); conferma che il prodotto appare mentre il letterale a*b no.
Blind command injection (nessun output)timeLancia una serie controllata di ritardi 0/N/2N e conferma che il tempo di risposta segue il ritardo linearmente; riportato come needs-review — il jitter non può falsificarlo, ma il timing non è un valore calcolato.
Target interni / senza egressfileScrive un token casuale e lo recupera attraverso qualsiasi percorso di rilettura — una web root, un parametro LFI, un handler di download o export, un'anteprima basata su /tmp. Dimostra l'esecuzione più una primitiva di scrittura, senza listener esterno.
Primitiva di upload / scrittura — PUT-a-JSP, upload non controllato (CWE-434)writeScrive un one-liner che calcola un prodotto attraverso la tua stessa richiesta di upload, poi recupera il file: il prodotto è RCE confirmed, il sorgente che torna indietro verbatim è needs-review — scrittura arbitraria di file, servita ma non interpretata.
Sink di deserializzazione — fastjson, shiro, weblogic (CWE-502)deserDimostra che l'endpoint deserializza dati dell'attaccante, tramite un gadget DNS non eseguibile o un differenziale di forma dell'errore. Riportato come , come RCE.

Tre cose ampliano dove quei metodi possono arrivare, senza cambiare ciò che ciascuno di essi chiamerà confirmed:

  • Esecuzione di secondo ordine (--observe-url) — quando il payload atterra su una richiesta e viene eseguito su un'altra: SSTI memorizzato renderizzato su una pagina profilo, un payload scritto in un log che un template engine renderizza in seguito, un job in coda. L'endpoint osservato viene differenziato rispetto a uno snapshot preso prima che qualsiasi sonda fosse inviata.
  • Bridge verso linguaggi di query (--bridges) — COPY … FROM PROGRAM, xp_cmdshell, expect://. Un bridge è un vettore, non un oracolo: avvolge il comando che i metodi già costruiscono, quindi gli stessi livelli si applicano attraverso di esso.
  • Enumerazione dei punti di iniezione (-p all) — query, foglie JSON, campi form, parti multipart, cookie, header e segmenti di path, ciascuno codificato per dove atterra, con il costo della sonda stampato prima che qualsiasi cosa parta. Un body GraphQL è ordinato per ciò che può effettivamente confermare: le variables che un resolver legge prima del documento dell'operazione stesso.

Mescola i metodi liberamente: --methods reflected,eval,time esegue tutti e tre e riporta ciascun livello separatamente.

Ambito onesto. RCEKit conferma l'RCE che è raggiungibile iniettando in una richiesta e interpretato da una shell o da un valutatore. Non copre bug di corruzione della memoria (buffer overflow, UAF) o injection di argomenti in un array argv senza shell — quelli sono problemi diversi. Anche le gadget chain di deserializzazione restano fuori ambito: --methods deser dimostra che un endpoint deserializza dati dell'attaccante e lo dice nel proprio livello, ma quale gadget (se esiste) lo trasforma in esecuzione dipende dal classpath del target, e RCEKit non pretende di saperlo. Mira a essere eccellente nelle classi di RCE guidate da injection sopra elencate piuttosto che mediocre in tutto.


Come si confronta RCEKit

Gli altri strumenti in questo spazio sono costruiti per farti entrare. RCEKit è costruito perché il finding sopravviva allo scrutinio di qualcun altro — il retest del cliente, la coda di triage, la revisione del report. Questa differenza si manifesta tre volte.

1. Un punto di iniezione, ogni classe, una run

Raramente conosci la classe prima di testare. Coprire un sink sconosciuto con strumenti a classe singola significa eseguirli uno per uno e ricostruire la richiesta per ciascuno:

Può confermareRCEKitcommixSSTImapNuclei
OS command injection✅✅ (il suo intero ambito)—per template
Expression injection / SSTI✅tramite la sua tecnica basata su eval✅ (il suo intero ambito)per template
Blind — timing✅ come livello separato✅✅—
Blind — out-of-band✅ listener integrato——tramite interactsh
No-egress — scrivi & recupera✅ qualsiasi percorso di rilettura✅ (web root)——
Sink cmd.exe e PowerShell✅ sonde per dialetto✅ (cmd)—per template
Upload → scrivi-poi-esegui✅ scrittura vs. esecuzione, livelli separati——per template
Secondo ordine — atterra qui, esegue là✅———
Bridge verso linguaggi di query all'OS✅——per template
Sink di deserializzazione✅ livello proprio, mai chiamato RCE——per template
Tutto quanto sopra, una CLI, una run✅———

Copertura secondo la lista di tecniche documentate di ciascun progetto. SSTImap è il successore mantenuto di tplmap, che il suo autore ha contrassegnato come non mantenuto.```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. Discute con i propri risultati

Uno strumento riporta ciò che ha trovato. RCEKit riporta anche **ciò che si è rifiutato di credere** —
`inconclusive` è un verdetto a sé stante, per prove che sono emerse ma non potevano
essere attribuite all'esecuzione:```
[detect] methods: reflected, eval
[detect] sent 13 probes: confirmed=0, inconclusive=2, negative=11

Sarebbero state scoperte di qualcun altro. Cinque meccanismi producono quel verdetto, e vengono eseguiti a ogni conferma:

  • Una richiesta di controllo senza payload. L'evidenza deve essere presente con il payload e assente senza di esso. Qualsiasi cosa presente in entrambi è inconclusive, non una scoperta.
  • Un controllo inerte con lo stesso token. Una seconda richiesta porta l'identico token casuale in una forma non eseguibile. Un target che si limita a riflettere l'input fallisce qui — ed è così che una riflessione viene separata da un'esecuzione.
  • Operandi casuali, mai stringhe fisse. L'oracolo è una somma racchiusa tra tag o un prodotto delimitato da confini calcolato ex novo a ogni esecuzione. Riflettere il payload restituisce il letterale $((a+b)); solo l'esecuzione restituisce il valore.
  • Ricerca dell'evidenza consapevole della codifica. Un sink che applica base64, hex, URL, HTML o unicode-escape al proprio output conferma comunque — il corpo grezzo viene controllato per primo, quindi la decodifica può solo trasformare un riscontro mancato in un riscontro, mai il contrario.
  • Ricerca dell'evidenza sull'intera risposta. Il valore calcolato viene cercato in ogni canale della risposta — corpo, header dell'applicazione, valori dei cookie, il target di redirect, la reason phrase HTTP, e ogni foglia di un envelope JSON di errore — e la scoperta nomina il canale che lo ha trasportato. Il differenziale di controllo viene applicato a ogni canale, quindi ampliare dove RCEKit guarda non amplia ciò che chiamerà confirmed.

Lo stesso istinto vale nella direzione opposta. Il timing non si auto-conferma mai, una callback di deserializzazione non viene mai chiamata RCE, e un'esecuzione che non ha costruito alcuna sonda non viene mai chiamata negativa.

3. È costruito per un ingaggio autorizzato, non per un laboratorio

I controlli su cui le rules of engagement di un cliente chiedono effettivamente conto, nello strumento piuttosto che nelle tue note:

Consent gateNulla di sfruttante viene generato o lanciato senza --acknowledge-consent.
Execution planStampa l'esatto numero di sonde, le forme dei sink, i livelli di sicurezza e qualsiasi destinazione di callback in uscita prima che parta la prima richiesta.
Safe by defaultReverse shell, accesso a credenziali, metadata cloud, movimento laterale e container escape sono trattenuti finché non alzi --verify-active-risk; persistenza e backdoor richiedono un secondo flag in aggiunta. I bridge che creano un oggetto sul target sono soggetti allo stesso tetto.
Cleanup commandsfile, write e i bridge stateful modificano lo stato del target, quindi ogni scoperta — inclusa una needs-review — stampa cosa eseguire per annullarla.
Credentials stay putIl fetch di rilettura di file porta gli header Authorization/Cookie dell'esecuzione solo verso la stessa origin, e lo dichiara esplicitamente quando li trattiene. Il fetch del canale osservato non ne invia nessuno a meno che tu non gli passi una richiesta con --observe-request.
Redacted audit trailOgni esecuzione finisce in exploit_audit.log, registrando che un header di credenziale è stato inviato, mai il suo valore.
Watermarking--watermark imprime un token tracciabile in ogni payload, così un payload trovato nei log del cliente mesi dopo è attribuibile alla tua esecuzione.
No third-party callbacksIl listener OOB è tuo. Nulla viene instradato attraverso un server di interazione pubblico, cosa che alcuni ingaggi vietano del tutto.
One stdlib filercekit.py viene eseguito da solo — jump box, host air-gapped, ovunque pip install non sia un'opzione.

Quando rivolgerti a qualcos'altro

Vuoi una shell invece di un verdetto? commix e SSTImap proseguono nella post-exploitation; RCEKit si ferma alla prova per design. Scansionare migliaia di host alla ricerca di CVE note? È il lavoro di Nuclei — e RCEKit scrive template Nuclei (--output-format nuclei), quindi alimenta il tuo scanner invece di competere con esso. Sai già che l'iniezione è SQL e vuoi il database stesso? sqlmap possiede quel terreno — i bridge di RCEKit esistono per provare che il OS è raggiungibile da un parametro testuale, non per sfruttare il database.


Trova la tua situazione

Ogni riga è un esempio pratico nella field guide — il comando, cosa invia, e come leggere ciò che ritorna.

SituazioneVai a
Ho un URL e un parametroPoint at a URL
Ho una richiesta salvata da BurpPoint at a captured request
L'app è JSON / il payload continua a essere alteratoLanding the payload intact
Non so di quale classe si trattiChoosing methods
Il sink rimuove ;When the sink filters separators
Il mio input finisce dentro 'quotes'Injecting inside quotes
Il sink esegue il mio input come comando interoWhole-command sinks
Il target è Windows o il sink è PowerShellWindows and PowerShell sinks
C'è un WAFWorking around a WAF
Non torna indietro alcun outputBlind targets
Nessun output e nessuna egressNo-egress targets
La richiesta memorizza un file invece di eseguire qualcosaUpload and write-primitive targets
Il payload viene eseguito dopo, su una richiesta diversa

Documentazione

Verify it yourselfRiproduci le conferme sopra sulla tua macchina, contro target vulnerabili dockerizzati. Cinque minuti.
Field guidePercorso guidato basato su esempi di ogni situazione reale, dalla prima sonda alle catene multi-step. Inizia qui.
Payload generation & exportsRCEKit come generatore di payload: profili target, ed export Burp / ffuf / Nuclei.
ReferenceOgni flag, variabile d'ambiente, categoria, contesto, codifica e sink di code-execution.
CHANGELOG.mdCosa è cambiato in ogni release, e cosa ricontrollare in fase di aggiornamento.
CONTRIBUTING.mdCome aggiungere sink, categorie, codifiche e metodi di rilevamento.
SECURITY.mdSegnalare una vulnerabilità in RCEKit stesso.

Sicurezza & etica

RCEKit sfrutta, e questo è il punto. Una vulnerabilità viene confermata facendo fare al target la cosa, perché è l'unica evidenza che una firma non può falsificare e una build corretta non può produrre per caso. Ciò che delimita un'esecuzione non è la riluttanza a sfruttare. Sono due fatti strutturali e un interruttore.

Non accetta alcun payload arbitrario da te. Le sonde sono costruite dal motore per servire un oracolo — aritmetica su operandi casuali per quella sonda, un nome che solo questa esecuzione avrebbe potuto scegliere. Non esiste un input che trasformi il rilevamento in qualcos'altro, perché non esiste un tale input da fornire.

Qualsiasi cosa che vada oltre il calcolo di un valore dichiara il tier di cui ha bisogno, così un flag decide fin dove arriva un'esecuzione: --verify-active-risk safe | intrusive | stateful. Un metodo o una singola forma di sonda al di sopra di quel tier viene trattenuto per nome, con il flag che lo invierebbe — una scala che si accorcia silenziosamente è indistinguibile da un target senza nulla da trovare. Contro un'istanza usa e getta, alza il tier e ottieni tutto ciò che lo strumento ha.

  • Consent gate — la generazione e la verifica di exploit richiedono --acknowledge-consent; --detection-only è benigno e non lo richiede.
  • Safe by default — la verifica lancia solo prove a basso impatto; reverse shell, download-execute, accesso a credenziali, movimento laterale, container escape, cloud-metadata e payload OOB sono trattenuti finché non alzi --verify-active-risk. I payload distruttivi (persistenza, backdoor) non vengono mai lanciati senza --verify-allow-destructive. Un execution plan stampa esattamente cosa verrà inviato prima che qualsiasi cosa parta.
  • Safety tiers — safe / intrusive / stateful. I payload del corpus sono filtrati da --max-safety; i metodi di rilevamento e le loro forme di sonda dichiarano gli stessi gradini e sono filtrati da --verify-active-risk, quindi un metodo che fa contattare l'esterno al target o lascia qualcosa dietro è soggetto allo stesso ordinamento di ogni payload del corpus. Il pre-flight nomina il tier di cui ogni elemento trattenuto ha effettivamente bisogno. file e write sono invece regolati dalla loro stessa configurazione: nessuno dei due fa nulla finché non indichi una directory in cui scrivere e un URL da cui rileggere.
  • Audit & logging — ogni esecuzione di exploitation/verification è registrata in exploit_audit.log; --watermark incorpora un token tracciabile; i log di esecuzione vanno in rcekit.log.
  • Corpus integrity — un corpus corrotto, o un esplicito --template-file mancante, fa sì che RCEKit rifiuti di eseguire e esca con codice diverso da zero invece di generare silenziosamente nulla (--doctor lo verifica). Solo un file di corpus predefinito assente ricade sulla copia integrata, e lo dichiara quando lo fa.

Questo toolkit è destinato esclusivamente a penetration testing autorizzato, ricerca sulla sicurezza, formazione e addestramento difensivo. Non usarlo mai contro sistemi senza esplicito permesso — i test non autorizzati sono illegali.

Sviluppo```bash

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

root@kitploit:~
Contributi benvenuti — nuovi sink/categorie, codifiche, ambienti, metodi di
rilevamento, correzioni di bug e documentazione. Le basi dei payload risiedono in template JSON modificabili
(`templates/payloads.json`), quindi la maggior parte della copertura si estende senza toccare il codice
Python sorgente. Dopo aver modificato il corpus, aggiorna la copia integrata che viene distribuita all'interno di
`rcekit.py`:```bash
python tools/embed_corpus.py    # --check verifies it is current

La suite di test fallisce se i due divergono. Vedi CONTRIBUTING.md.

Licenza

MIT — vedi LICENSE.

Scarica lo strumento
deserialization-sink
mai
Blind / out-of-band — exfil, asyncoobIl listener HTTP/DNS integrato riceve i callback e correla ciascuno al payload esatto; ogni sonda porta il proprio token.
Sink di expression-lookup — Log4Shell/JNDIlookupIl sink risolve un URI ${jndi:…} invece di eseguire un comando, quindi le sonde shell di oob non raggiungono nulla. Lo dimostra sul solo callback e riporta lookup-sink, mai confirmed. Viene inviato solo jndi:dns:// — una risoluzione di nome e nient'altro — quindi ciò che è dimostrato è il lookup, non una gadget chain.
When execution happens on another request
Il punto di iniezione è SQL e il sink è l'host del databaseQuery-language bridges
L'endpoint accetta un oggetto serializzatoDeserialization sinks
Il sink è dietro un login o un upload di fileMulti-step chains
Ho ottenuto needs-review / inconclusive / errorReading the results
Dice che il corpus è inutilizzabileTroubleshooting