Обработчик обратных оболочек с поддержкой нескольких сессий, обновлением до PTY, модулями постэксплуатации, туннелированием на уровне 3, обфускацией полезной нагрузки для обхода EDR, журналированием сессий и MCP-сервером для управления через LLM.
Этот проект — моя попытка создать быстрый, простой в использовании (но при этом многофункциональный) обработчик шеллов с приятным интерфейсом.
Отказ от ответственности: обратите внимание, что проект всё ещё находится в разработке, и я всё ещё работаю над некоторыми ключевыми функциями, о которых говорится в этом разделе.
✨ Возможности | 🚧 В разработке | 🚀 Установка | 💻 Использование | 🔧 Обновление до PTY | 🤖 Модули | 🧠 MCP
Полная документация находится в wiki.
[!TIP] Эта демонстрация запускается с докеризованной ОС. Если вы хотите попробовать сами, можете использовать образы Ubuntu или dockur для Windows
script/socat, в Windows через обфусцированный ConPtyShell) для автодополнения по Tab, пересылки Ctrl+C и изменения размера терминала.connect ssh user@host превращает уже имеющиеся у вас учётные данные в сессию. ssh лишь доставляет полезную нагрузку, поэтому шелл продолжает жить после завершения ssh.tunnel start <id> <cidr> превращает шелл в пивот уровня L3: пользовательский TCP-стек на цели (без root, без загружаемого бинарника, только Python) с маршрутами на вашей стороне. (документация)koireview. (документация)Ctrl+Z переводит сессию в фон, Ctrl+C отправляет SIGINT на удалённую сторону и никогда не убивает ваш слушатель случайно.[!NOTE] Теперь можно использовать Koi удалённо! Подробнее здесь
# 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 — это прямой ярлык к модулю обфускатора.
koireview — это ваш способ просмотра журналов ваших сессий.
Для обновления:
pipx upgrade koi-handler
Подробнее см. в разделе Начало работы.
# Default: bind 0.0.0.0:4010
koi
# Custom host/port
koi --host 10.10.14.5 --port 9001
koi -p 9001
Попав внутрь, команда help выводит список всех команд. Полный справочник находится в CLI Reference, а работа с сессиями (теги, фоновый режим, режим screenable) — в Session Management.
Отправьте reverse shell самостоятельно или введите payloads *interface*, чтобы получить готовые payload'ы. Учтите, что это должен быть шелл терминального типа, поскольку Koi управляет linux sh, powershell и cmd.
Koi включает встроенный обфускатор payload'ов, помогающий обойти обнаружение Windows Defender. Можно объединять несколько техник, хотя XOR-кодирования и преобразований формата обычно достаточно. Имейте в виду, что наложение слишком большого числа слоёв может повредить payload и сделать его нечитаемым для целевой системы.
Обфускатор также работает для Linux payload'ов. Хотя в большинстве Linux-сред не запускается антивирусное ПО, однострочники на bash часто помечаются EDR-решениями, правилами IDS или отслеживаются blue team, следящими за известными паттернами reverse shell. Обфускация payload'а помогает оставаться незамеченным в некоторых усиленно защищённых средах.
Каждая техника и каждый поддерживаемый тип payload'а перечислены в Payloads & Obfuscation.
Сырые шеллы не имеют полноценной поддержки терминала: нет автодополнения по Tab, сломан Ctrl+C, искажённый вывод. Команда upgrade исправляет это:
koi> upgrade 1
Shell #1 upgraded successfully.
koi> go 1
# now a full PTY with proper terminal behaviour
запускается простой python pty
python3 -c 'import pty; pty.spawn("/bin/bash")'
с TERM=xterm-256color и некоторой информацией о размере окна
Я не стал делать вариант для CMD, но для powershell техника использует обфусцированный conptyshell для получения полноценной оболочки:
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
Цепочка резервных вариантов и детали для каждой ОС описаны в разделе Upgrading Sessions.
Koi может предоставлять свои сессии и модули через MCP, чтобы клиент LLM мог читать вашу таблицу сессий и управлять модулями без необходимости копировать и вставлять что-либо вручную.
# read-only: sessions, modules and logs
koi --mcp
# lets the model run commands and modules on targets
koi --mcp --mcp-allow-exec