
BinProxyは、任意のTCP接続のためのプロキシです。BinData gemを使用してカスタムメッセージフォーマットを定義できます。
BinProxyは任意のTCP接続用のプロキシです。BinData gemを使用してカスタムメッセージフォーマットを定義できます。
sudo apt install build-essential ruby-devで十分です。--tlsを明示的な証明書/キーなしで使用するためのopensslバイナリ。gem install binproxy
Rubyのインストール状況によってはsudoを使用する必要があるかもしれません。
git clone https://github.com/nccgroup/BinProxy.git binproxy
cd binproxy
# Install ruby dependencies.
# Depending on your setup, one or both of these may require sudo.
gem install bundler && bundle
# The UI is built with a webpack/babel toolchain:
(cd ui && npm install) \
&& rake build-ui
# Confirm that everything works
# run.sh sets up the environment and passes all args to binproxy
./run.sh --help
gemパッケージをビルドしてインストールするには:
gem build binproxy.gemspec
# Again, you may need sudo here
gem install binproxy-1.0.0.gem
インストールの問題に関するバグ報告は歓迎します!
binproxyを実行します。完全なリストは--helpを参照してくださいが、簡潔に説明すると:
binproxy -c <class> [<local-host>] <local-port> <remote-host> <remote-port>
-c引数を省略すると、単純な16進ダンプが表示されます。
ローカルホストを省略すると、binproxyはlocalhostを想定します。
--socks-proxyまたは--http-proxyオプションを使用する場合、リモートホストとポートは動的に決定されるため、指定すべきではありません。
# Proxy from localhost:9000 -> example.com:9000
binproxy localhost 9000 example.com 9000
# Act as a SOCKS proxy on localhost:1080
# MITM and unwrap TLS on the proxied traffic, using a self-signed cert and key
binproxy -S --tls 1080
# "Poor substitute for Burp" mode:
#
# HTTP proxy; MITM TLS w/ pre-generated cert; simple header parsing
# Note: this will only work on HTTPS traffic, not plain HTTP!
# If you're working with the source repo, you generate the certs with:
# rake makecert[example.com]
# And then import certs/ca-cert.pem into your browser or OS's trust store.
binproxy -H --tls \
--tls-cert certs/example.com-cert.pem \
--tls-key certs/example.com-key.pem \
--class-name DumbHttp::Message \
localhost 8080
デフォルトでは、プロキシは組み込みのRawMessageクラスを使用し、各メッセージの16進ダンプを提供します(メッセージとTCPパケットが1:1であると仮定)。
--classコマンドライン引数でBinData::Recordサブクラス†を指定すると、パースされたプロトコル情報を表示できます。
また、クラス内で以下を定義することもできます:
def summary
# return a single-line description of this record
end
# currently supported options are
# - nil : use default display
# - "anon" : for structs, show contents directly
# - "hex" : for numbers, display as 0x1234ABCD
# - "hexdump" : for strings, display like `hexdump -C`
default_parameter display_as: "..."
# TODO: document state stuff
def self.initial_state
end
def current_state
end
def update_state
end
† 厳密には、BinData::Baseの任意のサブクラスが機能します。
デフォルトでは、BinProxyはすべてのトラフィックを静的な上流ホストとポートに中継します。また、--socks-proxyおよび--http-proxyフラグを使用して、それぞれSOCKS(v4またはv4a)プロキシまたはHTTPプロキシとして動作するように設定することもできます。
注釈: 現在、HTTPプロキシはHTTP CONNECT動詞でトンネリングされた接続のみをサポートしています。生のHTTP GET、POSTなどのリクエストをプロキシすることはできません。実際には、これはHTTPSトラフィックは機能しますが、curl -pのようにトンネリングを強制するフラグをクライアントがサポートしない限り、プレーンHTTPトラフィックは機能しないことを意味します。
--tlsフラグを使用して、メッセージを処理する前にTLS暗号化を解除します。デフォルトでは、BinProxyは自己署名証明書を生成します。--tls-certおよび--tls-keyで証明書とキーを含むPEMファイルを指定できます。(ソースリポジトリをクローンした場合は、rake makecert[example.com]を使用して静的CAと適切なホスト名の証明書を生成してください。)
ランダムなアイデアやウィッシュリスト項目については、TODOファイルも参照してください。
BinProxyのコアTCPプロキシ機能は、Sean Devlinによって書かれた特別な目的のプロキシに由来しています。Rusty BurchfieldがそのプロキシのHTML UIを提供しました。コードは十分に変更され、現在のバグについては彼らに責任を負わせることはできませんが、BinProxyは彼らの貢献なしには存在しなかったでしょう。