
ペンテスター向けマルチホッププロキシツール。複数ノードを介したトラフィックルーティング、SOCKS5/SSHトンネリング、ポートフォワーディング、リモートシェル、暗号化ノード通信を実現します。

Stowawayは、Go言語で記述され、ペネトレーションテスター向けに作られたマルチレベルプロキシツールです。
ユーザーはこのプログラムを使用して、外部トラフィックを複数のノードを介して内部ネットワークにプロキシし、内部ネットワークアクセスの制限を突破し、ツリー状のノードネットワークを構築し、管理機能を簡単に実現できます。
皆様のスターに感謝します。また、ご使用後に問題やバグをお寄せいただくことを歓迎します 😘
使用前に必ず使用方法と文末の注意事項をよくお読みください。
このプロジェクトは、ネットワークセキュリティの研究と教育目的のみに提供されており、いかなる違法目的にも使用しないでください。このツールを使用してテストを実行する前に、対象システムの明確な許可を得て、お住まいの国/地域の関連法規を厳守してください。 このツールの使用によって生じる直接的または間接的な結果(データ損失、システム障害、法的責任など)は、すべて利用者が負うものとし、プロジェクトの作者は乱用行為またはそれによって生じる法的責任について一切の責任を負いません。 このツールを使用することにより、本免責事項のすべての内容を読み、理解し、同意したものとみなされます。
makeを使用して直接マルチプラットフォームの完全なプログラムをビルドするか、Makefileを参照して特定のプログラムをビルドしますStowawayには2つの役割があります:
admin ペネトレーションテスターが使用するマスター側agent ペネトレーションテスターが展開する被制御側以下のコマンドで、最もシンプルなStowawayインスタンスをすばやく起動できます。
./stowaway_admin -l 9999./stowaway_agent -c <stowaway_adminのIP>:9999パラメータ:
-l パッシブモードでのリッスンアドレス[ip]:<port>
-s ノード通信暗号化キー、すべてのノード(admin&&agent)で同一である必要があります
-c アクティブモードでのターゲットノードアドレス
--socks5-proxy socks5プロキシサーバーアドレス
--socks5-proxyu socks5プロキシサーバーユーザー名(オプション)
--socks5-proxyp socks5プロキシサーバーパスワード(オプション)
--http-proxy HTTPプロキシサーバーアドレス
--down 下流プロトコルタイプ、デフォルトは生のTCPトラフィック、HTTP/WSを選択可能
--tls-enable ノード通信にTLSを有効にします。TLSを有効にするとAES暗号化は無効になります
--domain TLS SNI/WebSocketドメインを指定します。空の場合はデフォルトでターゲットノードアドレスになります
--heartbeat ハートビートパケットを有効にします
パラメータ:
-l パッシブモードでのリッスンアドレス[ip]:<port>
-s ノード通信暗号化キー
-c アクティブモードでのターゲットノードアドレス
--socks5-proxy socks5プロキシサーバーアドレス
--socks5-proxyu socks5プロキシサーバーユーザー名(オプション)
--socks5-proxyp socks5プロキシサーバーパスワード(オプション)
--http-proxy HTTPプロキシサーバーアドレス
--reconnect 再接続間隔
--rehost ポート多重化時のIPアドレス
--report ポート多重化時のポート番号
--up 上流プロトコルタイプ、デフォルトは生のTCPトラフィック、HTTP/WSを選択可能
--down 下流プロトコルタイプ、デフォルトは生のTCPトラフィック、HTTP/WSを選択可能
--cs 実行プラットフォームのシェルエンコードタイプ、デフォルトはutf-8、gbkを選択可能
--tls-enable ノード通信にTLSを有効にします。TLSを有効にするとAES暗号化は無効になります
--domain TLS SNI/WebSocketドメインを指定します。空の場合はデフォルトでターゲットノードアドレスになります
このパラメータはadminとagentで同じ使い方で、パッシブモードのみで使用します。
IPアドレスを指定しない場合、デフォルトで0.0.0.0でリッスンします。
admin: ./stowaway_admin -l 9999 または ./stowaway_admin -l 127.0.0.1:9999
agent: ./stowaway_agent -l 9999 または ./stowaway_agent -l 127.0.0.1:9999
このパラメータはadminとagentで同じ使い方で、アクティブ/パッシブモードの両方で使用できます。
オプションです。空の場合は通信は暗号化されません。指定すると、指定されたキーで通信が暗号化されます。
admin: ./stowaway_admin -l 9999 -s 123
agent: ./stowaway_agent -l 9999 -s 123
このパラメータはadminとagentで同じ使い方で、アクティブモードのみで使用します。
接続先のノードのアドレスを指定します。
admin: ./stowaway_admin -c 127.0.0.1:9999
agent: ./stowaway_agent -c 127.0.0.1:9999
これら4つのパラメータはadminとagentで同じ使い方で、アクティブモードのみで使用します。
--socks5-proxyはsocks5プロキシサーバーアドレス、--socks5-proxyuと--socks5-proxypはオプションです。
--http-proxyはHTTPプロキシサーバーアドレスで、socks5と同じように使用します。
ユーザー名とパスワードなし:
admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
ユーザー名とパスワードあり:
admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
これら2つのパラメータはadminとagentで同じ使い方で、アクティブ/パッシブモードの両方で使用できます。
ただし、adminには--upパラメータはありません。
これらのパラメータはオプションです。空の場合、上流/下流トラフィックは生のTCPトラフィックです。
上流/下流トラフィックをHTTP/WSトラフィックにしたい場合は、これらのパラメータをhttpまたはwsに設定します。
admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
agent: ./stowaway_agent -c 127.0.0.1:9999 --up ws または ./stowaway_agent -c 127.0.0.1:9999 --up ws --down ws
さらに2点注意が必要です。
第一に、あるノードの上流/下流をTCP/HTTP/WSトラフィックに設定した場合、接続されている親/子ノードの下流/上流トラフィックも同じに設定する必要があります。例:
admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
agent: ./stowaway_agent -l 9999 --up ws
上記の場合、agentは--upをwsに設定する必要があります。そうしないとネットワークエラーが発生します。
agent間でも同様です。
agent-1が127.0.0.1:10000ポートで子ノードの接続を待ち、--down wsを設定しているとします。
その場合、agent-2も--upをwsに設定する必要があります。そうしないとネットワークエラーが発生します。
./stowaway_agent -c 127.0.0.1:10000 --up ws第二に、httpは半二重プロトコルであり、Stowawayの全二重通信にはあまり適していません。そのため、ここでのhttpプロトコルはhttpメッセージ形式のみを実装しており、完全な機能を持つhttpワークフローではありません。したがって、このプロトコルを使用することは可能ですが、Stowaway間のトラフィックがhttpメッセージ形式で転送される場合、nginxを介して転送することはできません。このコードと機能は、一方では特定の状況でのhttpプロトコルの使用のために保持されており、他方ではカスタムプロトコルのテンプレートとしても提供され、ユーザーがカスタムプロトコルを定義する際の参考になります。
nginxなどのリバースプロキシを介して通信する場合は、wsプロトコルを使用し、TLSを併用してください。
このパラメータはagentのみで使用し、アクティブモードのみで使用します。
オプションです。設定しない場合、ノードはネットワーク接続が切断されても能動的に再接続しません。設定すると、ノードはx(設定した秒数)秒ごとに親ノードへの再接続を試みます。
admin: ./stowaway_admin -l 9999
agent: ./stowaway_agent -c 127.0.0.1:9999 --reconnect 10
上記の場合、agentとadmin間の接続が切断されると、agentは10秒ごとにadminへの再接続を試みます。
agent間でも同様です。
また、--reconnectパラメータは--socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxyと一緒に使用でき、agentは起動時の設定に従ってプロキシ経由で再接続を試みます。
これらのパラメータは特にagent側でのみ使用されます。詳細は下記の「ポート多重化メカニズム」を参照してください。
このパラメータはagentのみで使用し、アクティブ/パッシブモードで使用できます。
主に'shell'機能の文字化けを解決するためのものです。agentがコンソールエンコードがgbkのプラットフォーム(一般的なWindowsなど)で動作し、同時にadminがコンソールエンコードがutf-8のプラットフォームで動作する場合、このパラメータを'gbk'に設定する必要があります。
./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbkこれらのパラメータはadminとagentで同じ使い方で、アクティブ/パッシブモードで使用できます。
このオプションを設定すると、ノード間のトラフィックをTLSで暗号化できます。
例:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c localhost:10000 --tls-enable -s 123注意:このパラメータを有効にすると、aes暗号化はデフォルトで無効になり、-sパラメータはノード間の相互認証およびポート多重化機能にのみ使用されます。
また、このパラメータを有効にする場合、ネットワーク内のすべてのノード(adminを含む)でこのパラメータを有効にしてください。
これらのパラメータはadminとagentで同じ使い方で、アクティブモードのみで使用できます。
このオプションを設定すると、現在のノードのTLSネゴシエーション時のSNIオプションまたはWebSocketのターゲットHostを設定できます。
例:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.comこのパラメータはadmin側のみで使用し、アクティブ/パッシブモードで使用できます。
このオプションを設定すると、adminが最初のノードに継続的にハートビートパケットを送信し、途中にリバースプロキシがある場合でも長期間の接続を維持できます。
adminとagentの間にnginxのようなリバースプロキシデバイスがあり、8080ポートを8000ポートにプロキシしていると仮定します。例:
./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up ws現在のStowawayは、SO_REUSEPORTとSO_REUSEADDRの機能に基づくポート多重化機能と、IPTABLESに基づくポート多重化機能を提供しています。