前言
我们拿到手的 frp 主要有两个配置文件,分别是服务端的 frps.ini 和客户端的 frpc.ini。
我们先来简单分析一下配置文件的含义,首先是 frps.ini
[common]
bind_port = 7001
authentication_method = token
token = qwer1234
上面的文件表示 frps 监听于 7001 端口,并且使用 token 认证方式
然后是 frpc.ini,可以说内容都集中在 frpc.ini 上了
# frpc.ini
[common]
server_addr = 192.168.244.137
server_port = 7001
authentication_method = token
token = qwer1234
[socks5]
type = tcp
remote_port = 1080
plugin = socks5
[range:portforward]
type = tcp
local_ip = 127.0.0.1
local_port = 3000,8000-8010,9000
remote_port = 3000,8000-8010,9000
server_addr 和 server_port 写的是服务端的地址,其中 [socks5] 处标明了一个 socks5 的插件。然后就是 [range:portforward]
通俗易懂,表示将 127.0.0.1 端口分别转发到 frps 服务器的端口。此时依次运行服务端和客户端。
启动方式也都很简单在服务端上的启动命令为
./frps -c frps.ini
客户端上的启动命令为
./frpc -c frpc.ini
即可实现端口转发并且在服务端的 1080 端口处使用 socks5 代理。
操作全部写在配置文件中,使用者只需要执行两条命令即可,是不是感觉比 chisel 清爽许多?
socks5 多层代理示例
假设我们存在以下环境,kali 和 external 的 eth0 网卡的 ip 是公网,可互相访问,dmz 和 internal 不出网,我们暂时获得了 external 的控制权,想要使用 socks 代理技术依次访问内网。
操作很简单,可以知道的是 frps.ini 是不用修改的,用如下内容即可
[common]
bind_port = 7001
authentication_method = token
token = qwer1234
首先将 external 的 frpc.ini 修改如下
# frpc.ini
[common]
server_addr = 192.168.244.137
server_port = 7001
authentication_method = token
token = qwer1234
[socks5]
type = tcp
remote_port = 1080
plugin = socks5
在 kali 和 external 上依次运行 frps 和 frpc。并且在 kali 的 proxychians 配置文件上增加一条 socks5 127.0.0.1 1080
此时即可访问到 dmz
假设我们获得了 dmz 的控制权,想要继续使用 socks 代理访问 internal 可以这样,先在 external 上运行 frps,然后将 dmz 上的 frpc.ini 修改如下
# frpc.ini
[common]
server_addr = 172.24.0.3
server_port = 7001
authentication_method = token
token = qwer1234
[socks5]
type = tcp
remote_port = 1080
plugin = socks5
在 dmz 上运行 frpc,并且在 kali 的 proxychains.conf
多加一条 socks5 127.0.0.1 1080
即可
结语
至于内网反弹 Shell 等操作需要合理运用 frp 端口转发的功能,类似于 chisel 介绍的操作。对比 chisel,可以发现 chisel 的 socks 代理比较灵活,有正向反向两种方式。而 frp 对于端口转发 socks 代理操作比较清晰,不过需要额外的配置文件,往往由于目标机器上难以编辑文件而需要采用上传配置文件的方式执行。虽然 chisel 需要输入较长的命令行,比较繁琐,但是也显出了灵活的优势。(不是我在说什么啊,反正如果只是简单的环境和操作我还是更青睐于 chisel 的)
改天再介绍一下其它简单好用的工具吧。