Gestor de shells inversas multisessión con actualización a PTY, módulos de post-explotación, tunelización de capa 3, ofuscación de payloads para evasión de EDR, registro de sesiones y un servidor MCP para control impulsado por LLM.
Este proyecto es mi intento de crear un manejador de shells rápido, fácil de usar (y a la vez repleto de funciones) con una interfaz atractiva.
Aviso: ten en cuenta que esto todavía está en desarrollo, y sigo trabajando en algunas de las funciones clave, mencionadas en esta sección.
✨ Características | 🚧 WIP | 🚀 Instalación | 💻 Uso | 🔧 Actualización a PTY | 🤖 Módulos | 🧠 MCP
La documentación completa está en la wiki.
[!TIP] Esta demo se ejecuta con un SO dockerizado. Si quieres probarlo tú mismo, puedes usar las imágenes de Ubuntu o el dockur de windows
script/socat, Windows mediante ConPtyShell ofuscado) para autocompletado con tabulador, reenvío de Ctrl+C y redimensionado de terminal.connect ssh user@host convierte credenciales que ya posees en una sesión. ssh solo entrega el payload, así que la shell sigue viva después de que ssh termine.tunnel start <id> <cidr> convierte una shell en un pivote de Capa 3: una pila TCP en espacio de usuario en el objetivo (sin root, sin binario desplegado, solo Python) con las rutas en tu lado. (docs)koireview. (docs)Ctrl+Z envía la sesión a segundo plano, Ctrl+C envía SIGINT al remoto, nunca mata tu listener por accidente.[!NOTE] ¡Ahora es posible usar Koi de forma remota! Lee más aquí
# 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 es el atajo directo al módulo ofuscador.
koireview es tu forma de ver los registros de tus sesiones.
Para actualizar:
pipx upgrade koi-handler
Más detalles en Getting Started.
# Default: bind 0.0.0.0:4010
koi
# Custom host/port
koi --host 10.10.14.5 --port 9001
koi -p 9001
Una vez dentro, help lista todos los comandos. La referencia completa está en la CLI Reference, y el manejo de sesiones (etiquetas, segundo plano, modo screenable) en Session Management.
Envía una reverse shell tú mismo o escribiendo payloads *interface* para obtener payloads pregenerados. Ten en cuenta que necesita ser una shell tipo terminal, ya que Koi manipula shs de linux, powershells y cmd.
Koi incluye un ofuscador de payloads integrado para ayudar a evadir la detección de Windows Defender. Puedes encadenar múltiples técnicas, aunque la codificación XOR y las transformaciones de formato suelen ser suficientes. Ten en cuenta que apilar demasiadas capas puede corromper el payload y hacerlo ilegible para el objetivo.
El ofuscador también funciona para payloads de Linux. Aunque la mayoría de los entornos Linux no ejecutan software antivirus, los one-liners de bash suelen ser detectados por soluciones EDR, reglas IDS, o monitorizados por equipos azules que vigilan patrones conocidos de reverse shell. Ofuscar tu payload ayuda a pasar desapercibido en algunos entornos endurecidos.
Cada técnica y cada tipo de payload soportado están listados en Payloads & Obfuscation.
Las shells básicas carecen de soporte de terminal adecuado: sin autocompletado con tabulador, Ctrl+C roto, salida distorsionada. El comando upgrade soluciona esto:
koi> upgrade 1
Shell #1 upgraded successfully.
koi> go 1
# now a full PTY with proper terminal behaviour
se genera un pty de python simple
python3 -c 'import pty; pty.spawn("/bin/bash")'
con TERM=xterm-256color y algo de información de redimensionado
No me molesté en hacer uno para CMD, pero para powershell la técnica usa un conptyshell ofuscado para obtener una shell completamente implementada:
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
La cadena de fallback y los detalles por SO están en Upgrading Sessions.
Koi puede exponer sus sesiones y módulos a través de MCP, para que un cliente LLM pueda leer tu tabla de sesiones y manejar módulos sin que tengas que copiar y pegar nada.
# read-only: sessions, modules and logs
koi --mcp