
PTYアップグレード、ポストエクスプロイトモジュール、レイヤー3トンネリング、EDR回避のためのペイロード難読化、セッションログ、LLM駆動制御用のMCPサーバーを備えたマルチセッションリバースシェルハンドラー。
このプロジェクトは、高速で使いやすく(かつ機能豊富な)美しいインターフェースを備えたシェルハンドラを作るための私の挑戦です。
免責事項:これはまだ開発中であり、このセクションで説明されている主要な機能のいくつかは現在も作業中であることにご注意ください。
✨ 機能 | 🚧 作業中 | 🚀 インストール | 💻 使い方 | 🔧 PTYアップグレード | 🤖 モジュール | 🧠 MCP
完全なドキュメントはwikiにあります。
[!TIP] このデモはDocker化されたOSで実行されています。ご自身で試したい場合は、UbuntuイメージまたはdockurのWindowsをご利用いただけます。
script/socat経由、Windowsは難読化されたConPtyShell経由)。タブ補完、Ctrl+Cの転送、ターミナルのリサイズが可能になります。connect ssh user@hostで、すでに所有している認証情報をセッションに変換します。sshはペイロードを届けるだけなので、sshが終了してもシェルは生き続けます。tunnel start <id> <cidr>でシェルをレイヤー3ピボットに変換します。ターゲット上でユーザーランド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
詳細はGetting Startedを参照してください。
# 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 に記載されています。
リバースシェルを自分で送信するか、payloads *interface* と入力して事前生成されたペイロードを取得します。Koi は Linux の sh、PowerShell、cmd を操作するため、シェルはターミナルのようなものである必要がある点に注意してください。
Koi には、Windows Defender の検出を回避するための組み込みペイロード難読化ツールが含まれています。複数の手法を連鎖させることもできますが、通常は XOR エンコードとフォーマット変換で十分です。レイヤーを重ねすぎるとペイロードが破損し、ターゲットが読み取れなくなる可能性があることに留意してください。
この難読化ツールは Linux ペイロードにも使用できます。ほとんどの Linux 環境ではアンチウイルスソフトウェアが動作していませんが、bash ワンライナーは EDR ソリューションや IDS ルールによって検出されたり、既知のリバースシェルパターンを監視するブルーチームによって監視されたりすることがよくあります。ペイロードを難読化することで、一部の堅牢化された環境でレーダーをかいくぐるのに役立ちます。
すべての手法とサポートされているペイロードタイプは Payloads & Obfuscation に記載されています。
生のシェルには適切なターミナルサポートがありません。タブ補完が効かず、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
フォールバックチェーンとOSごとの詳細はセッションのアップグレードを参照してください。
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
サーバーはリスナープロセス内で動作し、127.0.0.1:7331 にバインドされ、起動時に出力されるベアラートークンで保護されます。読み取り専用が意図的にデフォルトとなっています。
[!WARNING]
--mcp-allow-execを指定すると、LLM はシェルを保持しているすべてのマシン上でコマンドを実行できるようになります。セッションログには侵害されたホストからの出力が含まれており、それは攻撃者が制御するテキストがモデルのコンテキストに直接流れ込むことを意味します。
セットアップ、クライアント設定、およびツールの完全な一覧は MCP ドキュメント にあります。
モジュールは基本的に、インスタンス上でのアクションを自動化する手段です。コマンドを実行し、Python バックエンドを活用できます。
独自のモジュールを作成したい場合は、このリポジトリをクローンし、--editable フラグを付けてインストールすることをお勧めします。シェルを取得したら、ペイロードを開発し、reload コマンドを使用して、作業中のものを含むすべてのモジュールを更新できます。
完全な API リファレンスについては wiki の モジュール開発ガイド を確認するか、既存のモジュール(ligolo、get_users)を参考にしてください。
また、独自のモジュールをこのリポジトリの一部にしたい場合は、CONTRIBUTING.md を確認してください。