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 entwickeln.
Haftungsausschluss: Bitte beachte, dass sich dieses Projekt noch in der Entwicklung befindet und ich noch an einigen der wichtigsten Funktionen arbeite, die in diesem Abschnitt beschrieben werden.
✨ Funktionen | 🚧 WIP | 🚀 Installation | 💻 Verwendung | 🔧 PTY-Upgrade | 🤖 Module | 🧠 MCP
Die vollständige Dokumentation befindet sich im Wiki.
[!TIP] Diese Demo läuft mit einem dockerisierten OS. 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 Terminal-Größenanpassung.connect ssh user@host verwandelt Anmeldedaten, die du bereits besitzt, in eine Sitzung. ssh liefert nur das Payload aus, sodass die Shell auch 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 deine Möglichkeit, die Logs deiner Sitzungen einzusehen.
Zum Aktualisieren:
pipx upgrade koi-handler
Weitere Details unter Erste Schritte.
# Default: bind 0.0.0.0:4010
koi
# Custom host/port
koi --host 10.10.14.5 --port 9001
koi -p 9001
Einmal drin, listet help jeden Befehl auf. Die vollständige Referenz findest du in der CLI-Referenz, und die Sitzungsverwaltung (Tags, Hintergrundausführung, Screenable-Modus) in Session Management.
Sende selbst eine Reverse Shell oder gib payloads *interface* ein, um vorgefertigte Payloads zu erhalten. Beachte, 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, um die Erkennung durch Windows Defender zu umgehen. Du kannst mehrere Techniken miteinander verketten, wobei XOR-Kodierung und Format-Transformationen normalerweise ausreichen. Beachte, dass zu viele Schichten das Payload beschädigen und für das Ziel unlesbar machen können.
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 gemeldet oder von Blue Teams überwacht, die nach bekannten Reverse-Shell-Mustern Ausschau halten. Das Obfuskieren deines 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 Terminal-Unterstützung: keine Tab-Vervollständigung, defektes Ctrl+C, verstümmelte Ausgabe. Der Befehl upgrade behebt dies:
koi> upgrade 1
Shell #1 upgraded successfully.
koi> go 1
# now a full PTY with proper terminal behaviour
Ein einfaches Python-PTY wird gestartet
python3 -c 'import pty; pty.spawn("/bin/bash")'
mit TERM=xterm-256color und einigen Größenanpassungsinformationen
Ich habe mir nicht die Mühe gemacht, eines für CMD zu erstellen, aber für PowerShell verwendet die Technik ein obfuskiertes 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