Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Stowaway — ペンテスター向けマルチホッププロキシツール。複数ノードを介したトラフィックルーティング、SOCKS5/SSHトンネリング、ポートフォワーディング、リモートシェル、暗号化ノード通信を実現します。 | Kitploit
ツール/GitHubGitHub/ph4ntonn/stowaway
暗号化/復号化ツール横移動ネットワークアクセスコントロールペネトレーションテストコマンド&コントロールレッドチーミング
GitHubph4ntonn/stowaway

Stowaway

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

リポジトリを見る
3.4k4425ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

stowaway.png

Stowaway

GitHub issues GitHub forks GitHub stars GitHub license

English

Stowawayは、Go言語で記述され、ペネトレーションテスター向けに作られたマルチレベルプロキシツールです。

ユーザーはこのプログラムを使用して、外部トラフィックを複数のノードを介して内部ネットワークにプロキシし、内部ネットワークアクセスの制限を突破し、ツリー状のノードネットワークを構築し、管理機能を簡単に実現できます。

皆様のスターに感謝します。また、ご使用後に問題やバグをお寄せいただくことを歓迎します 😘

使用前に必ず使用方法と文末の注意事項をよくお読みください。

声明

このプロジェクトは、ネットワークセキュリティの研究と教育目的のみに提供されており、いかなる違法目的にも使用しないでください。このツールを使用してテストを実行する前に、対象システムの明確な許可を得て、お住まいの国/地域の関連法規を厳守してください。 このツールの使用によって生じる直接的または間接的な結果(データ損失、システム障害、法的責任など)は、すべて利用者が負うものとし、プロジェクトの作者は乱用行為またはそれによって生じる法的責任について一切の責任を負いません。 このツールを使用することにより、本免責事項のすべての内容を読み、理解し、同意したものとみなされます。

特徴

  • 管理側のより使いやすいインタラクション、コマンド補完/履歴をサポート
  • 一目でわかるノードツリー管理
  • 豊富なノード情報表示
  • ノード間の正方向/逆方向接続
  • ノード間の再接続をサポート
  • socks5/httpプロキシを介したノード間接続
  • SSHトンネルを介したノード間接続
  • ノード間トラフィックにTCP/HTTP/WSを選択可能
  • マルチレベルsocks5プロキシ転送、UDP/TCP、IPV4/IPV6をサポート
  • ノードはSSHによるリモートホストアクセスをサポート
  • リモートシェル
  • ファイルのアップロードおよびダウンロード
  • ポートのローカル/リモートマッピング
  • ノードのポート多重化
  • 各種サービスの自由なオン/オフ
  • ノード間の相互認証
  • ノード間トラフィックはTLS/AES-256-GCMで暗号化
  • v1.0と比較してファイルサイズが25%削減
  • 各種プラットフォームをサポート(Linux/Mac/Windows/MIPS/ARM)

ビルドとデモ

  • makeを使用して直接マルチプラットフォームの完全なプログラムをビルドするか、Makefileを参照して特定のプログラムをビルドします
  • ビルドしたくない方は、release でビルド済みのプログラムを直接使用できます
  • デモ動画:YouTube

使用方法

役割

Stowawayには2つの役割があります:

  • admin ペネトレーションテスターが使用するマスター側
  • agent ペネトレーションテスターが展開する被制御側

用語定義

  • ノード: admin または agent を指します
  • アクティブモード: 操作中のノードが別のノードに能動的に接続するモード
  • パッシブモード: 操作中のノードがポートをリッスンし、別のノードからの接続を待つモード
  • 上流: 操作中のノードとその親ノード間のトラフィック
  • 下流: 操作中のノードとそのすべての子ノード間のトラフィック

クイックスタート

以下のコマンドで、最もシンプルなStowawayインスタンスをすばやく起動できます。

  • admin: ./stowaway_admin -l 9999
  • agent: ./stowaway_agent -c <stowaway_adminのIP>:9999

パラメータ解説

  • admin
root@kitploit:~
パラメータ:
-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 ハートビートパケットを有効にします
  • agent
root@kitploit:~
パラメータ:
-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ドメインを指定します。空の場合はデフォルトでターゲットノードアドレスになります

パラメータの使い方

-l

このパラメータは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

-s

このパラメータはadminとagentで同じ使い方で、アクティブ/パッシブモードの両方で使用できます。

オプションです。空の場合は通信は暗号化されません。指定すると、指定されたキーで通信が暗号化されます。

  • admin: ./stowaway_admin -l 9999 -s 123

  • agent: ./stowaway_agent -l 9999 -s 123

-c

このパラメータはadminとagentで同じ使い方で、アクティブモードのみで使用します。

接続先のノードのアドレスを指定します。

  • admin: ./stowaway_admin -c 127.0.0.1:9999

  • agent: ./stowaway_agent -c 127.0.0.1:9999

--socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy

これら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

--up/--down

これら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に設定する必要があります。そうしないとネットワークエラーが発生します。

  • agent-2: ./stowaway_agent -c 127.0.0.1:10000 --up ws

第二に、httpは半二重プロトコルであり、Stowawayの全二重通信にはあまり適していません。そのため、ここでのhttpプロトコルはhttpメッセージ形式のみを実装しており、完全な機能を持つhttpワークフローではありません。したがって、このプロトコルを使用することは可能ですが、Stowaway間のトラフィックがhttpメッセージ形式で転送される場合、nginxを介して転送することはできません。このコードと機能は、一方では特定の状況でのhttpプロトコルの使用のために保持されており、他方ではカスタムプロトコルのテンプレートとしても提供され、ユーザーがカスタムプロトコルを定義する際の参考になります。

nginxなどのリバースプロキシを介して通信する場合は、wsプロトコルを使用し、TLSを併用してください。

--reconnect

このパラメータは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は起動時の設定に従ってプロキシ経由で再接続を試みます。

--rehost/--report

これらのパラメータは特にagent側でのみ使用されます。詳細は下記の「ポート多重化メカニズム」を参照してください。

--cs

このパラメータはagentのみで使用し、アクティブ/パッシブモードで使用できます。

主に'shell'機能の文字化けを解決するためのものです。agentがコンソールエンコードがgbkのプラットフォーム(一般的なWindowsなど)で動作し、同時にadminがコンソールエンコードがutf-8のプラットフォームで動作する場合、このパラメータを'gbk'に設定する必要があります。

  • Windows: ./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbk

--tls-enable

これらのパラメータはadminとagentで同じ使い方で、アクティブ/パッシブモードで使用できます。

このオプションを設定すると、ノード間のトラフィックをTLSで暗号化できます。

例:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c localhost:10000 --tls-enable -s 123

注意:このパラメータを有効にすると、aes暗号化はデフォルトで無効になり、-sパラメータはノード間の相互認証およびポート多重化機能にのみ使用されます。

また、このパラメータを有効にする場合、ネットワーク内のすべてのノード(adminを含む)でこのパラメータを有効にしてください。

--domain

これらのパラメータはadminとagentで同じ使い方で、アクティブモードのみで使用できます。

このオプションを設定すると、現在のノードのTLSネゴシエーション時のSNIオプションまたはWebSocketのターゲットHostを設定できます。

例:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.com

--heartbeat

このパラメータはadmin側のみで使用し、アクティブ/パッシブモードで使用できます。

このオプションを設定すると、adminが最初のノードに継続的にハートビートパケットを送信し、途中にリバースプロキシがある場合でも長期間の接続を維持できます。

adminとagentの間にnginxのようなリバースプロキシデバイスがあり、8080ポートを8000ポートにプロキシしていると仮定します。例:

  • admin: ./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up ws

ポート多重化メカニズム

現在のStowawayは、SO_REUSEPORTとSO_REUSEADDRの機能に基づくポート多重化機能と、IPTABLESに基づくポート多重化機能を提供しています。

  • Linuxでは、ほとんどの機能ポートで使用できます。
  • Windowsでは、IIS、RDPポートでは使用できませんが、MySQL、Apacheサービスのポートでは使用できます。

多重化方法

  • SO_REUSEPORTおよびSO_REUSEADDRモード

    agent側がポート多重化メカニズムを使用して80ポートを多重化すると仮定します。

    この場合、agent側は--rehost、--report、-sパラメータを設定する必要があります。

    • --rehost: 多重化したいIPアドレス。0.0.0.0は不可で、通常はネットワークカードの外部アドレスです。

    • --report: 多重化したいポート。

    • -s: 通信キー。

    主にWindows、Mac環境での多重化をサポート。Linuxでも可能ですが、制限が多いです。

    • admin側:./stowaway_admin -c 192.168.0.105:80 -s 123
    • agent側:./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123
  • IPTABLESモード

    agent側がポート多重化メカニズムを使用して22ポートを多重化すると仮定します。

    この場合、agent側は-l、--report、-sパラメータを設定する必要があります。

    • -l: 通常アクセスできないポート、つまりagentが実際にリッスンして接続を受け付けるポート。

注意

  • 上記の例はadminとagent間の接続のみを示していますが、agentとagent間の接続も同様で違いはありません。

  • agentがctrl-cまたはkillコマンドで強制終了された場合、プログラムは自動的にiptablesルールをクリーンアップします。ただし、kill -9で強制終了された場合は自動的にクリーンアップできません。

    そのため、agentが異常終了した際にiptablesルールがクリーンアップされず、多重化されたサービスにアクセスできなくなるのを防ぐため、

    クローズが必要な場合は、以下を実行します:python reuse.py --stop --rhost xxx.xxx.xxx.xxx --rport xxx

    これにより転送ルールが無効になり、元のサービスに正常にアクセスできるようになります。

  • IPTABLESモードのポート多重化を使用する場合、強制的に0.0.0.0でリッスンすることになり、-lパラメータでIPを指定することはできません。

マルチレベルネットワークを構成するには?

上記の例では、adminと1つのagentのみが登場しています。

マルチレベルネットワークが核心です。

Stowawayでマルチレベルネットワークを構成するには、adminのlisten、connect、sshtunnelコマンドを使用する必要があります。

簡単な例を示します。

  • admin: ./stowaway_admin -l 9999 -s 123

この時点でagent-1がadminに接続しています。

  • agent-1: ./stowaway_agent -c 127.0.0.1:9999 -s 123

ここでさらにagent-2を接続したい場合、以下のようにします。

  • agent-2: ./stowaway_agent -l 10000 -s 123

すると、adminでuse 0 -> connect agent-2のIP:10000と入力することで、agent-2をネットワークに追加し、agent-1の子ノードにできます。

さらにagent-3を接続したいが、agent-1からはagent-3にアクセスできないと仮定します。

その場合、adminでuse 0 -> listen -> 1.Normal Passiveを選択 -> 10001と入力することで、agent-1が10001ポートでリッスンし、子ノードの接続を待つようになります。

adminの操作が完了したら、agent-3を以下のように起動します。

  • agent-3: ./stowaway_agent -c 127.0.0.1:10001 -s 123

これでagent-3をagent-1のもう一つの子ノードとしてネットワークに追加できます。

listenおよびsshtunnelの詳細については、下記の「コマンド解説」を参照してください。

再接続方法

Stowawayは現在、複数の方法での再接続をサポートしています。簡単にまとめると以下の通りです。

まず、親ノードが切断された場合、能動的に終了するノードは1種類のみです。それは、起動時にアクティブモードで再接続が設定されていないノードです。

再接続が設定されている場合、ノードは指定された間隔で再接続を試みます。

また、パッシブモードで起動したすべてのノードは能動的に終了せず、起動時のパラメータに基づいて指定されたポートで再リッスンします。この場合、ユーザーはconnect、sshtunnelを使用してこれらのノードをネットワークに再接続できます。

注意

  1. ネットワークの変動や中間ノードの切断により、特定のブランチが切断された場合、能動的な再接続時には必ず欠落したチェーンの先頭ノードに接続してください。例:adminの後にnode1があり、node1から2つのブランチに分かれています。1つはnode1->node2->node3->node4、もう1つはnode1->node5->node6です。node2が切断された場合、node3とnode4は切断されず、生き続けます。この場合、ユーザーがnode3とnode4をネットワークに再接続するには、2つの選択肢があります。1つは、node1がnode3に直接アクセスできる場合、node1でconnectまたはsshtunnelコマンドを使用してnode3をいつでもネットワークに再追加できます(注意:node1が同時にnode4にもアクセスできる場合でも、node4に直接接続せず、欠落したチェーン全体(node3->node4)の先頭ノードであるnode3に接続してください)。これにより、node3とnode4をネットワークに再接続できます。もう1つの選択肢は、node1がnode3に直接アクセスできない場合(つまりnode2を経由する必要がある場合)、まずnode2を再起動してネットワークに追加し、その後node2でconnectまたはsshtunnelコマンドを使用してnode3に接続し、node3とnode4をネットワークに追加します。

  2. ノードが切断された場合、そのノードとその子ノードに関するすべてのsocks、backward、forwardサービスが強制的に停止されます。

コマンド解説

adminコンソールでは、Tabキーでコマンドを補完し、方向キーで履歴の検索/カーソル移動ができます。

adminコンソールは2つの階層に分かれています。最初の階層はメインパネルで、以下のコマンドがあります。

  • help: メインパネルのヘルプ情報を表示
root@kitploit:~
(admin) >> help
  help                                     		Show help information
  detail                                  		Display connected nodes' detail
  topo                                     		Display nodes' topology
  use        <id>                          		Select the target node you want to use
  exit                                     		Exit Stowaway
  • detail: オンラインノードの詳細情報を表示
root@kitploit:~
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • topo: オンラインノードの親子関係を表示
root@kitploit:~
(admin) >> topo
Node[0]'s children ->
Node[1]

Node[1]'s children ->
  • use: 特定のagentを使用
root@kitploit:~
(admin) >> use 0
(node 0) >>
  • exit: Stowawayを終了
root@kitploit:~
(admin) >> exit
[*] Do you really want to exit stowaway?(y/n): y
[*] BYE!

ユーザーがuseコマンドでagentを選択すると、第2階層のノードパネルに入ります。以下のコマンドがあります。

  • help: ノードパネルのヘルプ情報を表示
root@kitploit:~
(node 0) >> help
  help                                            Show help information
  status                                          Show node status,including socks/forward/backward
  listen                                          Start port listening on current node
  addmemo    <string>                             Add memo for current node
  delmemo                                         Delete memo of current node
  ssh        <ip:port>                            Start SSH through current node
  shell                                           Start an interactive shell on current node
  socks      <lport> [username] [pass]            Start a socks5 server
  stopsocks                                       Shut down socks services
  connect    <ip:port>                            Connect to a new node
  sshtunnel  <ip:sshport> <agent port>            Use sshtunnel to add the node into our topology
  upload     <local filename> <remote filename>   Upload file to current node
  download   <remote filename> <local filename>   Download file from current node
  forward    <lport> <ip:port>                    Forward local port to specific remote ip:port
  stopforward                                     Shut down forward services
  backward    <rport> <lport>                     Backward remote port(agent) to local port(admin)
  stopbackward                                    Shut down backward services
  shutdown                                        Terminate current node
  back                                            Back to parent panel
  exit                                            Exit Stowaway 
  • status: 現在のノードのsocks/forward/backward状態を表示
root@kitploit:~
(node 0) >> status
Socks status:
      ListenAddr: 0.0.0.0:10000    Username:    Password:
-------------------------------------------------------------------------------------------
Forward status:
      [1] Listening Addr: [::]:20000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
      [2] Listening Addr: [::]:30000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
-------------------------------------------------------------------------------------------
Backward status:
      [1] Remote Port: 40000 , Local Port: 50000 , Active Connections: 0
  • listen: agentに特定のポートでリッスンさせ、子ノードの接続を待つよう指示
root@kitploit:~
(node 0) >> listen
[*] MENTION! If you choose IPTables Reuse or SOReuse, you MUST CONFIRM that the node was initially started in the corresponding way!
[*] When you choose IPTables Reuse or SOReuse, the node will use the initial config(when node started) to reuse port!
[*] Please choose the mode(1.Normal passive / 2.IPTables Reuse / 3.SOReuse): 1
[*] Please input the [ip:]<port> : 10001
[*] Waiting for response......
[*] Node is listening on 10001

注意:listenはかなり特殊なコマンドです。ご覧の通り、listenコマンドには3つのモードがあります。

  1. Normal passive: このオプションは、agentが通常の方法でターゲットポートでリッスンし、子ノードの接続を待つことを意味します。
  2. IPTables Reuse:このオプションは、agentがIPTables Reuseの方法でポートを多重化し、子ノードの接続を待つことを意味します。
  3. SOReuse:このオプションは、agentがSOReuseの方法でポートを多重化し、子ノードの接続を待つことを意味します。

最初のモードが最も一般的に使用されます。親ノードがこの方法でリッスンする場合、子ノードは-c 親ノードのip:portとするだけでネットワークに参加できます。

2番目と3番目のモードは特殊です。ユーザーが2番目または3番目のモードを選択する場合、操作中のノード自体がポート多重化方式で起動していることを確認する必要があります。そうでない場合、これらのモードは使用できません。

2番目と3番目のモードでは、ユーザーは何も入力する必要はありません。ノードは自動的に自身の起動時パラメータを使用してポートを多重化し、子ノードの接続を受け付ける準備をします。

また、listenは一度に1つの子ノードのみを受け入れます。複数の子ノードを接続する必要がある場合は、対応する回数だけlistenコマンドを実行してください。

  • addmemo: 現在のノードにメモを追加
root@kitploit:~
(node 0) >> addmemo test
[*] Memo added!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:  test
  • delmemo: 現在のノードのメモを削除
root@kitploit:~
(node 0) >> delmemo
[*] Memo deleted!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • ssh: ノードにSSHでターゲットマシンに接続するよう指示
root@kitploit:~
(node 0) >> ssh 127.0.0.1:22
[*] Please choose the auth method(1.username&&password / 2.certificate): 1
[*] Please enter the username: ph4ntom
[*] Please enter the password: *****
[*] Waiting for response.....
[*] Connect to target host via ssh successfully!
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:03:56]
$ whoami
ph4ntom
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:04:16]
$

このモードでは、Tabキーは無効になります。

  • shell: 現在のノードのシェルを取得
root@kitploit:~
(node 0) >> shell
[*] Waiting for response.....
[*] Shell is started successfully!

bash: no job control in this shell

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ whoami
ph4ntom
bash-3.2$

このモードでは、Tabキーは無効になります。

  • socks:現在のノードでsocks5サービスを起動
root@kitploit:~
(node 0) >> socks 7777
[*] Trying to listen on 0.0.0.0:7777......
[*] Waiting for response......
[*] Socks start successfully!
(node 0) >>

注意:ここでの7777ポートはagent側ではなく、admin側で開かれます。

ユーザー名とパスワードを設定する必要がある場合は、上記のコマンドをsocks 7777 <your username> <your password>に変更してください。

リッスンするインターフェースを指定する必要がある場合は、上記のコマンドをsocks xxx.xxx.xxx.xxx:7777に変更してください。

  • stopsocks: 現在のノードのsocks5サービスを停止
root@kitploit:~
(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777    Username: <null>    Password: <null>
[*] Do you really want to shut down socks?(yes/no): yes
[*] Closing......
[*] Socks service has been closed successfully!
(node 0) >>
  • connect: 現在のノードに別の子ノードへ接続するよう指示
root@kitploit:~
agent-1: ./stowaway_agent -l 10002
root@kitploit:~
(node 0) >> connect 127.0.0.1:10002
[*] Waiting for response......
[*] New node online! Node id is 1

(node 0) >>
  • sshtunnel: 現在のノードにSSHトンネル経由で別の子ノードに接続するよう指示
root@kitploit:~
agent-2: ./stowaway_agent -l 10003
root@kitploit:~
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] Please choose the auth method(1.username&&password / 2.certificate): 1
[*] Please enter the username: ph4ntom
[*] Please enter the password: ******
[*] Waiting for response.....
[*] New node online! Node id is 2

(node 0) >>

厳しいネットワーク環境下では、SSHトンネルを使用してStowawayのトラフィックをSSHトラフィックに偽装し、ファイアウォールの制限を回避できます。

  • upload: 現在のノードにファイルをアップロード
root@kitploit:~
(node 0) >> upload test.7z test.xxx
[*] File transmitting, please wait...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • download: 現在のノードからファイルをダウンロード
root@kitploit:~
(node 0) >> download test.xxx test.xxxx
[*] File transmitting, please wait...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • forward: admin上のポートをリモートポートにマッピング
root@kitploit:~
(node 0) >> forward 9000 127.0.0.1:22
[*] Trying to listen on 0.0.0.0:9000......
[*] Waiting for response......
[*] Forward start successfully!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9000
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
  • stopforward: 現在のノードのリモートマッピングを閉じる
root@kitploit:~
(node 0) >> stopforward
[0] All
[1] Listening Addr : [::]:9000 , Remote Addr : 127.0.0.1:22 , Active Connections : 1
[*] Do you really want to shut down forward?(yes/no): yes
[*] Please choose one to close: 1
[*] Closing......
[*] Forward service has been closed successfully!
  • backward: 現在のagent上のポートをadminのローカルポートに逆マッピング
root@kitploit:~
(node 0) >> backward 9001 22
[*] Trying to ask node to listen on 0.0.0.0:9001......
[*] Waiting for response......
[*] Backward start successfully!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9001
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
  • stopbackward: 現在のノードの逆マッピングを閉じる
root@kitploit:~
(node 0) >> stopbackward
[0] All
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] Do you really want to shut down backward?(yes/no): yes
[*] Please choose one to close: 1
[*] Closing......
[*] Backward service has been closed successfully!
  • shutdown: 現在のノードをオフラインにする
root@kitploit:~
(node 1) >> shutdown
(node 1) >>
[*] Node 1 is offline!
  • back: メインパネルに戻る
root@kitploit:~
(node 1) >> back
(admin) >>
  • exit: Stowawayを終了
root@kitploit:~
(node 1) >> exit
[*] Do you really want to exit stowaway?(y/n): y
[*] BYE!

TODO

  • バグ修正
  • TLSサポート
  • 複数のstartnodeの形式をサポート

注意事項

  • このプログラムは余暇に開発・学習用として作成されたもので、構造やコードが厳密ではなく、機能にバグが存在する可能性があります。ご了承ください。
  • adminがオンラインでない場合、新しいノードは追加できません。
  • adminは直接接続するagentノードを1つだけサポートします。agentノードにはそのような制限はありません。
  • Windowsのadmin側を使用する場合、事前にansiconをダウンロードするか、こちらからダウンロードし、対応するシステムのビット数のフォルダに移動して、ansicon.exe -iを実行してください。そうしないと、admin側で文字化けが発生します。
  • 本プログラムは、標準のRFC1928で説明されているUDP ASSOCIATEのみをサポートしています。socks5 UDPプロキシを使用する場合は、使用するプログラム(スキャナなど)が標準のRFC1928に従ったパケット構造であることを確認し、パケットロスを自分で処理する必要があります。

404星链计划

Stowaway は 404星链计划 に参加しました。

謝辞

Stowaway開発における以下の先輩方とプロジェクトに感謝します。

  • lz520520
  • SignorMercurio
  • MM0x00
  • r0ck3rt
  • Termite
  • Venom
ツールをダウンロード
  • --report: 多重化したいポート。

  • -s: 通信キー。

  • Linux環境のみでの多重化をサポート。agentが自動的にIPTABLESを変更します。root権限が必要です。

    • agent側: ./stowaway_agent --report 22 -l 10000 -s 123

      agent起動後、scriptディレクトリのreuse.pyを使用してください。

      まずSECRETの値を設定します(SECRETの値は各ノード起動時に設定した通信キーです)。

      その後、以下を実行します:python reuse.py --start --rhost xxx.xxx.xxx.xxx --rport xxx

      • --rhost: agentのアドレス

      • --rport: 多重化されるポート。この例では22です。

    • これでadmin側が接続できます:./stowaway_admin -c 192.168.0.105:22 -s 123