
移動中にHTTP/HTTPSトラフィックをキャプチャ、操作、再生するための多機能でポータブルなプロキシ。
機能 • インストール • 使い方 • Proxifyの実行 • SSL証明書のインストール • Proxifyの応用例 • Discordに参加
迅速なデプロイのためのスイスアーミーナイフプロキシ。リクエスト/レスポンスのダンプ、DSL言語によるフィルタリングと操作、上流のHTTP/Socks5プロキシなど、複数の操作をサポートします。 さらに、リプレイユーティリティを使用すると、ダンプしたトラフィック(正しいドメイン名のリクエスト/レスポンス)を、上流プロキシをproxifyに設定するだけでBurpSuiteや他のプロキシにインポートできます。
すぐに実行可能な バイナリ をダウンロードするか、GOを使用してインストール/ビルドしてください。
go install -v github.com/projectdiscovery/proxify/cmd/proxify@latest
proxify -h
これによりツールのヘルプが表示されます。以下はサポートされているすべてのスイッチです。
迅速なデプロイのためのスイスアーミーナイフプロキシ。リクエスト/レスポンスのダンプ、DSL言語によるフィルタリングと操作、上流のHTTP/Socks5プロキシなど、複数の操作をサポートします。
使い方:
./proxify [フラグ]
フラグ:
出力:
-sr, -store-response 生のHTTPリクエスト/レスポンスを出力ディレクトリに保存(デフォルト: proxify_logs)
-o, -output proxifyログを保存する出力ファイル(デフォルト: proxify_logs.jsonl)
-of, -output-format string 出力フォーマット(jsonl/yaml)(デフォルト: "jsonl")
-dump-req 出力ファイルにHTTPリクエストのみダンプ
-dump-resp 出力ファイルにHTTPレスポンスのみダンプ
-oca, -out-ca string CAファイルを生成してファイル名で保存
更新:
-up, -update proxifyを最新バージョンに更新
-duc, -disable-update-check 自動アップデートチェックを無効化
フィルタ:
-req-fd, -request-dsl string[] リクエストフィルタDSL
-resp-fd, -response-dsl string[] レスポンスフィルタDSL
-req-mrd, -request-match-replace-dsl string[] リクエスト一致置換DSL
-resp-mrd, -response-match-replace-dsl string[] レスポンス一致置換DSL
ネットワーク:
-ha, -http-addr string リッスンするHTTP IPとポート(ip:port)(デフォルト: "127.0.0.1:8888")
-sa, -socks-addr リッスンするSOCKS IPとポート(ip:port)(デフォルト: 127.0.0.1:10080)
-da, -dns-addr string リッスンするDNS IPとポート(ip:port)
-dm, -dns-mapping string ドメインからIPへのDNSマッピング(例: domain:ip,domain:ip,..)
-r, -resolver string 使用するカスタムDNSリゾルバ(ip:port)
プロキシ:
-hp, -http-proxy string[] 上流HTTPプロキシ(例: http://proxy-ip:proxy-port)
-sp, -socks5-proxy string[] 上流SOCKS5プロキシ(例: socks5://proxy-ip:proxy-port)
-c int 次の上流プロキシに切り替えるまでのリクエスト数(デフォルト: 1)
エクスポート:
-max-size int 最大エクスポートデータサイズ(リクエスト/レスポンスは切り捨てられます)(デフォルト: 9223372036854775807)
設定:
-config string proxify設定ファイルへのパス
-ec, -export-config string proxifyエクスポートモジュール設定ファイル(デフォルト: "$CONFIG/export-config.yaml")
-config-directory string デフォルトの設定パスを上書き(デフォルト: "$CONFIG/proxify")
-cert-cache-size int キャッシュする証明書の数(デフォルト: 256)
-a, -allow string[] プロキシ許可するIP/CIDRのリスト
-d, -deny string[] プロキシ拒否するIP/CIDRのリスト
-pt, -passthrough string[] パススルードメインのリスト
デバッグ:
-nc, -no-color 色なし
-version バージョン
-silent サイレント
-v, -verbose 詳細
-vv, -very-verbose 非常に詳細
ポート 8888 でHTTPプロキシを実行:
proxify
カスタムポート 1111 でHTTPプロキシを実行:
proxify -http-addr ":1111"
-pt フラグを使用すると、TLS接続を終了せずに暗号化トラフィックをパススルー(スキップ)できます。
proxify -pt '(.*\.)?google\.co.in.*'
ポート8888でHTTPプロキシを実行し、トラフィックをポート 8080 のburpに転送:
proxify -http-proxy http://127.0.0.1:8080
ポート8888でHTTPプロキシを実行し、トラフィックをTORネットワークに転送:
proxify -socks5-proxy 127.0.0.1:9050
Proxifyは JSONL、YAML、Files の3つの出力フォーマットをサポートしています。
JSONL(デフォルト):
JSON Lines形式では、各HTTPリクエスト/レスポンスのペアが1行のJSONオブジェクトとして保存されます。
{"timestamp":"2024-02-20T01:56:49+05:30","url":"https://scanme.sh:443","request":{"header":{"Connection":"close","User-Agent":"curl/8.1.2","host":"scanme.sh:443","method":"CONNECT","path":"","scheme":"https"},"raw":"CONNECT scanme.sh:443 HTTP/1.1\r\nHost: scanme.sh:443\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"},"response":{"header":{"Content-Length":"0"},"raw":"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"}}
{"timestamp":"2024-02-20T01:56:49+05:30","url":"https://scanme.sh/","request":{"header":{"Accept":"*/*","Connection":"close","User-Agent":"curl/8.1.2","host":"scanme.sh","method":"GET","path":"/","scheme":"https"},"raw":"GET / HTTP/1.1\r\nHost: scanme.sh\r\nAccept: */*\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"},"response":{"header":{"Content-Type":"text/plain; charset=utf-8","Date":"Mon, 19 Feb 2024 20:26:49 GMT"},"body":"ok","raw":"HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Mon, 19 Feb 2024 20:26:49 GMT\r\n\r\n"}}
YAML MultiDoc:
YAML MultiDoc形式では、各HTTPリクエストとレスポンスのペアが別々のドキュメントとしてカプセル化されます。出力YAMLファイル内のすべてのドキュメントは --- で区切られ、ストリーム解析と消費を可能にします。
proxify -output-format yaml
timestamp: "2024-02-20T01:40:40+05:30"
url: https://scanme.sh:443
request:
header:
Connection: close
User-Agent: curl/8.1.2
host: scanme.sh:443
method: CONNECT
path: ""
scheme: https
body: ""
raw: "CONNECT scanme.sh:443 HTTP/1.1\r\nHost: scanme.sh:443\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"
response:
header:
Content-Length: "0"
body: ""
raw: "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
---
timestamp: "2024-02-20T01:40:40+05:30"
...
Files:
Files形式では、各HTTPリクエストとレスポンスのペアが別々のファイルに保存され、リクエストの後にレスポンスが続きます。ファイル名は {{Host}}-{{randstr}}.txt の形式です。また、-dump-req または -dump-resp フラグを使用して、リクエストの特定の部分だけをファイルに保存することもできます。
proxify -store-response
注:
-store-responseを使用する場合、jsonlとファイルの両方が生成されます。
ProxifyはDNSリゾルバを内蔵しており、ホスト名を特定のアドレスにマッピングしたり、他のドメイン名に対して上流DNSサーバーを定義したりできます。
ポート 8888 でHTTPプロキシを実行し、内蔵DNSサーバーをポート 53 でリッスンさせ、www.google.it を 192.168.1.1 に解決し、その他の fqdn は上流の 1.1.1.1 に転送します。
proxify -dns-addr ":53" -dns-mapping "www.google.it:192.168.1.1" -dns-resolver "1.1.1.1:53"
この機能は、例えば replay ユーティリティが接続をハイジャックして応答をシミュレートするために使用されます。プライベートDNSサーバーを使用する内部評価の際に役立つ可能性があります。ドメイン名として * を使用すると、すべてのDNSリクエストに一致します。
リクエストまたはレスポンスがフィルタに一致した場合、ダンプに .match.txt サフィックスが付加されます。
proxify -request-dsl "contains(request,'firefox')" -response-dsl "contains(response, md5('test'))"
ProxifyはDSL言語を使用して、リクエストとレスポンスをリアルタイムで変更できます。
以下は、リクエスト内の firefox という単語を chrome に置き換える例です。
proxify -request-match-replace-dsl "replace(request,'firefox','chrome')"
レスポンスの regex ベースの置換を使用した別の例:
proxify -response-match-replace-dsl "replace_regex(response, '^authentication failed$', 'authentication ok')"
ダンプされたすべてのリクエスト/レスポンスを、指定がない場合は宛先URL(http://127.0.0.1:8080)にリプレイします。これを機能させるには、burpの上流プロキシとしてproxifyを使用するように設定する必要があります。proxifyがDNS解決をハイジャックし、ダンプされたリクエストでリモートサーバーをシミュレートします。これにより、すべてのリクエスト/レスポンスが元々burpを経由して送信されたかのように、burpの履歴に正確に表示され、例えばクラウド上でリモートインターセプトを実行し、すべての結果をローカルのburp内に統合することができます。
replay -output "logs/"
Proxify用の認証局(CA)が生成され、デフォルトでは ~/.config/proxify/ フォルダに保存されます。手動で -config フラグを使用して指定することもできます。生成された証明書は、Proxifyに接続されたブラウザで http://proxify/cacert にアクセスすることでインポートできます。
ルート証明書のインストール手順は、他のプロキシツールと同様で、システムの信頼されたルートストアに証明書を追加する必要があります。
Proxifyは様々な場面で使用できます。以下はProxifyが便利な一般的な例です。
ポート 8888 でHTTPプロキシを実行し、トラフィックをポート 8080 のburpに転送:
proxify -http-proxy http://127.0.0.1:8080
BurpSuiteで、上流プロキシを設定してすべてのトラフィックを proxify に戻します。
User Options > Upstream Proxy > Proxy & Port > 127.0.0.1 & 8888
これにより、すべてのリクエスト/レスポンス履歴が logs フォルダに保存され、後で事後処理に使用できます。
アプリケーションを閲覧しながら、ブラウザを proxify に向けることで、すべてのHTTPリクエスト/レスポンスをファイルに保存できます。
デフォルトまたは任意のポートでproxifyを起動します。
proxify -output chrome-logs
macOSでChromeブラウザを起動します。
/Applications/Chromium.app/Contents/MacOS/Chromium --ignore-certificate-errors --proxy-server=http://127.0.0.1:8888 &
デフォルトまたは任意のポートでproxifyを起動します。
proxify -output ffuf-logs
FFuF をプロキシが proxify を指すように実行します。
ffuf -x http://127.0.0.1:8888 FFUF_CMD_HERE
Proxify は projectdiscovery チームによって 🖤 で作られています。コミュニティの貢献がプロジェクトを現在の形にしました。詳細は Thanks.md ファイルをご覧ください。