
LinuxおよびWindowsをサポートするクロスプラットフォームで、リバース/バインドシェルを介した列挙、権限昇格、永続化、C2操作を自動化するポストエクスプロイテーションプラットフォーム。
pwncatは、Linuxターゲット向けのポストエクスプロイテーションプラットフォームです。基本的なバインドシェルやリバースシェルのラッパーとして始まり、そこから成長しました。攻撃者マシンからコードをステージングしながら、一般的なレッドチーム運用を効率化します。ターゲット上でコードを実行するのではありません。
以前はLinuxのみをサポートしていましたが、最近は複数プラットフォームに対応するための作業が進められています。現在、Windowsターゲット向けのアルファサポートがあります。Windowsターゲットでpwncatを使用する方法の詳細については、最新のドキュメントを参照してください。
pwncatはリモートシェルとの生の通信をインターセプトし、列挙、インプラントのインストール、特権昇格など、リモートホストでの自動化されたアクションをユーザーが実行できるようにします。
接続を受け取った後、pwncatはリモートシェルで作業するための一般的な設定をいくつか行います。
whichを使用)pwncatは、いくつかの異なる方法でptyを生成する方法を把握しており、以前に列挙した実行可能ファイルと方法を相互参照します。ptyを生成した後、制御端末をrawモードに設定し、sshと同様の方法で対話できるようにします。
pwncatは、リモートのpty設定(行、列、TERM環境変数など)をローカル設定と同期し、vimやnanoなどのインタラクティブアプリケーションでシェルが正しく動作するようにします。
John Hammondと私はGRIMMConでpwncatを発表しました。その発表はYouTubeこちらでご覧いただけます。このビデオはAPIとインターフェースの初期バージョンを示しています。最新の使用方法とAPIドキュメントについては、ドキュメントを参照してください。
pwncatのドキュメントはRead the Docsで構築されています。最新の使用方法と開発ドキュメントについては、そちらをご覧ください。
pwncatにはLinux上のPython 3.9+が必要です
pwncatは、Linux上で動作するPython開発環境のみに依存します。pipで必要なパッケージの一部をインストールするには、おそらくディストリビューションの「Python開発パッケージ」が必要です。Debianベースのシステムでは、これはpython-devです。Archでは、開発ファイルはメインのPythonリポジトリに含まれています。Enterprise Linuxでは、パッケージ名はpython-develです。
pwncatはPyPIにpwncat-csという名前でプッシュされており、pipで次のようにインストールできます。
pip install pwncat-cs
ただし、仮想環境からpwncatをインストールすることを推奨します。
python3 -m venv pwncat-env
source pwncat-env/bin/activate
pip install pwncat-cs
開発環境では、pwncatはPython Poetryを使用します。リポジトリをクローンし、poetryを使用して開発環境をセットアップできます。
# poetry管理の仮想環境内にpwncatをセットアップ
git clone [email protected]:calebstewart/pwncat.git
cd pwncat
poetry install
# 仮想環境に入る
poetry shell
Cytopiaのpwncatとの名前の競合のため、パッケージ名をpwncat-csに変更することにしました。これにはエントリポイントの名前変更も含まれており、Cytopiaのプロジェクトとの直接の競合を避けています。v0.4.*から更新する場合、コマンド名が変更され、pcatおよびpcバリアントは削除されました。詳細については、最新のリリースノートを参照してください。
この変更の追加の利点は、プロジェクトがPyPIにプッシュされ、将来のインストール/更新が容易になることです。
pwncatはv0.4.0a1以降、Windowsターゲットからの接続をサポートしています。Windowsプラットフォームは、自動的にロードされる.NetベースのC2ライブラリを利用します。Windowsターゲットはcmd.exeまたはpowershell.exeシェルで接続する必要があり、pwncatが残りの処理を行います。
C2を実装するライブラリはpwncat-windows-c2にあります。C2のDLLは、対象のリリースから自動的にダウンロードされます。ターゲットマシンにインターネット接続がない場合は、--download-plugins引数を使用してpwncatにDLLを事前ステージングするように指示できます。pwncatのリリースバージョンを実行している場合は、リリースページからすべての組み込みプラグインのtarballをダウンロードすることもできます。
プラグインはデフォルトで~/.local/share/pwncatに保存されますが、これはplugin_path設定で構成可能です。リリースページからパッケージ化されたプラグインセットをダウンロードした場合は、plugin_pathが指すパスに抽出する必要があります。
メインのC2 DLLの他に、他のプラグインも利用可能な場合があります。現在、デフォルトで提供されているプラグインはC2とBadPotatoの実装のみです。pwncatは.NetバイナリをリフレクティブにロードしてC2のプラグインとして使用できます。Windows C2プラグインの詳細については、ドキュメントを参照してください。
最近、pwncatフレームワークのアーキテクチャが再設計され、汎用的な「モジュール」構造が組み込まれました。すべての機能は現在モジュールとして実装されています。これには列挙、永続化、特権昇格が含まれます。モジュールとの対話は、他のほとんどのポストエクスプロイテーションプラットフォームと同様です。使い慣れたrun、search、infoコマンドを利用でき、useコマンドでモジュールコンテキストに入ることができます。詳細についてはドキュメントを参照してください。
BlackArchへのインストールは次のように簡単です。
pacman -Syu pwncat-caleb
pwncatのコマンドラインパラメータは柔軟で、さまざまな一般的な接続構文を受け入れるように設計されています。具体的には、一般的なnetcatやsshのような構文を受け入れようとします。以下はすべて有効です。
# バインドシェルに接続
pwncat-cs connect://10.10.10.10:4444
pwncat-cs 10.10.10.10:4444
pwncat-cs 10.10.10.10 4444
# リバースシェルを待ち受け
pwncat-cs bind://0.0.0.0:4444
pwncat-cs 0.0.0.0:4444
pwncat-cs :4444
pwncat-cs -lp 4444
# SSH経由で接続
pwncat-cs ssh://user:[email protected]
pwncat-cs [email protected]
pwncat-cs user:[email protected]
pwncat-cs -i id_rsa [email protected]
# 標準以外のポートでSSH
pwncat-cs -p 2222 [email protected]
pwncat-cs [email protected]:2222
# インストールされた永続化を利用して再接続
# 再接続に失敗し、プロトコルが指定されていない場合、
# フォールバックとしてSSHが使用されます。
pwncat-cs reconnect://[email protected]
pwncat-cs reconnect://user@c228fc49e515628a0c13bdc4759a12bf
pwncat-cs [email protected]
pwncat-cs c228fc49e515628a0c13bdc4759a12bf
pwncat-cs 10.10.10.10
デフォルトでは、pwncatはターゲットプラットフォームがLinuxであると想定します。Windowsのリバースシェルまたはバインドシェルに接続するには、--platform/-m引数を渡す必要があります。
pwncat-cs -m windows 10.10.10.10 4444
pwncat-cs -m windows -lp 4444
構文と引数の処理の詳細については、pwncat-cs --helpのヘルプ情報を参照するか、ドキュメントをご覧ください。
推奨されるインストール方法はPython仮想環境です。これにより、日々のpwncatの使用が最も簡単になります。しかし、Dockerイメージからpwncatを使用したいという要望もあるため、動作するpwncatインストールを提供するDockerfileを用意しました。イメージをビルドするには、以下を使用します。
docker build -t pwncat .
これにより、タグ"pwncat"でpwncat Dockerイメージがビルドされます。コンテナ内の作業ディレクトリは/workです。コンテナのエントリポイントはpwncatバイナリです。次のように使用できます。
# 10.0.0.1:4444のバインドシェルに接続
docker run -v "/some/directory":/work -t pwncat 10.0.0.1 4444
この例では、/some/directory内のファイルのみがコンテナに公開されます。明らかに、アップロード/ダウンロードの場合、コンテナはマウントされたディレクトリを通じて公開されたファイルのみを認識できます。
pwncatは2つの主要な機能を提供します。その核となるのは、リモートの疑似端末(pty)を自動的にセットアップし、完全なSSHセッションのようにリモートホストと対話できるようにすることです。ptyで操作する場合、履歴、行編集、グラフィカル端末アプリケーションなどのリモートシェルの一般的な機能を使用できます。
pwncatのもう半分は、リモートシェルを利用して自動化された列挙、永続化、特権昇格タスクを実行するフレームワークです。ローカルのpwncatプロンプトは、標準的なペネトレーションテストのために多数の便利な機能を提供します。これには以下が含まれます。
pwncatはこれらのリモートの「改変」を自動的に元に戻す機能も提供しますリモートホストとの対話のための基盤フレームワークは、基盤となるシェルや接続方法を可能な限り抽象化し、コマンドやプラグインがリモートホストとシームレスに対話できるようにすることを目指しています。
pwncatとの対話方法や基盤フレームワークの詳細については、ドキュメントをご覧ください。新しい特権昇格方法や永続化方法のアイデアがある場合は、特にAPIドキュメントをご覧ください。プルリクエストを歓迎します!
pwncatはレッドチームのスイスアーミーナイフになることを目指しています。近いうちに、さらに多くの機能が追加される予定です。
pwncatは、最小限のリモートシステム依存で抽象的に任意のシェルと対話しようとしているため、いくつかのエッジケースが見つかっています。見つけた場合は、それらを考慮し、ユーザーから隠すためにあらゆる努力をしています。しかし、いくつかはすり抜けて実際に観測されています。そのような場合、pwncatは端末を保護するために可能な限りのことを行いますが、奇妙な出力やコマンドの失敗が発生する可能性があります。
BSDはUnixベースのカーネルですが、実際にはそのユーザーランドツールはLinuxのものと著しく異なります。このため、pwncatの自動化された機能の多くは、BSDベースのターゲットに対して動作しないか、完全に失敗します。すべてのエラーやエッジケースをキャッチしようと努めていますが、BSDに対して完全にテストされていない問題がいくつかある可能性があります。いずれにせよ、安定化されたシェルはBSD環境内で機能するはずですが、保証はしません。
後日時間ができれば、BSD上でpwncatを安定化させるかもしれないが、現時点ではLinuxベースのディストリビューションに焦点を当てています。BSD上でpwncatの動作を改善することに貢献したい場合は、連絡していただくか、リポジトリをフォークしてください。いつものように、プルリクエストを歓迎します!