Gestionnaire de reverse shell multi-session avec mise à niveau PTY, modules de post-exploitation, tunneling de couche 3, obfuscation de payload pour l'évasion EDR, journalisation de session et un serveur MCP pour le contrôle piloté par LLM.
Ce projet est ma tentative de créer un gestionnaire de shell rapide, facile à utiliser (et pourtant riche en fonctionnalités) avec une interface soignée.
Avertissement : veuillez noter que ce projet est encore en cours de développement, et que je travaille encore sur certaines des fonctionnalités clés, abordées dans cette section.
✨ Fonctionnalités | 🚧 En cours | 🚀 Installation | 💻 Utilisation | 🔧 Mise à niveau PTY | 🤖 Modules | 🧠 MCP
La documentation complète se trouve dans le wiki.
[!TIP] Cette démo s'exécute avec un OS dockerisé. Si vous voulez essayer vous-même, vous pouvez utiliser les images Ubuntu ou les dockur windows
script/socat, Windows via ConPtyShell obfusqué) pour la complétion par tabulation, le transfert de Ctrl+C et le redimensionnement du terminal.connect ssh user@host transforme des identifiants que vous possédez déjà en une session. ssh ne fait que livrer le payload, ainsi le shell continue de vivre après la sortie de ssh.tunnel start <id> <cidr> transforme un shell en pivot de couche 3 : une pile TCP en espace utilisateur sur la cible (pas de root, pas de binaire déposé, uniquement Python) avec les routes de votre côté. (docs)koireview. (docs)Ctrl+Z met la session en arrière-plan, Ctrl+C envoie SIGINT à la cible distante, sans jamais tuer votre listener par accident.[!NOTE] Il est désormais possible d'utiliser Koi à distance ! En savoir plus ici
# 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 est le raccourci direct vers le module d'obfuscation.
koireview est votre moyen de consulter les journaux de vos sessions.
Pour mettre à niveau :
pipx upgrade koi-handler
Plus de détails dans Getting Started.
# Default: bind 0.0.0.0:4010
koi
# Custom host/port
koi --host 10.10.14.5 --port 9001
koi -p 9001
Une fois à l'intérieur, help liste toutes les commandes. La référence complète se trouve dans la CLI Reference, et la gestion des sessions (tags, mise en arrière-plan, mode screenable) dans Session Management.
Envoyez un reverse shell vous-même ou en tapant payloads *interface* pour obtenir des payloads pré-générés. Notez qu'il doit s'agir d'un shell de type terminal, car Koi manipule des shs linux, des powershells et des cmd.
Koi inclut un obfuscateur de payload intégré pour aider à échapper à la détection de Windows Defender. Vous pouvez enchaîner plusieurs techniques, bien que l'encodage XOR et les transformations de format soient généralement suffisants. Gardez à l'esprit qu'empiler trop de couches peut corrompre le payload et le rendre illisible par la cible.
L'obfuscateur fonctionne également pour les payloads Linux. Bien que la plupart des environnements Linux n'exécutent pas de logiciel antivirus, les one-liners bash sont couramment signalés par les solutions EDR, les règles IDS, ou surveillés par les blue teams à l'affût des motifs de reverse shell connus. Obfusquer votre payload aide à passer sous le radar dans certains environnements durcis.
Chaque technique et chaque type de payload pris en charge est listé dans Payloads & Obfuscation.
Les shells bruts manquent de support terminal adéquat : pas de complétion par tabulation, Ctrl+C cassé, sortie altérée. La commande upgrade corrige cela :
koi> upgrade 1
Shell #1 upgraded successfully.
koi> go 1
# now a full PTY with proper terminal behaviour
un simple pty Python est lancé
python3 -c 'import pty; pty.spawn("/bin/bash")'
avec TERM=xterm-256color et quelques informations de redimensionnement
Je ne me suis pas embêté à en faire un pour CMD, mais pour powershell la technique utilise un conptyshell obfusqué pour obtenir un shell entièrement implémenté :
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
Chaîne de repli et détails par système d'exploitation dans Upgrading Sessions.