Обработчик обратных оболочек с поддержкой нескольких сессий, обновлением до 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 можно использовать удалённо! Подробнее здесь
# Рекомендуется: стабильный релиз из PyPI
pipx install koi-handler
# Из исходников, если хотите разрабатывать свои модули
git clone https://github.com/b3rt1ng/koi
cd koi
pipx install --editable .
koifuscator — это прямой ярлык для модуля обфускатора.
koireview — это способ просмотреть логи ваших сессий.
Для обновления:
pipx upgrade koi-handler
Подробнее в разделе Начало работы.
# По умолчанию: bind 0.0.0.0:4010
koi
# Свой хост/порт
koi --host 10.10.14.5 --port 9001
koi -p 9001
Оказавшись внутри, команда help выведет список всех команд. Полный справочник — в CLI Reference, а работа с сессиями (теги, фоновый режим, режим для демонстрации экрана) — в Session Management.
Отправьте обратный шелл самостоятельно или введите payloads *interface*, чтобы получить готовые полезные нагрузки. Учтите, что это должен быть шелл с поддержкой терминала, так как Koi манипулирует linux sh, powershell и cmd.
Koi включает встроенный обфускатор полезной нагрузки для помощи в обходе обнаружения Windows Defender. Можно объединять несколько техник, хотя XOR-кодирования и преобразований формата обычно достаточно. Помните, что наложение слишком большого числа слоёв может повредить полезную нагрузку и сделать её нечитаемой для цели.
Обфускатор также работает для Linux-полезных нагрузок. Хотя в большинстве Linux-сред не запускается антивирус, bash-однострочники часто детектируются EDR-решениями, правилами IDS или отслеживаются blue team, следящими за известными паттернами обратных шеллов. Обфускация полезной нагрузки помогает оставаться незамеченным в некоторых защищённых средах.
Каждая техника и каждый поддерживаемый тип полезной нагрузки перечислены в 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-клиент мог читать вашу таблицу сессий и управлять модулями без копирования и вставки чего-либо вручную.