
Penelope Shell Handler
Penelopeは、ペネトレーションテスターやCTFプレイヤーのための最新型シェルハンドラです。基本的なnetcatリスナーの代わりとなる、より高機能な選択肢を提供し、自動PTYアップグレード、セッション管理、ログ取得、ファイル転送、ヘルパーモジュールを追加します。
PenelopeはLinux、macOS、FreeBSDを含むUnix系システムで動作し、Python 3.6以上が必要です。
PenelopeはKali Linuxで利用可能です:
sudo apt update
sudo apt install penelope
PenelopeはPythonの標準ライブラリのみで実装されているため、外部依存関係なしでスタンドアロンスクリプトとして実行できます:
wget -q https://raw.githubusercontent.com/brightio/penelope/refs/heads/main/penelope.py && python3 penelope.py
GitHubから最新のアップストリーム版を直接インストールするには:
pipx install git+https://github.com/brightio/penelope
バージョン管理され安定したリリースパスとして、PenelopeはPyPIでも利用可能です:
pipx install penelope-shell-handler
(*) upgrade コマンドで手動でPTYにアップグレード可能
⚠️ Windowsサポートは試験的であり、活発に開発中です。
set DisablePayloadHandler True でデフォルトハンドラを無効化することにより、Metasploitエクスプロイトと連携可能--mcp スイッチでアクティブセッションをClaude CodeなどのMCPクライアントに公開(ローカルHTTP、トークン認証)、ユーザーと並行して同じシェルを操作

penelope # 0.0.0.0:4444 でリバースシェルを待ち受け
penelope -p 5555 # 0.0.0.0:5555 でリバースシェルを待ち受け
penelope -p 4444,5555 # 0.0.0.0:4444 と 0.0.0.0:5555 でリバースシェルを待ち受け
penelope -i eth0 -p 5555 # eth0:5555 でリバースシェルを待ち受け
penelope -a # 0.0.0.0:4444 で待ち受け、サンプルのリバースシェルペイロードを表示
penelope -c target -p 3333 # target:3333 のバインドシェルに接続
penelope ssh user@target # ローカルポート4444 でターゲットからリバースシェルを取得
penelope -p 5555 ssh user@target # ローカルポート5555 でターゲットからリバースシェルを取得
penelope -i eth0 -p 5555 -- ssh -l user -p 2222 target # eth0、ローカルポート5555 でターゲットからリバースシェルを取得(ssh にスイッチが必要な場合は -- を使用)
penelope -s <File/Folder> # HTTP でファイルまたはフォルダを共有

Penelopeは簡易HTTPファイルサーバーとしても使用できます。
penelope -s file.txt # 0.0.0.0:8000 で単一ファイルを提供
penelope -s /path/to/dir # フォルダ全体を提供
penelope -s a.sh b.elf notes.txt # 複数のアイテムを同時に提供
penelope -s . -p 80 # カレントディレクトリをポート80 で提供
penelope -s secret.txt -prefix xk9 # URL プレフィックスで隠す: /xk9/secret.txt
penelope -s -u # アップロードモード:CWD への PUT/POST を受け入れる
penelope -s -u -ud /tmp/loot # アップロードモード、受信ファイルを /tmp/loot に保存
起動時に、Penelopeはインターフェースごとにすぐに使えるリンクを表示します(-u 設定時にはアップロードのヒントも表示)。そのままターゲットシェルにコピペできます。
以下のビデオで示すように、わずか数秒で以下のことが可能です:
https://github.com/brightio/penelope/assets/65655412/7295da32-28e2-4c92-971f-09423eeff178
注意:
F12 を押します。アップグレードができず基本シェルになった場合は、Ctrl+C で切り離せます。これにより誤ってシェルを強制終了することも防ぎます。interact 1 の代わりに i 1 と入力するだけです。
位置引数:
args -s/--serve および SSH リバースシェルモードの引数
オプション:
-p, --ports リスニング/接続/提供するポート(カンマ区切り)、-i/-c/-s オプションに依存
(デフォルト: 4444/5555/8000)
リバースまたはバインドシェル?:
-i, --interface リスニングするローカルインターフェース/IP (デフォルト: 0.0.0.0)
-c, --connect バインドシェルのホスト
-j, --jump リバースシェルのジャンプエンドポイント
ヒント:
-a, --payloads アクティブなリスナー向けのサンプルリバースシェルペイロードを表示
-l, --interfaces 利用可能なネットワークインターフェースを一覧表示
-h, --help このヘルプメッセージを表示して終了
セッションログ:
-L, --no-log セッションログファイルを無効化
-T, --no-timestamps ログのタイムスタンプを無効化
-CT, --no-colored-timestamps ログの色付きタイムスタンプを無効化
その他:
-M, --menu メインメニューで起動
-m, --maintain ターゲットごとにN個のセッションを維持
-S, --single-session 最初に作成されたセッションのみを受け入れる
-ms, --max-sessions ホストごとの最大アクティブセッション数(デフォルト5、0=すべて拒否)
-C, --no-attach 新しいセッションに自動アタッチしない
-U, --no-upgrade シェルの自動アップグレードを無効化
-H, --keep-history ターゲットシェルの履歴を保持する(HISTFILE=/dev/null に設定しない)
-O, --oscp-safe OSCPセーフモードを有効化
--no-disk すべての状態をRAM(tmpfs)に保持、ディスクに永続化しない
MCP:
--mcp ローカルHTTP経由でMCPサーバーを有効化
--mcp-host バインドするホスト/IP(デフォルト: 127.0.0.1)
--mcp-port バインドするポート(デフォルト: 保存されたポート。なければランダムな空きポート。~/.penelope/mcp.json に永続化)
--mcp-token ベアラートークン(デフォルト: 保存されたトークン。なければ自動生成され永続化)
ファイルサーバー:
-s, --serve HTTPファイルサーバーモードを実行
-prefix, --url-prefix URLパスのプレフィックス
-u, --upload ファイルアップロード(PUT/POST)をサーバーに有効化
-ud, --upload-dir アップロードを保存するディレクトリ(デフォルト: CWD)
デバッグ:
-N, --no-bins ターゲット上の不足バイナリをシミュレート(カンマ区切り)
-v, --version バージョンを表示して終了
-d, --debug デバッグ出力を有効化
-dd, --dev-mode 開発者モードを有効化
-cu, --check-urls ハードコードされたURLの健全性をチェックして終了
Penelopeはリモートシェルとの直接かつ柔軟な対話を提供するように設計されています。使用時には以下の点に注意してください:
端末エスケープシーケンス: Penelopeはリモートシステムからの端末出力を直接ローカルの端末エミュレータに転送します。悪意のあるリモートプロセスは端末エスケープシーケンスを使用して画面を操作したり、誤解を招くリンクを作成したり、クリップボードなどの機能と相互作用したりする可能性があります。この露出は、リモートシェルをローカル端末に中継するあらゆるツール(SSH、telnet、netcatなど)に内在するものであり、Penelopeに固有のものではありません。信頼できないシステムに接続する際は、適切なセキュリティ設定の端末を使用してください。
セッションログ: セッションログには、ターゲットから受け取った認証情報、トークン、コマンド、その他の機密情報が含まれる場合があります。これらは安全に保管し、ログが不要な場合は --no-log を使用してください。
暗号化されていない接続: 標準のリバースシェルおよびバインドシェルの接続は暗号化されていません。信頼できないネットワーク上で使用する場合は、トラフィックが安全なトンネルやVPNで保護されていることを確認してください。
MCPサーバー(--mcp): 有効にすると、MCPサーバーはベアラートークン(~/.penelope/mcp.json に保存、パーミッション 0600)を保持するすべてのクライアントに、すべてのアクティブセッション(コマンド実行、ファイル転送)への完全な制御を許可します。127.0.0.1 にバインドされ、トークン認証されています。トークンを秘密に保ち、サーバーを信頼できないネットワークに公開しないでください。
⚖️ 免責事項: Penelopeは許可されたセキュリティテスト、研究、教育目的のみを対象としています。明示的な許可なくシステムに対して使用しないでください。
cat などのツールでログファイルを表示すると壊れて見える場合があります。これらのエスケープシーケンスをフィルタリングして、ログ出力をよりスムーズにする予定です。Penelopeのコアとなるシェルハンドリング機能は自動的なエクスプロイトを行わないため、OSCPスタイルの使用に適しています。ただし、試験規則は変更される可能性があるため、試験中にツールを使用する前に、必ず最新の公式OffSecルールを確認してください。
一部のモジュールには追加の注意が必要です:
誤ってルールに違反するのを避けたい場合は、-O / --oscp-safe スイッチを使用してください。
使用しているシェルアップグレードの種類によって異なります:
F12 を押すCtrl-D)Ctrl-C)いずれの場合も、セッションにアタッチするときには常に正しいキーが表示されます。例:

peneloperc を参照してください。
これは通常、別のユーザーのもとで新しいインタラクティブシェルを開いたことを意味します。Penelopeエージェントは初期シェルのディレクトリのみを追跡し、その最初のシェルのユーザーの権限を保持します。最善の回避策は、新しいシェルを開く前に cd /tmp するか、ユーザーを切り替えた場合は新しいユーザーとして新しいリバースシェルを生成することです。
あなたの貢献は非常に貴重です!ご支援いただける場合は、バグ、予期しない動作の報告、新しいアイデアの共有をお願いします。プルリクエストも送信できますが、PEP8を強制し、コードベース全体を意図せず再構築する可能性のあるIDEからのコミットは避けてください。
Penelopeはオデュッセウスの妻であり、彼の帰りを待つ忠誠心と忍耐で知られています。このツールは、基本的なリスナーを超えたワークフローのために、忠実で安定したシェルハンドラとして構築されたことにちなんで名付けられました。
| 機能 | Unix系ターゲット | Windowsターゲット |
|---|
| シェルの自動アップグレード | PTY | readline(*) |
| リアルタイム端末リサイズ | ✅ | ❌ |
| シェルアクティビティのログ記録 | ✅ | ✅ |
| リモートファイル/フォルダのダウンロード | ✅ | ✅ |
| ローカル/HTTPファイル/フォルダのアップロード | ✅ | ✅ |
| メモリ内ローカル/HTTPスクリプト実行とリアルタイム出力ダウンロード | ✅ | ❌ |
| ローカルポートフォワーディング | ✅ | ❌ |
| 複数タブおよび/またはホストへのシェル生成 | ✅ | ❌ |
| ホストごとにN個のアクティブシェルを自動維持(死亡時に再生成) | ✅ | ❌ |