Multi-Session-Reverse-Shell-Handler mit PTY-Upgrade, Post-Exploitation-Modulen, Layer-3-Tunneling, Payload-Obfuskation zur EDR-Umgehung, Session-Logging und einem MCP-Server für LLM-gesteuerte Steuerung.
Dieses Projekt ist mein Versuch, einen schnellen, einfach zu bedienenden (und dennoch funktionsreichen) Shell-Handler mit einer ansprechenden Oberfläche zu erstellen.
Haftungsausschluss: Bitte beachte, dass sich dieses Projekt noch in der Entwicklung befindet und ich noch an einigen der zentralen Funktionen arbeite, die in diesem Abschnitt beschrieben werden.
✨ Funktionen | 🚧 In Arbeit | 🚀 Installation | 💻 Verwendung | 🔧 PTY-Upgrade | 🤖 Module | 🧠 MCP
Die vollständige Dokumentation findest du im Wiki.
[!TIP] Diese Demo läuft mit einem dockerisierten Betriebssystem. Wenn du es selbst ausprobieren möchtest, kannst du die Ubuntu-Images oder die dockur Windows-Images verwenden.
script/socat, Windows über obfuskiertes ConPtyShell) für Tab-Vervollständigung, Ctrl+C-Weiterleitung und Größenänderung des Terminals.connect ssh user@host verwandelt Anmeldedaten, die du bereits besitzt, in eine Sitzung. ssh liefert nur das Payload, sodass die Shell nach dem Beenden von ssh weiterlebt.tunnel start <id> <cidr> verwandelt eine Shell in einen Layer-3-Pivot: ein Userland-TCP-Stack auf dem Ziel (kein Root, keine abgelegte Binärdatei, nur Python) mit den Routen auf deiner Seite. (Dokumentation)koireview erneut ab. (Dokumentation)Ctrl+Z schickt die Sitzung in den Hintergrund, Ctrl+C sendet SIGINT an das Remote-System und beendet niemals versehentlich deinen Listener.[!NOTE] Es ist jetzt möglich, Koi remote zu verwenden! Mehr dazu hier
# Recommended: stable release from PyPI
pipx install koi-handler
# From source if you want to dev your own modules
git clone https://github.com/b3rt1ng/koi
cd koi
pipx install --editable .
koifuscator ist die direkte Abkürzung zum Obfuscator-Modul.
koireview ist dein Weg, um die Protokolle deiner Sitzungen einzusehen.
Zum Aktualisieren:
pipx upgrade koi-handler
Weitere Details unter Getting Started.
# Default: bind 0.0.0.0:4010
koi
# Custom host/port
koi --host 10.10.14.5 --port 9001
koi -p 9001
Sobald Sie sich darin befinden, listet help jeden Befehl auf. Die vollständige Referenz finden Sie in der CLI-Referenz, und die Sitzungsverwaltung (Tags, Hintergrundausführung, screenable-Modus) in Sitzungsverwaltung.
Senden Sie selbst eine Reverse Shell oder geben Sie payloads *interface* ein, um vorgefertigte Payloads zu erhalten. Beachten Sie, dass es sich um eine terminalähnliche Shell handeln muss, da Koi Linux-Shells, PowerShells und cmd manipuliert.
Koi enthält einen integrierten Payload-Obfuscator, der dabei hilft, die Erkennung durch Windows Defender zu umgehen. Sie können mehrere Techniken miteinander verketten, wobei XOR-Kodierung und Formattransformationen in der Regel ausreichen. Beachten Sie, dass das Stapeln zu vieler Schichten den Payload beschädigen und für das Ziel unlesbar machen kann.
Der Obfuscator funktioniert auch für Linux-Payloads. Während die meisten Linux-Umgebungen keine Antivirensoftware ausführen, werden Bash-Einzeiler häufig von EDR-Lösungen, IDS-Regeln markiert oder von Blue Teams überwacht, die nach bekannten Reverse-Shell-Mustern Ausschau halten. Das Obfuscaten Ihres Payloads hilft, in einigen gehärteten Umgebungen unter dem Radar zu bleiben.
Jede Technik und jeder unterstützte Payload-Typ ist in Payloads & Obfuscation aufgeführt.
Rohe Shells bieten keine ordnungsgemäße Terminalunterstützung: keine Tab-Vervollständigung, defektes Ctrl+C, verfälschte Ausgabe. Der Befehl upgrade behebt dies:
koi> upgrade 1
Shell #1 upgraded successfully.
koi> go 1
# now a full PTY with proper terminal behaviour
wird ein einfaches Python-PTY gestartet
python3 -c 'import pty; pty.spawn("/bin/bash")'
mit TERM=xterm-256color und einigen Größenänderungsinformationen
Ich habe mir nicht die Mühe gemacht, eine für CMD zu erstellen, aber für PowerShell verwendet die Technik eine obfuskierte conptyshell, um eine vollständig implementierte Shell zu erhalten:
1) ConPtyShell is fetched from GitHub and cached locally for offline reuse
2) All IOC identifiers are renamed to random strings (class names, method names, PS function name)
3) Distinctive C# string literals are replaced with runtime char-array constructions (no literal in compiled MSIL)
4) The obfuscated script is served over a temporary HTTP server
5) The invocation command is base64-encoded (-EncodedCommand) with IEX and IWR obfuscated via random split techniques (concat / format string / char-array), so no plaintext cmdlet names appear on the command line
6) The target connects back with a fully interactive PTY shell, registered as a new session
Fallback-Kette und Details pro Betriebssystem in Upgrading Sessions.