打靶机时遇到的代理端口及应对方法
渗透测试中的代理:从识别、探测到内网穿透的完整实战指南
起源于一次真实靶机(Gost,
192.168.56.122)的渗透:一个泄露了凭据的gost代理端口,最终成为打进内网、隧穿到只监听127.0.0.1的 SSH、并拿下 root 的关键跳板。本文以此为引子,系统梳理渗透测试中遇到各种代理端口 / 代理软件时的应对方法:如何识别、如何与之”对话”、如何借它探测内网、如何让 SSH 穿过它,以及如何把一个代理升级成完整的内网隧道。
目标读者:做授权渗透测试 / 红队 / CTF 的同学。所有技术仅用于合法授权场景。
目录
- 从 Gost 案例说起:代理为什么是渗透的黄金资产
- 代理的基础模型:正向、反向、协议
- 识别代理:端口、指纹、常见软件
- 与代理”对话”:HTTP CONNECT 与 SOCKS 协议拆解
- 通过代理探测内网:命令与工具大全
- SSH 穿过代理的 N 种姿势
- 从单点代理到完整内网隧道:Pivoting
- 按软件分类的实战应对手册
- 常见返回码、报错与排查
- 代理利用的防御与检测视角
- 速查表(Cheat Sheet)
1. 从 Gost 案例说起
在 Gost 靶机里,攻击链的”七寸”就是那个代理端口。回顾一下:
nmap扫到1680/tcp返回Proxy-Authenticate: Basic realm="gost"—— 一个需要认证的代理。- Web 端泄露了配置,拿到代理凭据
root:123,并得知它是auto模式(自动识别 HTTP/SOCKS5)。 - 用这个代理做 HTTP CONNECT 隧道,扫描目标的
127.0.0.1,发现 SSH 只监听本地的 22 端口(外部 nmap 根本看不到)。 - 让
ssh通过ncat走代理连进去,拿到初始 shell。
这说明了代理在渗透中的三重价值:
| 价值 | 说明 |
|---|---|
| 暴露面扩展 | 代理能访问”它自己看得到”的网络——通常包括 127.0.0.1 和内网网段,这些都是外部扫不到的 |
| 跳板 / Pivot | 拿下一个代理 = 拿到一张进入内网的”门票”,后续所有流量可经它转发 |
| 凭据复用线索 | 代理凭据常和系统账户复用(如本例 root:123 同时是 SSH 口令) |
记住一句话:渗透中看到任何代理端口,都要问三件事——它认证吗?它能到哪?我能让什么流量穿过它?
2. 代理的基础模型
要灵活应对代理,先把概念理清。代理本质是”替你转发流量的中间人”,主要从三个维度区分。
2.1 正向代理 vs 反向代理
- 正向代理 (Forward Proxy):客户端主动配置使用的代理,代理”代表客户端”去访问目标。渗透中遇到的可控代理(gost、squid、SOCKS)大多是这类——你把它当跳板。
- 反向代理 (Reverse Proxy):部署在服务端前面,”代表服务器”接收请求(nginx、HAProxy、Traefik)。渗透中它更多是攻击面(SSRF、路由绕过、Host 头注入、内部服务暴露)。
经验:开放在非标准端口、需要 CONNECT/SOCKS 握手的,多半是正向代理跳板;监听 80/443 且后面挂着 web 应用的,多半是反向代理。
2.2 按协议分类
| 协议 | 默认端口(常见) | 特征 | 能转发什么 |
|---|---|---|---|
| HTTP 代理 | 3128, 8080, 8000, 808x | 明文 HTTP 头,GET http://... |
仅 HTTP |
| HTTP CONNECT | 同上 / 任意 | CONNECT host:port 建立隧道 |
任意 TCP(含 HTTPS、SSH、RDP…) |
| SOCKS4 / 4a | 1080 | 二进制握手,4a 支持域名 | 任意 TCP |
| SOCKS5 | 1080, 1081, 9050(Tor) | 二进制握手,支持 UDP、认证、域名 | 任意 TCP + UDP |
| 多协议/auto | 任意(gost 1080/8080…) | 同端口自动识别 HTTP/SOCKS | 看实现 |
关键区别:普通 HTTP 代理只能转发 HTTP,但 HTTP CONNECT 能隧穿任意 TCP——这正是 Gost 案例里 SSH 能穿过去的原因。SOCKS5 最强(任意 TCP + UDP + 域名解析)。
2.3 认证方式
- 无认证:直接用,最理想。
- HTTP Basic(
Proxy-Authenticate: Basic realm=...):用户名密码 base64,常被泄露或弱口令。 - SOCKS5 用户名/密码认证(RFC 1929)。
- NTLM / Negotiate(企业环境 squid/ISA/Forefront):需要域凭据。
Gost 案例返回的 Proxy-Authenticate: Basic realm="gost" 就是 HTTP Basic,凭据 root:123 是从配置文件泄露拿到的。
2.4 代理软件 != 隧道软件
还有一类不是”标准代理协议”,而是专用内网穿透/隧道工具,渗透中既可能是目标遗留的,也可能是你自己上传的:
- 轻量内网穿透:
gost、frp、chisel、ngrok、ligolo-ng、rpivot、reGeorg/Neo-reGeorg(webshell 隧道) - C2 内置代理:Metasploit
route+socks_proxy、Cobalt Strike SOCKS、sliver - SSH 自带:
-D(动态 SOCKS)、-L/-R(端口转发)
这些会在第 7、8 节展开。
3. 识别代理
发现一个开放端口后,第一步是判断”它是不是代理、是哪种代理”。
3.1 nmap 指纹
1 | |
典型指纹片段(来自 Gost 案例):
1 | |
407 Proxy Authentication Required→ 这是 HTTP 代理,且需要认证。realm="gost"→ 直接暴露了软件名(gost)。- nmap 还提示 “soft-matched socks5” → 说明同端口也响应 SOCKS5(auto 模式)。
3.2 手工 banner / 行为探测
测 HTTP 代理(看是否返回 407 或能否 CONNECT):
1 | |
测 SOCKS:
1 | |
测 auto / 多协议:分别用 HTTP、SOCKS4、SOCKS5 各打一次,看哪个握手成功。Gost 这种 auto 会全都能用。
3.3 常见端口 → 软件的经验映射
| 端口 | 可能的软件/用途 |
|---|---|
| 3128 | Squid(经典 HTTP 代理) |
| 8080 / 8000 / 8888 | 通用 HTTP 代理 / 应用代理 / Burp |
| 1080 / 1081 | SOCKS(Dante、ss、各种) |
| 9050 / 9150 | Tor SOCKS |
| 7890 / 7891 | Clash |
| 1087 / 8889 | 各类客户端默认 |
| 4145 | SOCKS4(老) |
| 任意高位 | gost / frp / chisel / ligolo 等隧道工具 |
注意:端口只是线索,一切以实际握手为准。攻击者部署的隧道工具常用随机高位端口。
3.4 从配置 / 进程确认(已有立足点时)
拿到 shell 后,确认代理软件最直接:
1 | |
Gost 案例正是从 /admin/config(web 泄露)+ 进程列表 gost -L root:123@:1680 -api 127.0.0.1:53000 完整还原了代理配置。
4. 与代理”对话”
理解底层协议能让你在工具失灵时手工操作,也能更好地排错。
4.1 HTTP 代理(转发模式)
客户端把完整 URL放进请求行,代理替你去取:
1 | |
手工演示:
1 | |
4.2 HTTP CONNECT(隧道模式)—— 重点
CONNECT 让代理建立一条到 host:port 的裸 TCP 隧道,之后双方流量原样转发。这就是为什么能隧穿 SSH/RDP/HTTPS:
1 | |
代理回 HTTP/1.1 200 Connection established 后,这条 TCP 通道就”透明”了,你直接在上面跑 SSH 协议即可。ncat --proxy ... --proxy-type http 帮你完成这一握手(见第 6 节)。
手工验证 CONNECT 是否可达内网某端口:
1 | |
4.3 SOCKS5 握手(简述)
SOCKS5 是二进制协议,流程:
- 客户端发
05 | nmethods | methods(方法:00无认证 /02用户名密码)。 - 服务端选一个方法。
- (若需要)用户名密码认证(RFC 1929)。
- 客户端发
CONNECT请求:05 01 00 <addrtype> <addr> <port>。 - 建立连接,开始转发。
手工拼 SOCKS5 包很繁琐,实战直接用工具(curl --socks5、proxychains、ncat --proxy-type socks5)。
4.4 暴破/猜测代理凭据
代理认证也能爆破(注意授权与速率):
1 | |
但优先找凭据泄露(配置文件、环境变量、Web 信息泄露)——像 Gost 案例那样,比爆破高效得多。
5. 通过代理探测内网
拿到可用代理后,最有价值的动作是:用它扫描它能到达、而你直接到不了的网络——尤其是 127.0.0.1 和内网网段。
5.1 核心思路:返回码 = 端口状态
用代理对目标内网逐端口发起连接,根据代理的响应判断端口开闭。以 Gost 案例的 HTTP CONNECT 代理为例:
1 | |
解读返回码(HTTP CONNECT 场景):
| curl 返回 | 含义 |
|---|---|
000 |
连上了,但目标返回非 HTTP 数据(如 SSH/MySQL banner)→ 端口开放 |
200 / 301 / 404 等正常 HTTP 码 |
目标是 HTTP 服务 → 端口开放 |
503 / 502 |
代理无法连接目标 → 端口关闭/不可达 |
| 超时 | 被过滤或代理无响应 |
Gost 案例正是据此发现
port 22 -> 000(SSH banner)和port 53000 -> 404(gost API)。
5.2 proxychains —— 让任意工具走代理
proxychains4(Kali 自带)通过 LD_PRELOAD 劫持 socket 调用,把几乎任何 TCP 工具的流量塞进代理。
配置 /etc/proxychains4.conf(或自定义文件):
1 | |
然后:
1 | |
proxychains 经 nmap 的铁律:
- 必须
-sT(TCP 全连接),SYN/UDP/ICMP 扫描无法经代理。 - 必须
-Pn(跳过主机发现,代理不转发 ICMP)。 - 加
-n关 DNS(或在 conf 里设proxy_dns)。 - 慢,建议缩小端口范围、调
proxychains的tcp_read_time_out。
proxychains4.conf 关键项:
1 | |
5.3 专用扫描器(更快)
- proxychains + fscan / kscan:内网综合扫描器,配合代理识别存活、端口、服务、弱口令。
- dnscat / dns 探测:在受限网络可用。
- 手写 bash/python 扫描循环:像 5.1 那样,可控、隐蔽、依赖少。在受限靶机上往往最实用。
通过 SOCKS5 时的 bash 扫描示例(用 ncat 探测):
1 | |
5.4 探测什么?内网视角的优先级
经代理进入内网后,重点找:
- 只监听
127.0.0.1的服务——这是代理的最大红利(管理后台、数据库、未授权 API、调试端口)。Gost 案例的 SSH 和 gost API 都是。 - 内网其他主机(横向):
192.168.x.x、10.x.x.x、172.16-31.x.x。 - 高价值服务:SSH(22)、SMB(445)、RDP(3389)、数据库(3306/5432/1433/6379/27017/9200)、内网 Web、K8s/Docker API、CI/CD。
- 元数据服务(云上):
169.254.169.254。
6. SSH 穿过代理的 N 种姿势
Gost 案例的关键一跳是”让 SSH 走代理”。这里把所有常见做法讲全。
6.1 用 ncat 作 ProxyCommand(HTTP CONNECT 代理)
这是 Gost 案例采用的方法。ssh 的 ProxyCommand 指定一个外部程序去建立到目标的连接,%h/%p 是目标主机/端口占位符:
1 | |
Gost 实例(含免交互、跳过 hostkey):
1 | |
要点:
%h %p是 SSH 最终要到达的目标(这里是靶机自己的127.0.0.1:22,对代理而言就是”它本地的 22”)。--proxy-type可选http/socks4/socks5。- 把这条命令封装成脚本(
/tmp/sshcmd.sh "$@")反复用,省事。
6.2 用 ncat / socat 作 ProxyCommand(SOCKS 代理)
1 | |
6.3 OpenSSH 原生 ProxyCommand(无需 ncat)
新版 OpenSSH 自带代理支持:
1 | |
6.4 ProxyJump(多级跳板)
如果代理本身是一台你已有 SSH 权限的跳板机,用 -J 最干净:
1 | |
写进 ~/.ssh/config 更舒服:
1 | |
6.5 经 proxychains 连 SSH
1 | |
简单粗暴,但交互式 shell 下 proxychains 偶有兼容问题,重要场景更推荐 ProxyCommand。
6.6 拿到 SSH 后反向把内网”拉出来”
一旦 SSH 进去了,SSH 本身就是最好的隧道工具:
1 | |
Gost 案例里,进了 SSH 后可立刻
ssh -D把靶机的整个内网视角”接管”到本地。
7. 从单点代理到完整内网隧道
当目标只给你一个 webshell 或一个受限端口时,需要自己搭隧道把内网拉出来。下面是主流工具,按场景选。
7.1 chisel(最常用,TCP/UDP over HTTP)
单文件 Go 程序,攻击机做 server,目标做 client,反向把目标内网映射出来。
1 | |
7.2 ligolo-ng(体验最好,免 proxychains)
通过创建虚拟网卡,把内网网段当成本地路由,无需 proxychains,nmap 可正常 SYN 扫描。
1 | |
7.3 frp(功能全面的内网穿透)
1 | |
7.4 reGeorg / Neo-reGeorg(只有 webshell 时)
把 SOCKS 代理隧道封装进 HTTP 请求,借一个上传的脚本(php/jsp/aspx)穿透。
1 | |
7.5 Metasploit 内置 pivot
1 | |
7.6 gost(本案例的”主角”,也可你自己用)
gost 本身就是强大的隧道工具,可正向可反向、多协议:
1 | |
7.7 工具选型速查
| 场景 | 推荐 |
|---|---|
| 目标能跑二进制、要稳要快 | ligolo-ng > chisel |
| 只有 webshell | Neo-reGeorg |
| 已有 SSH | ssh -D / ProxyJump(零额外工具) |
| 已有 meterpreter | autoroute + socks_proxy |
| 需要长期、多端口、UDP | frp / gost |
8. 按软件分类的实战应对手册
遇到具体代理软件时的针对性打法。
8.1 Squid(HTTP/HTTPS 代理,常见 3128)
- 未授权开放:直接
curl -x http://target:3128 http://internal/探内网;测 CONNECT 能否隧穿。 - 看 ACL 绕过:Squid 常配 ACL 限制可达目标,尝试不同 Host、IP 写法(
http://127.0.0.1、http://[::1]、十进制 IP、http://internal.local)。 - 配置泄露:
/etc/squid/squid.conf里常有内网网段、上游代理、缓存目录线索。 - 缓存投毒 / SSRF:开放代理本身就是 SSRF 跳板,可打云元数据、内网 web。
8.2 SOCKS5(Dante / ss / 各类)
- 用
curl --socks5-hostname、proxychains(socks5)直接接入。 - SOCKS5 支持 UDP——可做 DNS、部分协议的转发。
- 无认证的 SOCKS5 是横向的高速公路,立即拿来扫内网。
8.3 gost(多协议 / auto,本案例)
auto模式下 HTTP/SOCKS 都试。- 认证多为 Basic 或
-L user:pass@,优先找配置/进程里的明文凭据。 - 注意它常伴随
-api(管理 API,可能在127.0.0.1,经代理自己能访问到——可读配置甚至改服务)和-metrics(Prometheus,泄露客户端 IP、流量、内网拓扑线索)。Gost 案例的9000/metrics就泄露了客户端192.168.56.104。
8.4 frp / chisel / ngrok(隧道工具,多为目标遗留或被你利用)
- 发现目标已在跑 frpc/chisel,说明内网已被某条隧道打通,找它的配置(server 地址、token、映射端口)可顺藤摸瓜。
- ngrok:留意
ngrok进程和~/.ngrok2/ngrok.yml,authtoken 可能泄露。
8.5 nginx / HAProxy / Traefik(反向代理,攻击面视角)
- SSRF / 路由绕过:构造特殊路径、Host 头、
X-Forwarded-*,访问被代理隐藏的内部服务(/internal/、/admin/、actuator 端点)。 - 路径规范化差异:
/..;/、%2e%2e、双重编码绕过 location 限制。 - 暴露内部 upstream:错误配置会把内网服务直接代理出来。
8.6 Tor / Clash 等客户端代理
- 渗透中遇到(如目标机装了)通常是出网通道线索,或可借其匿名性——但更多是取证/溯源相关,本文不展开。
9. 常见返回码、报错与排查
| 现象 | 含义 / 处理 |
|---|---|
407 Proxy Authentication Required |
代理需要认证 → 找凭据 / 爆破 |
HTTP/1.1 200 Connection established |
CONNECT 隧道建好了 → 可上 SSH 等 |
curl -w %{http_code} 返回 000 |
连上但非 HTTP 响应(banner)→ 端口很可能开放 |
502 / 503 |
代理连不上目标 → 端口关闭 / ACL 拦截 |
ncat: Proxy authentication failed |
凭据错或格式错(注意 --proxy-auth user:pass) |
SSH Connection closed by remote 经代理 |
目标 22 其实没开 / ACL 限制 CONNECT 目标 |
| proxychains nmap 全显示 open/filtered | 没加 -sT -Pn,或代理不支持该流量 |
| DNS 泄露 / 解析失败 | 开 proxy_dns,或用 --socks5-hostname 远端解析 |
| 速度极慢 | proxychains 串联固有开销;缩小端口、调超时、改用 ligolo |
通用排查顺序:
- 代理本身通不通?
curl -v -x ... http://一个已知外网。 - 协议对不对?HTTP / SOCKS4 / SOCKS5 逐个试。
- 认证对不对?看 407 / 握手失败。
- 目标端口对代理可达吗?先 CONNECT/扫一遍。
- 工具兼容吗?ProxyCommand 比 proxychains 更稳。
10. 防御与检测视角
红队要懂蓝队,才能更隐蔽,也能写出有价值的修复建议。回到 Gost 案例的教训:
为什么代理成了致命入口?
- 代理凭据明文泄露(
/admin/config+ 目录列表)。→ 配置文件移出 Web 根、不明文存凭据、关闭目录列表。 - 弱口令且复用(
root:123同时是 SSH 口令)。→ 强密码 + 凭据隔离。 - 代理允许 CONNECT 到任意本地端口,把只监听
127.0.0.1的 SSH 变相暴露。→ 限制代理可转发的目标(白名单),禁止访问回环敏感端口。 - 管理 API / metrics 暴露内网信息。→ API 绑定本地 + 强认证;metrics 限制访问。
检测要点(蓝队):
- 监控异常的
CONNECT请求,尤其指向127.0.0.1:22/3389/3306等。 - 代理日志里同一源 IP 短时间大量不同目标端口 = 端口扫描特征。
- 出现非业务的隧道进程(chisel/frpc/gost/ngrok)即高危。
- 出口侧检测长连接、非常规端口的加密隧道。
- 主机侧:监控
ProxyCommand、ssh -D/-L/-R、autoroute等 pivot 行为。
加固清单:
- 最小化暴露:代理服务绑定到必要接口,强认证 + 速率限制 + 目标白名单。
- 网络分段:内网服务不应能被一个被攻陷的边界代理任意访问。
- 凭据管理:禁止明文存储与复用,定期轮换。
- 监控隧道工具特征与异常出站连接。
11. 速查表
识别
1 | |
经代理探测内网
1 | |
SSH 穿代理
1 | |
拿到 SSH 后建隧道
1 | |
自带隧道工具
1 | |
结语
代理是渗透测试中”以小博大”的支点:一个看似普通的端口,可能就是通向整个内网的隧道入口。应对的核心方法论始终一致——
- 识别:它是什么协议、要不要认证、是哪个软件。
- 对话:用对协议(HTTP/CONNECT/SOCKS),拿到能用的通道。
- 探测:借它去看你直接看不到的网络,尤其
127.0.0.1和内网段。 - 穿透:让 SSH、扫描器、利用工具都能经它工作;必要时自建隧道把内网整体拉出来。
- 升级:把单点代理变成稳定的 pivot,支撑后续横向。
Gost 靶机用一条 泄露代理凭据 → CONNECT 隧穿到本地 SSH → 进内网 的链子,把这套方法论演绎得淋漓尽致。把本文的命令和思路内化,下次再见到任何代理端口,你都能迅速判断它的价值并把它”为我所用”。
再次声明:本文所有技术仅用于授权范围内的渗透测试、红队演练与安全研究。未经授权对他人系统使用属违法行为。