特征 • 安装 • 用法 • 运行 Proxify • 安装 SSL 证书 • Proxify 的应用 • 加入 Discord
瑞士军刀式代理,用于快速部署。支持多种操作,如请求/响应转储、通过 DSL 语言进行过滤和操纵,以及上游 HTTP/Socks5 代理。 此外,重放工具允许将转储的流量(具有正确域名的请求/响应)导入 BurpSuite 或任何其他代理,只需将上游代理设置为 proxify 即可。
下载即用型二进制文件 或使用 GO 安装/构建
go install -v github.com/projectdiscovery/proxify/cmd/proxify@latest
proxify -h
这将显示工具的帮助信息。以下是其支持的所有开关。
瑞士军刀式代理,用于快速部署。支持多种操作,如请求/响应转储、通过 DSL 语言进行过滤和操纵,以及上游 HTTP/Socks5 代理
用法:
./proxify [flags]
标志:
输出:
-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 禁用自动 proxify 更新检查
过滤:
-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 和 文件。
JSONL(默认):
在 Json Lines 格式中,每个 HTTP 请求/响应对都作为一行中的一个 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"
...
文件:
在文件格式中,每个 HTTP 请求和响应对被存储在单独的文件中,请求后紧跟响应。文件名格式为 {{Host}}-{{randstr}}.txt。此外,可以使用 dump-req 或 dump-resp 标志将请求或响应的特定部分保存到文件中。
proxify -store-response
注意:使用
-store-response时,将同时生成 jsonl 和文件。
Proxify 支持嵌入 DNS 解析器,将主机名映射到特定地址,并为任何其他域名定义上游 DNS 服务器。
在端口 8888 上运行 HTTP 代理,使用在端口 53 上监听的嵌入式 DNS 服务器,将 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')"
另一个使用正则表达式替换响应的示例:
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 生成一个证书颁发机构,默认存储在文件夹 ~/.config/proxify/ 中,可以通过 -config 标志手动指定。生成的证书可以通过在连接到 proxify 的浏览器中访问 http://proxify/cacert 来导入。
根证书的安装步骤与其他代理工具类似,包括将证书添加到系统受信任的根存储中。
Proxify 可用于多种场景,以下是 Proxify 派上用场的一些常见示例:
在端口 8888 上运行 HTTP 代理,并将流量转发到端口 8080 上的 burp:
proxify -http-proxy http://127.0.0.1:8080
在 BurpSuite 中,将上游代理设置为将所有流量转发回 proxify:
用户选项 > 上游代理 > 代理和端口 > 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
运行指向 proxify 的 FFuF:
ffuf -x http://127.0.0.1:8888 FFUF_CMD_HERE
Proxify 由 projectdiscovery 团队用 🖤 制作。社区贡献使项目达到了现在的水平。详见 Thanks.md 文件。