高性能 HTTP 正向代理工具 | 高性能 http 隧道工具
高性能 HTTP 正向代理工具
Suo5 是一款久经实战检验的高性能 HTTP 正向代理工具,持续打磨只为解决一个需求:不出网场景下的稳定正向代理。 > [!WARNING] > 本工具仅供安全研究人员、网络管理员及相关技术人员进行授权的安全测试、漏洞评估和安全审计工作使用。使用本工具进行任何未经授权的网络攻击或渗透测试等行为均属违法,使用者需自行承担相应的法律责任。 ## 主要特性 - **优异的传输性能** - 全双工: 借助双向 Chunked-Encoding 实现单连接双向通信,传输性能接近 FRP - 半双工: 下行长连接+上行短连接实现,在 Nginx 反代场景下仍可保持良好性能 - 短链接: 上下行均使用短连接,适配多层反代和严格限制长连接的场景,作为兜底方案 - **良好的服务端兼容性** - Java 支持 Tomcat、WebLogic、JBoss、Resin 等主流中间件, JDK6 ~ JDK 2x 全版本支持 - .Net 支持 IIS 下所有 .Net Framework 版本 (>=2.0) - PHP 支持 Nginx/Apache 等服务器环境, PHP 5.6 ~ PHP 8.x 全版本支持 - **复杂网络环境支持** - 支持一层、两层、多层反向代理下的稳定连接 - 支持通过流量转发和请求重试来支持负载均衡场景 - 支持配置上游代理(HTTP/SOCKS5) - **稳定可靠的工程实现** - 正确可靠的连接控制、并发管理、心跳保活、异常重连等 - 完善的单元测试和集成测试保障质量 ## 快速开始 ### 1. 下载客户端 前往 [Releases](https://github.com/zema1/suo5/releases) 下载对应平台的二进制文件: - `suo5-gui-*` - 图形界面版本 (推荐) - `suo5-cli-*` - 命令行版本 支持平台:Windows、macOS (Intel/Apple Silicon)、Linux ### 2. 部署服务端 将 [assets](./assets/) 目录下对应的服务端文件上传到目标服务器并确认可以正常执行。 Java 目标推荐使用 [MemshellParty](https://github.com/ReaJason/MemShellParty) 项目来生成内存马并进行注入。 ### 3. 连接服务端 Suo5 针对 `auto` 模式(默认)做了大量的优化,大多数时候你无需复杂参数配置,仅使用 `-t` 指定服务端 URL,即可自动确认目标支持的通信模式并在本地启动代理服务: ```bash $ ./suo5 -t http://target.com/suo5.jsp ... [INFO] 14:28 connecting to target http://target.com/suo5.jsp [INFO] 14:28 preferred connection mode: half [INFO] 14:28 handshake success, using session id 05q21upecl90yccl [INFO] 14:28 suo5 is going to work on half mode [INFO] 14:28 starting tunnel at 127.0.0.1:1111 [INFO] 14:28 creating a test connection to the remote target [INFO] 14:28 start connection to 127.0.0.1:0 [INFO] 14:28 successfully connected to 127.0.0.1:0 [INFO] 14:28 connection closed, 127.0.0.1:0 [INFO] 14:28 congratulations! everything works fine ``` 连接成功后会在本地 `127.0.0.1:1111` 开启 SOCKS5 代理服务,使用该代理会让流量从远程服务器转发出去。 ``` curl -x socks5h://127.0.0.1:1111 http://internal.target.com ``` 实战建议搭配 [Proxifier](https://www.proxifier.com/),将指定应用的流量通过该代理转发。 ## 客户端 GUI 版基于 [Wails](https://github.com/wailsapp/wails) 构建,支持 Windows 和 macOS 和 Linux 三大主流系统。针对日常使用习惯做了大量改进优化,界面功能简洁易懂,推荐大多数用户使用此版本。 > 该实现依赖系统的 Webview 框架, Windows 11 和 MacOS 已自带该组件,其他系统会弹框请允许下载安装,否则无法使用。 CLI 版本适合喜欢命令行操作的用户,或需要在服务器上运行的场景。 ``` … ``` ## 传输模式对比 Suo5 提供四种传输模式,以适应不同的网络环境和中间件限制: | 模式 | 原理 | 延迟 | 吞吐量 | 适用场景 | |:-------:|:----------------------------|:--:|:---:|:-------------------| | **自动** | 自动探测并选择最佳模式 | - | - | 默认推荐,适合大多数场景 | | **全双工** | 双向 Chunked-Encoding,单连接双向通信 | 极低 | 极高 | 直连或简单反代,性能最佳 | | **半双工** | 下行长连接 + 上行短连接 | 低 | 高 | Nginx 反代、部分 WAF 场景 | | **短连接** | 上下行均为短连接 + 轮询 | 中 | 中 | 多层反代、严格限制长连接的环境 | ## 使用指南 为了方便说明,指南部分均使用命令行版本进行演示,GUI 版本功能完全一致且更易使用。 ### 基本用法 ```bash # 自动检测最佳传输模式 ./suo5 -t https://target.com/suo5.jsp # 指定 HTTP 请求方法为 GET, 默认 POST ./suo5 -m GET -t https://target.com/suo5.jsp # 修改 Socks5 监听地址和端口, 并设置认证信息。 默认监听 127.0.0.1:1111,无认证 ./suo5 -t https://target.com/suo5.jsp -l 0.0.0.0:7788 --auth user:pass123 # 设置上游代理 # 特别注意! 仅短链接模式支持在 Burp 中抓包,其他模式会导致连接异常 ./suo5 -t https://target.com/suo5.jsp --proxy socks5://127.0.0.1:7890 ./suo5 -t https://target.com/suo5.jsp --proxy http://127.0.0.1:8080 ``` ### 负载均衡场景 当目标存在负载均衡时,需在所有后端部署服务端,并指定重定向 URL: ```bash ./suo5 -t https://target.com/suo5.jsp -r http://172.0.3.2/suo5.jsp ``` 原理:判断 `-r` 中 URL 的 IP 是否与服务器网卡 IP 匹配,不匹配则转发请求。 ### 域名过滤 避免特定域名走代理: ```bash # 直接指定域名 ./suo5 -t https://target.com/suo5.jsp -E example.com -E google.com # 使用域名列表文件(一行一个) ./suo5 -t https://target.com/suo5.jsp -ef ./excludes.txt ``` > **注意**:确保代理请求中包含域名而非 IP。使用 `socks5h://` 协议让 DNS 解析在代理端进行: > ```bash > curl -x socks5h://127.0.0.1:1111 https://example.com > ``` ### 端口转发模式 直接转发 TCP 端口(非 SOCKS5 模式): ```bash # 将本地 1111 端口转发到目标内网的 MySQL ./suo5 -t https://target.com/suo5.jsp -f 172.16.0.10:3306 ``` ### 启用 Cookie Jar 保持会话 Cookie,某些服务端可能需要: ```bash ./suo5 -t https://target.com/suo5.jsp --jar ``` ### 使用配置文件 支持通过 JSON 配置文件管理参数,GUI 和 CLI 配置格式完全兼容: ```json { "method": "POST", "listen": "127.0.0.1:1111", "target": "https://target.com/suo5.jsp", "no_auth": true, "username": "", "password": "", "mode": "auto", "buffer_size": 327680, "timeout": 10, "debug": false, "upstream_proxy": "", "redirect_url": "", "raw_header": [ "User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36" ], "disable_heartbeat": false, "disable_gzip": false, "disable_cookiejar": true, "exclude_domain": null } ``` 使用配置文件: ```bash # CLI 加载配置 ./suo5 -c config.json # GUI 可通过界面导入/导出配置 ``` ## 常见问题 **Q: 密码/认证功能** Suo5 的 `--auth` 参数用于设置**本地 SOCKS5 代理**的认证,格式为 `username:password`。这是为了防止本地代理被未授权使用,与服务端无关。 ```bash # 设置 SOCKS5 认证 ./suo5 -t https://target.com/suo5.jsp --auth admin:P@ssw0rd # 使用时需要带上认证信息 curl -x socks5h://admin:P@[email protected]:1111 http://internal.com ``` 服务端脚本本身不含密码保护功能。如需保护服务端,建议: - 修改服务端文件名和路径 - 使用内存马自带的准入规则实现 **Q: 如何在 Burp 中抓包调试?** 仅**短连接模式**支持在 Burp 中抓包,其他模式的长连接会导致 Burp 无法正常处理: ```bash ./suo5 -t https://target.com/suo5.jsp --mode classic --proxy http://127.0.0.1:8080 ``` **Q: 如何选择传输模式?** 推荐使用默认的 `auto` 模式,客户端会自动探测最佳模式。如果自动探测不准确,可以手动指定: - 直连或简单反代 → `--mode full` - Nginx 反代 → `--mode half` - 多层反代/CDN/严格环境 → `--mode classic` ## 参考项目 - [Chunk-Proxy](https://github.com/BeichenDream/Chunk-Proxy) - [Neo-reGeorg](https://github.com/L-codes/Neo-reGeorg)暂无开放 Issues,或尚未同步最近议题。