最近有需要使用 Proxy 服務,但又不想裝 Squid 之類的 Proxy Server,於是想找有沒有簡易設定的 Proxy 工具可以滿足我的功能,使用一個 Binary 檔案簡易的啟動一個 Proxy 服務。
Google 搜尋後找到 proxify (Github) 這個工具可以滿足我的需求,proxify 是一個小型的 Proxy 工具,可以快速的部屬 Proxy 服務,也有很多功能可以使用,開發人員介紹是一個瑞士刀的 Proxy 工具。
直接從 Github release 下載並且解壓縮。
wget https://github.com/projectdiscovery/proxify/releases/download/v0.0.9/proxify_0.0.9_linux_amd64.zip
unzip proxify_0.0.9_linux_amd64.zip
解壓縮後會有 proxify
replay
mitmrelay
三個 Binary 執行檔。接下來會簡介其中兩個的使用方式,proxify
與 replay
,mitmerlay
這個執行檔看起來應該是做 MITM 相關的工具可能是可以搭配 mitmproxy 使用,目前對於 MITM 有些不熟也沒有用到,如果之後有興趣會再去研究這個功能 。
ls -tlrh
total 107M
-rw-r--r-- 1 jack jack 11K Mar 21 08:05 README.md
-rw-r--r-- 1 jack jack 1.1K Mar 21 08:05 LICENSE.MD
-rwxr-xr-x 1 jack jack 21M Mar 21 08:09 replay
-rwxr-xr-x 1 jack jack 40M Mar 21 08:09 proxify
-rwxr-xr-x 1 jack jack 20M Mar 21 08:09 mitmrelay
-rw-r--r-- 1 jack jack 28M Mar 21 08:09 proxify_0.0.9_linux_amd64.zip
proxify 就是 proxy 的 binary 檔案,基本的使用方式是直接執行,預設會開啟以下 ports
$ ./proxify
_ ___
___ _______ __ __ (_) _/_ __
/ _ \/ __/ _ \\ \ // / _/ // /
/ .__/_/ \___/_\_\/_/_/ \_, /
/_/ /___/
projectdiscovery.io
[INF] Current proxify version 0.0.9 (latest)
[INF] HTTP Proxy Listening on 127.0.0.1:8888
[INF] Socks5 Proxy Listening on 127.0.0.1:10080
[INF] Saving proxify traffic to logs
自訂義監聽的 Address 和 port 是基本上工具都要提供的功能,可以透過參數設定
-ha, -http-addr string Listening HTTP IP and Port address (ip:port) (default "127.0.0.1:8888")
-sa, -socks-addr string Listening SOCKS IP and Port address (ip:port) (default "127.0.0.1:10080")
使用範例
$ ./proxify -ha 0.0.0.0:9000 -sa 0.0.0.0:9001
_ ___
___ _______ __ __ (_) _/_ __
/ _ \/ __/ _ \\ \ // / _/ // /
/ .__/_/ \___/_\_\/_/_/ \_, /
/_/ /___/
projectdiscovery.io
[INF] Current proxify version 0.0.9 (latest)
[INF] HTTP Proxy Listening on 0.0.0.0:9000
[INF] Socks5 Proxy Listening on 0.0.0.0:9001
[INF] Saving proxify traffic to logs
可以設定直通(proxify 不處理 TLS 網路流量)目標 Domain,設定如下。
範例設定 google.com 和 facebook.com 的 request 都直通不經過 proxify 處理。
./proxify -ha 0.0.0.0:8080 -sa 0.0.0.0:8081 -pt '.*google.*,.*facebook.*'
串接其他的 Proxy(在我的環境目前測試 HTTP 正常 HTTPS 有問題) 設定方式如下
./proxify -ha 0.0.0.0:8080 -sa 0.0.0.0:8081 --http-proxy http://192.168.1.103:8080
proxify 也可以做 DNS proxy,參數如下
proxify -dns-addr ":53" -dns-mapping "www.google.it:192.168.1.1" -resolver "1.1.1.1:53"
proxify 也有 Replace 和 Filter 的功能,設定方式如下。
-req-fd, -request-dsl string[] Request Filter DSL
-resp-fd, -response-dsl string[] Response Filter DSL
-req-mrd, -request-match-replace-dsl string[] Request Match-Replace DSL
-resp-mrd, -response-match-replace-dsl string[] Response Match-Replace DSL
Filter 會匹配 request/response 的字串記錄到 log 裡面
proxify -request-dsl "contains(request,'firefox')" -response-dsl "contains(response, md5('test'))"
Replace 可以替換掉 request/response 的字串
proxify -request-match-replace-dsl "replace(request,'firefox','chrome')"
proxify -response-match-replace-dsl "replace_regex(response, '^authentication failed$', 'authentication ok')"
可以將 proxify logs 檔案內紀錄的訊息重播到另一個 proxy 這個功能應該是為了重播到 Burp Suite 而做的,非常方便可以先將 proxify 使用的紀錄存成檔案的形式,如果要分析與測試的時候可以 Replay 到一個 GUI 的工具上面做。
./replay -burp-addr http://127.0.0.1:9090 -output logs
順帶一提 proxify logs 使用方式,使用 -o <directory>
就可以了。
-o, -output string Output Directory to store HTTP proxy logs (default "logs")
範例如下
./proxify -o logs